From 53c8b82e9ac2b2bab35d7931053672fcdbd4c8cb Mon Sep 17 00:00:00 2001 From: lzr <1838979562@qq.com> Date: Tue, 2 May 2023 15:04:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=8F=AF=E8=A7=86=E5=8C=96?= =?UTF-8?q?=E6=8C=89=E9=94=AE=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/MapInfos.json | 2 +- data/Skills.json | 2 +- data/System.json | 2 +- img/VirtualButtons/4dir.png | Bin 0 -> 46868 bytes img/VirtualButtons/Control.bac.png | Bin 0 -> 24512 bytes img/VirtualButtons/Control.png | Bin 0 -> 21831 bytes img/VirtualButtons/DEBUG.bac.png | Bin 0 -> 708 bytes img/VirtualButtons/DEBUG.png | Bin 0 -> 708 bytes img/VirtualButtons/DEBUG1.png | Bin 0 -> 19638 bytes img/VirtualButtons/DEBUG2.png | Bin 0 -> 19673 bytes img/VirtualButtons/Directions.png | Bin 0 -> 59595 bytes img/VirtualButtons/ESC.png | Bin 0 -> 335 bytes img/VirtualButtons/Menu.png | Bin 0 -> 5590 bytes img/VirtualButtons/Menu1.png | Bin 0 -> 25828 bytes img/VirtualButtons/Menu2.png | Bin 0 -> 22828 bytes img/VirtualButtons/OK.png | Bin 0 -> 3526 bytes img/VirtualButtons/OK1.png | Bin 0 -> 26219 bytes img/VirtualButtons/OK2.png | Bin 0 -> 21841 bytes img/VirtualButtons/PageDown.png | Bin 0 -> 339 bytes img/VirtualButtons/PageUp.png | Bin 0 -> 281 bytes img/VirtualButtons/Points.png | Bin 0 -> 9068 bytes img/VirtualButtons/dynamic.png | Bin 0 -> 3038 bytes img/VirtualButtons/dynamic_1.png | Bin 0 -> 1740 bytes img/VirtualButtons/dynamic_2.png | Bin 0 -> 3500 bytes js/plugins.js | 3 +- js/plugins/VirtualButtons_OnlyForSelf.js | 1884 ++++++++++++++++++++++ 26 files changed, 1889 insertions(+), 4 deletions(-) create mode 100644 img/VirtualButtons/4dir.png create mode 100644 img/VirtualButtons/Control.bac.png create mode 100644 img/VirtualButtons/Control.png create mode 100644 img/VirtualButtons/DEBUG.bac.png create mode 100644 img/VirtualButtons/DEBUG.png create mode 100644 img/VirtualButtons/DEBUG1.png create mode 100644 img/VirtualButtons/DEBUG2.png create mode 100644 img/VirtualButtons/Directions.png create mode 100644 img/VirtualButtons/ESC.png create mode 100644 img/VirtualButtons/Menu.png create mode 100644 img/VirtualButtons/Menu1.png create mode 100644 img/VirtualButtons/Menu2.png create mode 100644 img/VirtualButtons/OK.png create mode 100644 img/VirtualButtons/OK1.png create mode 100644 img/VirtualButtons/OK2.png create mode 100644 img/VirtualButtons/PageDown.png create mode 100644 img/VirtualButtons/PageUp.png create mode 100644 img/VirtualButtons/Points.png create mode 100644 img/VirtualButtons/dynamic.png create mode 100644 img/VirtualButtons/dynamic_1.png create mode 100644 img/VirtualButtons/dynamic_2.png create mode 100644 js/plugins/VirtualButtons_OnlyForSelf.js diff --git a/data/MapInfos.json b/data/MapInfos.json index 6a246aa..5072982 100644 --- a/data/MapInfos.json +++ b/data/MapInfos.json @@ -34,7 +34,7 @@ null, {"id":32,"expanded":true,"name":"表世界宇宙","order":26,"parentId":1,"scrollX":1589,"scrollY":1613.5}, {"id":33,"expanded":true,"name":"柯伊伯站","order":27,"parentId":32,"scrollX":2069.3333333333335,"scrollY":2077.3333333333335}, {"id":34,"expanded":true,"name":"豆豆星系","order":28,"parentId":32,"scrollX":819,"scrollY":474.5}, -{"id":35,"expanded":false,"name":"豆豆星","order":29,"parentId":34,"scrollX":1450,"scrollY":4176.5}, +{"id":35,"expanded":false,"name":"豆豆星","order":29,"parentId":34,"scrollX":1434,"scrollY":4160.5}, {"id":36,"expanded":true,"name":"群星之城","order":30,"parentId":35,"scrollX":686.2222222222222,"scrollY":1432}, {"id":37,"expanded":false,"name":"测试用的地图","order":53,"parentId":1,"scrollX":693.3333333333334,"scrollY":424}, {"id":38,"expanded":true,"name":"艾瑞姆皇宫","order":31,"parentId":36,"scrollX":1157.3333333333333,"scrollY":1405.3333333333333}, diff --git a/data/Skills.json b/data/Skills.json index 0f8b685..4591210 100644 --- a/data/Skills.json +++ b/data/Skills.json @@ -370,7 +370,7 @@ null, {"id":368,"animationId":33,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"用电流制造纯粹的强光掩护队友逃跑","effects":[{"code":41,"dataId":0,"value1":1,"value2":0}],"hitType":0,"iconIndex":70,"message1":"使用了%1!","message2":"","mpCost":5,"name":"逃脱闪光","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":8,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":0}, {"id":369,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"机械师必备的逃生装置,不属于组装物","effects":[{"code":41,"dataId":0,"value1":1,"value2":0}],"hitType":0,"iconIndex":307,"message1":"使用了%1!","message2":"","mpCost":0,"name":"逃生装置","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":8,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":0}, {"id":370,"animationId":0,"damage":{"critical":false,"elementId":6,"formula":"20+(1+a.level/45)*(a.atk * 3 + a.mat + a.agi/20 - b.def - b.mdf/3)*(a.level*a.atk/2048+2)","type":0,"variance":10},"description":"<强普显示><10%暴击叠加><无视嘲讽> 乱舞状态的普通攻击,几率造成\\it[56],\n挥舞武器时释放的生物电也会在身体周围形成一定的护盾","effects":[],"hitType":0,"iconIndex":76,"message1":"","message2":"","mpCost":0,"name":"普通攻击(乱舞状态)","note":"","occasion":3,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":3,"successRate":100,"tpCost":0,"tpGain":5}, -{"id":371,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"在菜单里使用可以查看郝籽的被动说明","effects":[],"hitType":0,"iconIndex":0,"message1":"","message2":"","mpCost":0,"name":"郝籽被动说明","note":"","occasion":2,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":3,"successRate":100,"tpCost":0,"tpGain":0}, +{"id":371,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"在菜单里使用可以查看郝籽的被动说明","effects":[{"code":44,"dataId":13,"value1":1,"value2":0}],"hitType":0,"iconIndex":0,"message1":"","message2":"","mpCost":0,"name":"郝籽被动说明","note":"","occasion":2,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":3,"successRate":100,"tpCost":0,"tpGain":0}, {"id":372,"animationId":1,"damage":{"critical":true,"elementId":1,"formula":"1+(a.atk * 2+a.agi/200 - b.def*3/2)*(a.level*a.atk/2048+2)","type":1,"variance":20},"description":"","effects":[],"hitType":1,"iconIndex":0,"message1":"赤手空拳的攻击!","message2":"","mpCost":0,"name":"赤手空拳的攻击","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":5,"successRate":100,"tpCost":0,"tpGain":8}, {"id":373,"animationId":10,"damage":{"critical":true,"elementId":8,"formula":"50+(3*(b.mhp-b.hp)/b.mhp)*(a.atk * 2+a.mat*2 - b.mdf- b.def)*(a.level*a.atk/2048+2)/2","type":1,"variance":20},"description":"对濒死敌人进行最后一击的杀戮剑术","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":99,"message1":"的强力攻击!","message2":"","mpCost":0,"name":"绝剑诛邪I","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":5,"successRate":100,"tpCost":0,"tpGain":10}, {"id":374,"animationId":12,"damage":{"critical":true,"elementId":-1,"formula":"1+(1/2+b.hp/(2*b.mhp) + a.level/198)*(a.atk*5/2 +a.mat*3/2 - b.def-b.mdf/2)*(a.level*a.atk/2048+2)","type":0,"variance":20},"description":"<强普显示> 伊扎克斯刚成为魔王时的得意技能,只能在真身状态下,\n通过叠满魔力层数获得释放机会(详情查看被动说明)","effects":[],"hitType":1,"iconIndex":0,"message1":"使用了%1!","message2":"","mpCost":0,"name":"魔王斩","note":"","occasion":3,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":4,"successRate":100,"tpCost":0,"tpGain":10}, diff --git a/data/System.json b/data/System.json index 00ec484..a52f3f7 100644 --- a/data/System.json +++ b/data/System.json @@ -1 +1 @@ -{"airship":{"bgm":{"name":"Ship3","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"$巨龟岩台号","startMapId":0,"startX":0,"startY":0},"armorTypes":["","轻甲","重甲","魔法护甲","普通饰品","魔法饰品","魔法球","副手匕首","副手枪械","左手爪"],"attackMotions":[{"type":0,"weaponImageId":0},{"type":1,"weaponImageId":2},{"type":1,"weaponImageId":9},{"type":1,"weaponImageId":1},{"type":1,"weaponImageId":4},{"type":1,"weaponImageId":10},{"type":1,"weaponImageId":7},{"type":2,"weaponImageId":21},{"type":1,"weaponImageId":14},{"type":1,"weaponImageId":11},{"type":0,"weaponImageId":10},{"type":0,"weaponImageId":11},{"type":0,"weaponImageId":12}],"battleBgm":{"name":"Battle1","pan":0,"pitch":100,"volume":90},"battleback1Name":"DecorativeTile","battleback2Name":"Temple","battlerHue":0,"battlerName":"Dragon","boat":{"bgm":{"name":"Ship1","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"currencyUnit":"经费","defeatMe":{"name":"Defeat1","pan":0,"pitch":100,"volume":90},"editMapId":35,"elements":["","物理","地","风","水","火","电","冰","圣","暗","精神","力场","混沌","幽能","毒","生命治疗","冰火双伤","真实","生命吸取"],"equipTypes":["","武器","副手","帽子","甲衣","靴子","项链","戒指"],"gameTitle":"异常生物见闻录","gameoverMe":{"name":"Gameover1","pan":0,"pitch":100,"volume":90},"locale":"zh_CN","magicSkills":[2],"menuCommands":[true,true,true,true,true,true],"optDisplayTp":true,"optDrawTitle":true,"optExtraExp":false,"optFloorDeath":false,"optFollowers":true,"optSideView":false,"optSlipDeath":false,"optTransparent":false,"partyMembers":[1],"ship":{"bgm":{"name":"Kan R Gao - Floating By","pan":0,"pitch":100,"volume":100},"characterIndex":1,"characterName":"Vehicle","startMapId":31,"startX":174,"startY":58},"skillTypes":["","特技","魔法","专属技能","神术与天赋","各种普通攻击"],"sounds":[{"name":"Cursor2","pan":0,"pitch":100,"volume":90},{"name":"Decision1","pan":0,"pitch":100,"volume":90},{"name":"Cancel2","pan":0,"pitch":100,"volume":90},{"name":"Buzzer1","pan":0,"pitch":100,"volume":90},{"name":"Equip1","pan":0,"pitch":100,"volume":90},{"name":"Save","pan":0,"pitch":100,"volume":90},{"name":"Load","pan":0,"pitch":100,"volume":90},{"name":"Battle1","pan":0,"pitch":100,"volume":90},{"name":"Run","pan":0,"pitch":100,"volume":90},{"name":"Attack3","pan":0,"pitch":100,"volume":90},{"name":"Damage4","pan":0,"pitch":100,"volume":90},{"name":"Collapse1","pan":0,"pitch":100,"volume":90},{"name":"Collapse2","pan":0,"pitch":100,"volume":90},{"name":"Collapse3","pan":0,"pitch":100,"volume":90},{"name":"Damage5","pan":0,"pitch":100,"volume":90},{"name":"Collapse4","pan":0,"pitch":100,"volume":90},{"name":"Recovery","pan":0,"pitch":100,"volume":90},{"name":"Miss","pan":0,"pitch":100,"volume":90},{"name":"Evasion1","pan":0,"pitch":100,"volume":90},{"name":"Evasion2","pan":0,"pitch":100,"volume":90},{"name":"Reflection","pan":0,"pitch":100,"volume":90},{"name":"Shop1","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90}],"startMapId":65,"startX":18,"startY":31,"switches":["","吃完饭","水管爆了","薇薇安出现","蝙蝠出现","海妖现身","五月海妖形态","出现水泡","水塔剧情借宿","去地下室","治疗海妖","准备出发","苏哈白火出现","击败幽灵船","不明海妖出现","丧尸出现","发现丧尸","击败人鱼","对战冰系怪物","对战老鼠怪","对战蝙蝠怪","对战火系怪物","飞砖对话","豆豆星彩蛋完成","熔岩巨蝎出现","击败巨蝎","收集素材","对战魔族","第一次狗炮时的对话","狗炮彩蛋剧情结束","对战恶灵生物","怪物秒杀开关","阿拉曼达开局剧情完成","希尔妲对话完成","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","偷看","尝试交互","触碰脑和容器","完成研究红球","击败伊娃","出现水花","水花伤害","增加火球1","增加火球2","增加火球3","增加背球","增加左球","增加右球","进入纳萨托恩","进入管道","海妖消失","丧尸复苏","水晶破碎","打败守门海妖哨兵","被海妖围了","击败脑怪","密室","击败密室门卫","支援老王","击败海妖女王","发现大漩涡","前往水涌之核","关闭大护壁","豆豆出现","清理皇宫","清理完成","莎奇拉水泡开","点击w","能召唤飞船","初次进入研究炸","游戏开始","点击Q","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"terms":{"basic":["等级","Lv","HP","HP","MP","MP","TP","TP","经验值","EXP"],"commands":["战斗","逃跑","攻击","防御","物品","技能","装备","状态","整队","保存","游戏结束","设置","武器","护甲","随身杂物","装备","最强装备","清空","开始游戏","继续游戏",null,"回到标题","取消",null,"购买","出售"],"params":["最大 HP","最大 MP","攻击力","防御力","魔法攻击","魔法防御","敏捷","幸运","命中率","回避率"],"messages":{"actionFailure":"对%1没有效果!","actorDamage":"%1受到了 %2 点伤害!","actorDrain":"%1被吸收了 %3 点 %2!","actorGain":"%1的 %2 增加了 %3 点!","actorLoss":"%1的 %2 减少了 %3 点!","actorNoDamage":"%1没有受到伤害!","actorNoHit":"Miss! %1没有受到伤害!","actorRecovery":"%1恢复了 %3 点 %2!","alwaysDash":"始终跑步","bgmVolume":"BGM 音量","bgsVolume":"BGS 音量","buffAdd":"%1的%2上升了!","buffRemove":"%1的%2恢复正常了!","commandRemember":"记住指令","counterAttack":"%1的反击!","criticalToActor":"痛恨一击!","criticalToEnemy":"会心一击!","debuffAdd":"%1的%2下降了!","defeat":"%1被击败了。","emerge":"%1出现了!","enemyDamage":"%1受到了 %2 点伤害!","enemyDrain":"%1被吸收了 %3 点 %2!","enemyGain":"%1的 %2 增加了 %3 点!","enemyLoss":"%1的 %2 减少了 %3 点!","enemyNoDamage":"没有对%1造成伤害!","enemyNoHit":"Miss!没有对%1造成伤害!","enemyRecovery":"%1恢复了 %3 点 %2!","escapeFailure":"但是没有逃跑成功!","escapeStart":"%1开始逃跑了!","evasion":"%1躲开了攻击!","expNext":"距离下一%1","expTotal":"现在的%1","file":"文件","levelUp":"%1升到了 %2 %3!","loadMessage":"读取哪个文件?","magicEvasion":"%1抵消了魔法!","magicReflection":"%1反射了魔法!","meVolume":"ME 音量","obtainExp":"获得了 %1 点%2!","obtainGold":"获得了 %1\\G!","obtainItem":"获得了%1!","obtainSkill":"学会了%1!","partyName":"%1的队伍","possession":"持有数","preemptive":"%1先发制人!","saveMessage":"保存到哪个文件?","seVolume":"SE 音量","substitute":"%1保护了%2!","surprise":"%1被偷袭了!","useItem":"%1使用了%2!","victory":"%1胜利了!"}},"testBattlers":[{"actorId":1,"equips":[6,0,0,0,0],"level":12},{"actorId":8,"equips":[0,0,0,0,0],"level":12},{"actorId":0,"equips":[3,0,2,3,4],"level":1},{"actorId":0,"equips":[4,0,2,3,4],"level":1}],"testTroopId":17,"title1Name":"Plain","title2Name":"","titleBgm":{"name":"猫耳开关","pan":0,"pitch":100,"volume":90},"variables":["","技能数值","数据判断","掉落物概率随机数","","诺兰扣血数值","时间推进","诺兰应急维修计数","刚性护盾数值计算","海妖碰撞伤害","火位置X","火位置Y","玩家方向","火距离","BGM编号记录","清理废墟","","","","","","地图ID","玩家位置X","玩家位置Y","图片移动X","图片移动Y","随机数","火1位置X","火1位置Y","火1距离","火2位置X","火2位置Y","火2距离","火3位置X","火3位置Y","火3距离","背火位置X","背火位置Y","背火距离","右火位置X","右火位置Y","右火距离","左火位置X","左火位置Y","左火距离","海妖碰撞伤害1","海妖碰撞伤害2","海妖碰撞伤害3","海妖碰撞伤害背","海妖碰撞伤害右","海妖碰撞伤害左","玩家方向1","玩家方向2","玩家方向3","玩家方向4","玩家方向5","玩家方向6","伊娃血量","","","","史莱姆核心结晶数量","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"versionId":71019623,"victoryMe":{"name":"Victory1","pan":0,"pitch":100,"volume":90},"weaponTypes":["","剑","长柄武器","匕首","斧","爪","弓弩","枪炮","法杖","莉莉的爪子","魔王佩剑","魔导工作手套","宇宙碎片长剑"],"windowTone":[0,0,0,0]} \ No newline at end of file +{"airship":{"bgm":{"name":"Ship3","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"$巨龟岩台号","startMapId":0,"startX":0,"startY":0},"armorTypes":["","轻甲","重甲","魔法护甲","普通饰品","魔法饰品","魔法球","副手匕首","副手枪械","左手爪"],"attackMotions":[{"type":0,"weaponImageId":0},{"type":1,"weaponImageId":2},{"type":1,"weaponImageId":9},{"type":1,"weaponImageId":1},{"type":1,"weaponImageId":4},{"type":1,"weaponImageId":10},{"type":1,"weaponImageId":7},{"type":2,"weaponImageId":21},{"type":1,"weaponImageId":14},{"type":1,"weaponImageId":11},{"type":0,"weaponImageId":10},{"type":0,"weaponImageId":11},{"type":0,"weaponImageId":12}],"battleBgm":{"name":"Battle1","pan":0,"pitch":100,"volume":90},"battleback1Name":"DecorativeTile","battleback2Name":"Temple","battlerHue":0,"battlerName":"Dragon","boat":{"bgm":{"name":"Ship1","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"currencyUnit":"经费","defeatMe":{"name":"Defeat1","pan":0,"pitch":100,"volume":90},"editMapId":35,"elements":["","物理","地","风","水","火","电","冰","圣","暗","精神","力场","混沌","幽能","毒","生命治疗","冰火双伤","真实","生命吸取"],"equipTypes":["","武器","副手","帽子","甲衣","靴子","项链","戒指"],"gameTitle":"异常生物见闻录","gameoverMe":{"name":"Gameover1","pan":0,"pitch":100,"volume":90},"locale":"zh_CN","magicSkills":[2],"menuCommands":[true,true,true,true,true,true],"optDisplayTp":true,"optDrawTitle":true,"optExtraExp":false,"optFloorDeath":false,"optFollowers":true,"optSideView":false,"optSlipDeath":false,"optTransparent":false,"partyMembers":[1],"ship":{"bgm":{"name":"Kan R Gao - Floating By","pan":0,"pitch":100,"volume":100},"characterIndex":1,"characterName":"Vehicle","startMapId":31,"startX":174,"startY":58},"skillTypes":["","特技","魔法","专属技能","神术与天赋","各种普通攻击"],"sounds":[{"name":"Cursor2","pan":0,"pitch":100,"volume":90},{"name":"Decision1","pan":0,"pitch":100,"volume":90},{"name":"Cancel2","pan":0,"pitch":100,"volume":90},{"name":"Buzzer1","pan":0,"pitch":100,"volume":90},{"name":"Equip1","pan":0,"pitch":100,"volume":90},{"name":"Save","pan":0,"pitch":100,"volume":90},{"name":"Load","pan":0,"pitch":100,"volume":90},{"name":"Battle1","pan":0,"pitch":100,"volume":90},{"name":"Run","pan":0,"pitch":100,"volume":90},{"name":"Attack3","pan":0,"pitch":100,"volume":90},{"name":"Damage4","pan":0,"pitch":100,"volume":90},{"name":"Collapse1","pan":0,"pitch":100,"volume":90},{"name":"Collapse2","pan":0,"pitch":100,"volume":90},{"name":"Collapse3","pan":0,"pitch":100,"volume":90},{"name":"Damage5","pan":0,"pitch":100,"volume":90},{"name":"Collapse4","pan":0,"pitch":100,"volume":90},{"name":"Recovery","pan":0,"pitch":100,"volume":90},{"name":"Miss","pan":0,"pitch":100,"volume":90},{"name":"Evasion1","pan":0,"pitch":100,"volume":90},{"name":"Evasion2","pan":0,"pitch":100,"volume":90},{"name":"Reflection","pan":0,"pitch":100,"volume":90},{"name":"Shop1","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90}],"startMapId":65,"startX":18,"startY":31,"switches":["","吃完饭","水管爆了","薇薇安出现","蝙蝠出现","海妖现身","五月海妖形态","出现水泡","水塔剧情借宿","去地下室","治疗海妖","准备出发","苏哈白火出现","击败幽灵船","不明海妖出现","丧尸出现","发现丧尸","击败人鱼","对战冰系怪物","对战老鼠怪","对战蝙蝠怪","对战火系怪物","飞砖对话","豆豆星彩蛋完成","熔岩巨蝎出现","击败巨蝎","收集素材","对战魔族","第一次狗炮时的对话","狗炮彩蛋剧情结束","对战恶灵生物","怪物秒杀开关","阿拉曼达开局剧情完成","希尔妲对话完成","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","偷看","尝试交互","触碰脑和容器","完成研究红球","击败伊娃","出现水花","水花伤害","增加火球1","增加火球2","增加火球3","增加背球","增加左球","增加右球","进入纳萨托恩","进入管道","海妖消失","丧尸复苏","水晶破碎","打败守门海妖哨兵","被海妖围了","击败脑怪","密室","击败密室门卫","支援老王","击败海妖女王","发现大漩涡","前往水涌之核","关闭大护壁","豆豆出现","清理皇宫","清理完成","莎奇拉水泡开","点击w","能召唤飞船","初次进入研究炸","游戏开始","点击Q","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"terms":{"basic":["等级","Lv","HP","HP","MP","MP","TP","TP","经验值","EXP"],"commands":["战斗","逃跑","攻击","防御","物品","技能","装备","状态","整队","保存","游戏结束","设置","武器","护甲","随身杂物","装备","最强装备","清空","开始游戏","继续游戏",null,"回到标题","取消",null,"购买","出售"],"params":["最大 HP","最大 MP","攻击力","防御力","魔法攻击","魔法防御","敏捷","幸运","命中率","回避率"],"messages":{"actionFailure":"对%1没有效果!","actorDamage":"%1受到了 %2 点伤害!","actorDrain":"%1被吸收了 %3 点 %2!","actorGain":"%1的 %2 增加了 %3 点!","actorLoss":"%1的 %2 减少了 %3 点!","actorNoDamage":"%1没有受到伤害!","actorNoHit":"Miss! %1没有受到伤害!","actorRecovery":"%1恢复了 %3 点 %2!","alwaysDash":"始终跑步","bgmVolume":"BGM 音量","bgsVolume":"BGS 音量","buffAdd":"%1的%2上升了!","buffRemove":"%1的%2恢复正常了!","commandRemember":"记住指令","counterAttack":"%1的反击!","criticalToActor":"痛恨一击!","criticalToEnemy":"会心一击!","debuffAdd":"%1的%2下降了!","defeat":"%1被击败了。","emerge":"%1出现了!","enemyDamage":"%1受到了 %2 点伤害!","enemyDrain":"%1被吸收了 %3 点 %2!","enemyGain":"%1的 %2 增加了 %3 点!","enemyLoss":"%1的 %2 减少了 %3 点!","enemyNoDamage":"没有对%1造成伤害!","enemyNoHit":"Miss!没有对%1造成伤害!","enemyRecovery":"%1恢复了 %3 点 %2!","escapeFailure":"但是没有逃跑成功!","escapeStart":"%1开始逃跑了!","evasion":"%1躲开了攻击!","expNext":"距离下一%1","expTotal":"现在的%1","file":"文件","levelUp":"%1升到了 %2 %3!","loadMessage":"读取哪个文件?","magicEvasion":"%1抵消了魔法!","magicReflection":"%1反射了魔法!","meVolume":"ME 音量","obtainExp":"获得了 %1 点%2!","obtainGold":"获得了 %1\\G!","obtainItem":"获得了%1!","obtainSkill":"学会了%1!","partyName":"%1的队伍","possession":"持有数","preemptive":"%1先发制人!","saveMessage":"保存到哪个文件?","seVolume":"SE 音量","substitute":"%1保护了%2!","surprise":"%1被偷袭了!","useItem":"%1使用了%2!","victory":"%1胜利了!"}},"testBattlers":[{"actorId":1,"equips":[6,0,0,0,0],"level":12},{"actorId":8,"equips":[0,0,0,0,0],"level":12},{"actorId":0,"equips":[3,0,2,3,4],"level":1},{"actorId":0,"equips":[4,0,2,3,4],"level":1}],"testTroopId":17,"title1Name":"Plain","title2Name":"","titleBgm":{"name":"猫耳开关","pan":0,"pitch":100,"volume":90},"variables":["","技能数值","数据判断","掉落物概率随机数","","诺兰扣血数值","时间推进","诺兰应急维修计数","刚性护盾数值计算","海妖碰撞伤害","火位置X","火位置Y","玩家方向","火距离","BGM编号记录","清理废墟","","","","","","地图ID","玩家位置X","玩家位置Y","图片移动X","图片移动Y","随机数","火1位置X","火1位置Y","火1距离","火2位置X","火2位置Y","火2距离","火3位置X","火3位置Y","火3距离","背火位置X","背火位置Y","背火距离","右火位置X","右火位置Y","右火距离","左火位置X","左火位置Y","左火距离","海妖碰撞伤害1","海妖碰撞伤害2","海妖碰撞伤害3","海妖碰撞伤害背","海妖碰撞伤害右","海妖碰撞伤害左","玩家方向1","玩家方向2","玩家方向3","玩家方向4","玩家方向5","玩家方向6","伊娃血量","","","","史莱姆核心结晶数量","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"versionId":9570604,"victoryMe":{"name":"Victory1","pan":0,"pitch":100,"volume":90},"weaponTypes":["","剑","长柄武器","匕首","斧","爪","弓弩","枪炮","法杖","莉莉的爪子","魔王佩剑","魔导工作手套","宇宙碎片长剑"],"windowTone":[0,0,0,0]} \ No newline at end of file diff --git a/img/VirtualButtons/4dir.png b/img/VirtualButtons/4dir.png new file mode 100644 index 0000000000000000000000000000000000000000..949d9e8bbf00ed236e686405c1001e394ada26b8 GIT binary patch literal 46868 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 literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/Control.bac.png b/img/VirtualButtons/Control.bac.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0f5924fffd297ec63082b73a4593a1abc73b4c GIT binary patch literal 24512 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 literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/Control.png b/img/VirtualButtons/Control.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4ce38654b6620f6f32f8bfb6efd786f8498d79 GIT binary patch literal 21831 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 literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/DEBUG.png b/img/VirtualButtons/DEBUG.png new file mode 100644 index 0000000000000000000000000000000000000000..836c383e9e705877d427da202f81ec39a15d6aed GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0vp^DL|~j!2~4RrA~+dDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>W5YcBV*A7srqc=eIN779LjMaWJ0F{>f%uTdIxE zst<}P-U%shmX%-qeN{>E$YD>5{rAop=$&pjZS-Ih&kh}CEX+Uhk=7Ib?>W`6rZzgR zhc#lm?u+hr)8(cSW^>fF)RQU$_o__(>Cw4Xkw4_yhE1;1wqE>hIXxwG%hczosS7I3 zb;nG+8sVUA*x-7NX}K(CqVn?6FH=(!w<$blTvXH&vV8ZZ(}$7|i@i=>X4Aa_jls)OuCmW<``5PS z^D=j-CqAdN6svr`pU^sPu%))=YL2CR=PAEfBR{dcpSbjh z574Tmhwo2Y+L|{>_1wbgF-fKWPiZRMpBSo?b9Z^lS1xbUxtA`zQ3&4T)ooKSStoMO z+_kQ!W|SzM_djs6_sZtorZqm>zbs)Wm~ZQUe&x^9(qHk{Zzp<8n_Ljd o7Bh`;dg_5xNf7gz!Taz0&*RmCEzOi`fGLl`)78&qol`;+0A`s(Qvd(} literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/DEBUG1.png b/img/VirtualButtons/DEBUG1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2916ddd734ee1c054e30c4638e9b19af6922533 GIT binary patch literal 19638 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 XwxJ-cZecb4X0hPF@PJKzlV|@M656+t literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/DEBUG2.png b/img/VirtualButtons/DEBUG2.png new file mode 100644 index 0000000000000000000000000000000000000000..63ef09382a6631d317bcb1b2e8442995f3124d93 GIT binary patch literal 19673 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 O$CM%AiXHM<3;zuX>)EdW literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/Directions.png b/img/VirtualButtons/Directions.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0dac0a5c8c64407b445ac550314f7711ab4694 GIT binary patch literal 59595 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 b7U1Vg$_PujM2h-<41kinx?Hi0X~6#hE97^# literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/OK2.png b/img/VirtualButtons/OK2.png new file mode 100644 index 0000000000000000000000000000000000000000..1a958dcd080ee3423cefe0d9d5ecc55394b67866 GIT binary patch literal 21841 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 literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/PageDown.png b/img/VirtualButtons/PageDown.png new file mode 100644 index 0000000000000000000000000000000000000000..c8273f199700cebaab1697423ddc2156aff0f116 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1SFZ~=vx6P#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;0sR|$B+p3x06ou9#PA9_c(-anwwc_whuno_Z8(ZZWpjybNM ze_+PJA69NBeXbv1y!Ypd8vDy78Mza_CGed;so2ZcB2bwZ!|e5xIpS6El$6&NSO4m- zxvN{``R(3;7r(b%P4D*I{L%Ws`6b)fKcC&rX13GfRJC>X|D)O!y!;;+kzD#$`bTA* YU_{^M(!lvI6;>1s;*b3=DjSL74G){)!Z!;5tti$B+p3x0fFBwis}dBv@3FyF zF_Wkj2Y;{%AO8LRR-5{ryA$lS61FpyX+sH)dCM1?oc-GDaZfMvPT#C!TR!YnREc@b zn_0~qZ@wg4Rl2v?J7;!^#uzRzs9BWysJr3N*4o3$wH9*Uz;?b?wszAM= P(B%xCu6{1-oD!M<{6uM^ literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/Points.png b/img/VirtualButtons/Points.png new file mode 100644 index 0000000000000000000000000000000000000000..15283e1a1915f720be1e8b82f2fc1fa2d82181f7 GIT binary patch literal 9068 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 X1dbs-0lliNUmxOm(&q%-4W05osq~*q literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/dynamic_1.png b/img/VirtualButtons/dynamic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce76b2556c5d56fb6f26ce3e9d38dcadbcb56ff GIT binary patch literal 1740 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8ahd7vkBGaa?$puo3#X;^)4C~IxyaaMs(j9#r z85lP9bN@+X1@buyJR*x382Ao@Fyrz36)6l1Y>A#Ojv*CsZ*Le19x>oyaD1M*+kAQh zmsou=%St2j-MuPI;V*7g^D{)%r85aAy<>2E#3!IKN)53f__B7#{qK9PS+O(Z*J{5z z|M`sNdBy|L*YEva!w~XgCo@Z@wZnuRqts{+jHZIoj6lV*;7QL%_Lv)jLY|Emt^#Wy N22WQ%mvv4FO#pPVL)`!X literal 0 HcmV?d00001 diff --git a/img/VirtualButtons/dynamic_2.png b/img/VirtualButtons/dynamic_2.png new file mode 100644 index 0000000000000000000000000000000000000000..745c9cfc052807dffc23e3c7896c216b74b90f1a GIT binary patch literal 3500 zcmeHK&yU+g6!u;gT4_ZECwgJz7m?`bY98 zcpFm@HwY60-YDW!p*8K=jUpxVm`gC=!zl6fU%&iH2NCo2Tde>EX@`%Zy|awpJlpTn zvt#Np{l;~0t-y*P=8}LS9w#|2e0|1?)qS~a=wJqs$G*N(1_VdJ0qBT~gI2?V)U++& zdJWS-o@KudEM&R{at*Tyk%^Imn;xh>x{8*u5Fd8mtYWDrUmr=CV#AnDr;TZ|A+n)i zdY)$>%djk{5HLSYBq?B$Z!Z|SJf~Td%19)jWF!M|B7I$DIxitkYuY5QWKx0|1xXFF zfy$C*Kt^j^dXkN2!5KC9n8!Skxx$(?HXR8m@{u@)x_R_(Ru$g<;Ee;#Ysl_?nI@zT~?FgPR5B8Szn0pqEQEnltHHhuH1?eCZ_o-OK{#L zlKZ-aECi7Sk=HkEY+AVGzJ}Tup*b`VEDBFoLR+}md<3ct!-ynL1T%_5k;O!n8^vVE zjWikRpcWB##8_l1u*$AE%OVJHFUciIDDQQBT~*wOB8FR*W7-6{&_S*ZDYZHDJlBPG zYY?^^VtG!JFZOo@Jt_NI?w?zn392|AMn!GQW0Z%`v^^WPnQcPC2W=Q4)^ zZu0l4yKw|&j=+SLPWN?MwwN=$T8>ue@l=tk{nHUwq>pL-JbErdIVBn287l3bU@ha^ z)I~Dk*;4W;$%q;+Jj;DO%tQ=GnvNq%%1Vt%!m3kS_XbD-9y;aRI60X-UZAHl%)IiI z0xetqzYA1JPe&vfay6O_y)4BjhuFOF#=ku=d$%<37H~C1%iDT?3eEzY~2T!?%(_Nuj%y';\\\\\\\\n } catch (e){\\\\\\\\n result.innerHTML+=\\\\\\\\\\\\\\\"[catch Error!]
\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"[Error Name:]\\\\\\\\\\\\\\\"+e.name+'
'+\\\\\\\\n \\\\\\\\\\\\\\\"[Error Meaasge:]\\\\\\\\\\\\\\\"+e.message+\\\\\\\\\\\\\\\"
\\\\\\\\\\\\\\\";\\\\\\\\n }\\\\\\\\n };\\\\\\\\n\\\\\\\\n DebugBaseButton.clacTextWidth=function(text,fontSize){\\\\\\\\n DebugBaseButton.clacCanvas=DebugBaseButton.clacCanvas||document.createElement(\\\\\\\\\\\\\\\"canvas\\\\\\\\\\\\\\\");\\\\\\\\n var context=DebugBaseButton.clacCanvas.getContext(\\\\\\\\\\\\\\\"2d\\\\\\\\\\\\\\\");\\\\\\\\n context.font=context.font.replace(/\\\\\\\\\\\\\\\\d+px/, fontSize+\\\\\\\\\\\\\\\"px\\\\\\\\\\\\\\\");\\\\\\\\n return context.measureText(text).width;\\\\\\\\n }\\\\\\\\n\\\\\\\\n var console_log=console.log;\\\\\\\\n console.log=function(message){\\\\\\\\n var fontSize=parseInt(DebugBaseButton.resultDiv.style.fontSize);\\\\\\\\n if (typeof message == 'object') {\\\\\\\\n DebugBaseButton.resultDiv.innerHTML += ('[Console log:]'+\\\\\\\\n MakeObjectInnerHtmlIndent(message,DebugBaseButton.clacTextWidth('[Console log:]',fontSize),fontSize));\\\\\\\\n } else {\\\\\\\\n DebugBaseButton.resultDiv.innerHTML += '[Console log:]'+message + '
';\\\\\\\\n }\\\\\\\\n console_log(message);\\\\\\\\n };\\\\\\\\n\\\\\\\\n MakeObjectInnerHtmlIndent=function(object,indent,fontSize){\\\\\\\\n var innerHTML=\\\\\\\\\\\\\\\"

\\\\\\\\\\\\\\\";\\\\\\\\n for(var i in object){\\\\\\\\n innerHTML+=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"+i+\\\\\\\\\\\\\\\" :\\\\\\\\\\\\\\\";\\\\\\\\n if(typeof object[i] =='object'){\\\\\\\\n innerHTML+=MakeObjectInnerHtmlIndent(object[i],DebugBaseButton.clacTextWidth(i,fontSize),fontSize);\\\\\\\\n } else {\\\\\\\\n innerHTML+=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"+object[i]+\\\\\\\\\\\\\\\"
\\\\\\\\\\\\\\\"\\\\\\\\n }\\\\\\\\n }\\\\\\\\n innerHTML+=\\\\\\\\\\\\\\\"
\\\\\\\\\\\\\\\";\\\\\\\\n return innerHTML;\\\\\\\\n }\\\\\\\\n\\\\\\\\n DebugBaseButton.ExitDebug=function(Debug){\\\\\\\\n this.removeChild(Debug);\\\\\\\\n TouchInput._setupEventHandlers();\\\\\\\\n Input._setupEventHandlers();\\\\\\\\n DebugBaseButton.enterInput.removeEventListener(\\\\\\\\\\\\\\\"click\\\\\\\\\\\\\\\",DebugBaseButton.enterInput_bind);\\\\\\\\n DebugBaseButton.exitInput.removeEventListener(\\\\\\\\\\\\\\\"click\\\\\\\\\\\\\\\",DebugBaseButton.exitInput_bind);\\\\\\\\n };\\\\\\\\n\\\\\\\\n DebugBaseButton.debugDiv.setAttribute(\\\\\\\\\\\\\\\"style\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"position: absolute;margin: auto; top: 0px; left: 0px; right: 0px; bottom: 0px;z-index: 1000; height:\\\\\\\\\\\\\\\"+\\\\\\\\n canvas.offsetHeight+\\\\\\\\\\\\\\\"px; width:\\\\\\\\\\\\\\\"+canvas.offsetWidth+\\\\\\\\\\\\\\\"px; background-color: rgba(0, 0, 0, 0.3); color: #FFFFFF; user-select:text;\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.debugDiv.setAttribute(\\\\\\\\\\\\\\\"id\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"DebugDiv\\\\\\\\\\\\\\\");\\\\\\\\n document.body.appendChild(DebugBaseButton.debugDiv);\\\\\\\\n\\\\\\\\n //input.setAttribute(\\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"text\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.debugInput.setAttribute(\\\\\\\\\\\\\\\"style\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"width:\\\\\\\\\\\\\\\"+(canvas.offsetWidth-150*Graphics._realScale)+\\\\\\\\\\\\\\\"px; background-color: rgba(0,0,0,0.3);\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"height: \\\\\\\\\\\\\\\"+(150*Graphics._realScale)+\\\\\\\\\\\\\\\"px; font-size: 30px; color: rgba(255,255,255,1); resize: none;\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.debugInput.setAttribute(\\\\\\\\\\\\\\\"cols\\\\\\\\\\\\\\\",canvas.offsetWidth-150*Graphics._realScale);\\\\\\\\n DebugBaseButton.debugInput.setAttribute(\\\\\\\\\\\\\\\"rows\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.debugDiv.appendChild(DebugBaseButton.debugInput);\\\\\\\\n\\\\\\\\n DebugBaseButton.enterInput.setAttribute(\\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"button\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.enterInput.setAttribute(\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"执行\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.enterInput.setAttribute(\\\\\\\\\\\\\\\"style\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"position: absolute; left:\\\\\\\\\\\\\\\"+DebugBaseButton.debugInput.offsetWidth+\\\\\\\\\\\\\\\"px;\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"width: \\\\\\\\\\\\\\\"+(canvas.offsetWidth-DebugBaseButton.debugInput.offsetWidth)+\\\\\\\\\\\\\\\"px; height:\\\\\\\\\\\\\\\"+(DebugBaseButton.debugInput.offsetHeight/2)+\\\\\\\\\\\\\\\"px;\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"background-color: rgba(0,0,0,0.3); font-size: \\\\\\\\\\\\\\\"+40*Graphics._realScale+\\\\\\\\\\\\\\\"px; color: rgba(255,255,255,0.7);\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.enterInput_bind=DebugBaseButton.RunJavaScript.bind(DebugBaseButton.enterInput,DebugBaseButton.debugInput,DebugBaseButton.resultDiv)\\\\\\\\n DebugBaseButton.enterInput.addEventListener(\\\\\\\\\\\\\\\"click\\\\\\\\\\\\\\\",DebugBaseButton.enterInput_bind);\\\\\\\\n DebugBaseButton.debugDiv.appendChild(DebugBaseButton.enterInput);\\\\\\\\n\\\\\\\\n DebugBaseButton.exitInput.setAttribute(\\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"button\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.exitInput.setAttribute(\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"退出\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.exitInput.setAttribute(\\\\\\\\\\\\\\\"style\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"position: absolute; left:\\\\\\\\\\\\\\\"+DebugBaseButton.debugInput.offsetWidth+\\\\\\\\\\\\\\\"px;\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"width: \\\\\\\\\\\\\\\"+(canvas.offsetWidth-DebugBaseButton.debugInput.offsetWidth)+\\\\\\\\\\\\\\\"px; top:\\\\\\\\\\\\\\\"+(DebugBaseButton.debugInput.offsetHeight/2)+\\\\\\\\\\\\\\\"px; height:\\\\\\\\\\\\\\\"+(DebugBaseButton.debugInput.offsetHeight/2)+\\\\\\\\\\\\\\\"px;\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"background-color: rgba(0,0,0,0.3); font-size: \\\\\\\\\\\\\\\"+40*Graphics._realScale+\\\\\\\\\\\\\\\"px; color: rgba(255,255,255,0.7);\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.exitInput_bind=DebugBaseButton.ExitDebug.bind(document.body,DebugBaseButton.debugDiv);\\\\\\\\n DebugBaseButton.exitInput.addEventListener(\\\\\\\\\\\\\\\"click\\\\\\\\\\\\\\\",DebugBaseButton.exitInput_bind);\\\\\\\\n DebugBaseButton.debugDiv.appendChild(DebugBaseButton.exitInput);\\\\\\\\n\\\\\\\\n DebugBaseButton.resultDiv.setAttribute(\\\\\\\\\\\\\\\"style\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"position: absolute; width: \\\\\\\\\\\\\\\"+canvas.offsetWidth+\\\\\\\\\\\\\\\"px; height:\\\\\\\\\\\\\\\"+(canvas.offsetHeight-DebugBaseButton.debugInput.offsetHeight)+\\\\\\\\\\\\\\\"px;\\\\\\\\\\\\\\\"+\\\\\\\\n \\\\\\\\\\\\\\\"top:\\\\\\\\\\\\\\\"+DebugBaseButton.debugInput.offsetHeight+\\\\\\\\\\\\\\\"px; font-size: 20px; overflow: scroll\\\\\\\\\\\\\\\");\\\\\\\\n DebugBaseButton.resultDiv.innerHTML=\\\\\\\\\\\\\\\"输出结果在这,只在某种程度上支持console.log
\\\\\\\\\\\\\\\";\\\\\\\\n DebugBaseButton.debugDiv.appendChild(DebugBaseButton.resultDiv);\\\\\\\\n} else {\\\\\\\\n DebugBaseButton.enterInput_bind=DebugBaseButton.RunJavaScript.bind(DebugBaseButton.enterInput,DebugBaseButton.debugInput,DebugBaseButton.resultDiv)\\\\\\\\n DebugBaseButton.enterInput.addEventListener(\\\\\\\\\\\\\\\"click\\\\\\\\\\\\\\\",DebugBaseButton.enterInput_bind);\\\\\\\\n DebugBaseButton.exitInput_bind=DebugBaseButton.ExitDebug.bind(document.body,DebugBaseButton.debugDiv);\\\\\\\\n DebugBaseButton.exitInput.addEventListener(\\\\\\\\\\\\\\\"click\\\\\\\\\\\\\\\",DebugBaseButton.exitInput_bind);\\\\\\\\n DebugBaseButton.resultDiv.innerHTML=\\\\\\\\\\\\\\\"输出结果在这,只在某种程度上支持console.log
\\\\\\\\\\\\\\\";\\\\\\\\n document.body.appendChild(DebugBaseButton.debugDiv);\\\\\\\\n}\\\\\\\"\\\",\\\"vibratePattern\\\":\\\"0\\\"}\"]","controlButtonSettings":"{\"image\":\"Control\",\"activeScenes\":\"[\\\"Scene_Title\\\",\\\"Scene_Map\\\"]\",\"x\":\"10\",\"y\":\"260\",\"soundEffect\":\"\",\"buttonsToHide\":\"[]\",\"hideDPad\":\"true\",\"inputMethod\":\"0\"}","fadeDuration":"20","fadeDelay":"1","enableDiagonalInput":"false","hideButtonsDuringDialogue":"true","enableDPadDebugWindow":"false"}} ]; diff --git a/js/plugins/VirtualButtons_OnlyForSelf.js b/js/plugins/VirtualButtons_OnlyForSelf.js new file mode 100644 index 0000000..29e3ad0 --- /dev/null +++ b/js/plugins/VirtualButtons_OnlyForSelf.js @@ -0,0 +1,1884 @@ +//Change for use d-pad + +/*: + * @plugindesc v3.0 Creates buttons on the screen for touch input + * @author Aloe Guvner + * + * + * @param dPadSettings + * @text D-Pad Settings + * @type struct + * @desc Settings for the D-Pad. + * + * @param keyButtonSettings + * @text Key Button Settings + * @type struct[] + * @desc Settings for on-screen buttons that simulate key presses. + * + * @param controlButtonSettings + * @text Control Button Settings + * @type struct + * @desc A "toggle" button that allows players to turn the UI + * on and off. + * + * @param fadeDuration + * @text Fade Duration + * @desc Duration of hiding the buttons (number of frames) + * for the buttons to fade and un-fade. + * @default 20 + * @type number + * + * @param fadeDelay + * @text Fade Delay + * @desc Delay before hiding and unhiding buttons (number + * of frames) + * @default 1 + * @type number + * + * + * + * @param enableDiagonalInput + * @text Enable Diagonal Input + * @type boolean + * @desc If the player touches in the corners of the D-Pad, both + * direction inputs are recorded. See info in help file. + * @default false + * + * @param hideButtonsDuringDialogue + * @text Hide Buttons During Dialogue + * @type boolean + * @desc Hide the virtual buttons during event dialogue. + * @default true + * + * @param enableDPadDebugWindow + * @text Enable DPad Debug Window + * @type boolean + * @desc Shows a window with the current D-Pad state. For + * plugin debugging only. + * @default false + * + * @help + * + * //============================================================================= + * // Background: + * //============================================================================= + * This plugin focuses on improving the user interface for mobile games created + * in RPG Maker MV. This plugin allows the developer to have virtual buttons + * on the screen that interact with touch input. + * + * This plugin allows maximum flexibility for the developer, you can add + * as many or as few buttons as you want to the screen, and you can add these buttons + * on whichever screens you would like (i.e. map, menu, credits, title, etc.). + * + * //============================================================================= + * // Functionality: + * //============================================================================= + * + * This plugin can create 3 different types of buttons: + * -Directional Pad + * --A single picture which is used for up, left, right, and down movement. + * --The picture is divided into 9 sections. The top 3 sections trigger the "up" + * input, the left 3 sections trigger the "left" input, the right 3 sections + * trigger the "right" input, and the bottom 3 section triggers the "down" input. + * --The middle section does not trigger any input. + * --The scenes that this button appears in can be defined. + * --This button is not mandatory. + * + * -Key buttons + * --These buttons can be used to represent any key. Common keys to use would be + * "ok" , "escape", "pagedown", "pageup". + * --However, these can be any key, and there can be as many or as few as the developer + * would like. + * --Additionally, the scenes that these buttons appear in can be controlled individually. + * + * + * -Control button + * --The control button, if pressed, will collapse and hide other buttons on the screen. + * --If pressed again, it will expand and show other buttons on the screen. + * --You can configure which other buttons are affected. This can allow you to create + * a dynamic menu where pressing this button opens other buttons for "Items", "Save", + * etc., while leaving the DPad or any other button active all of the time. + * --The scenes that this button appears in can be defined. + * --This button is not mandatory. + * + * //============================================================================= + * // Touch Input Methods: + * //============================================================================= + * + * The following methods can be chosen for any of the key buttons. The default + * method is "triggered". + * + * Triggered: + * This input method occurs when the button is just pressed down. It occurs only + * once, in the same frame that the button was pressed. + * + * Pressed: + * This input method occurs every frame while the button is pressed down. Any action + * that this button is doing will execute every frame (60 frames per second) + * + * Repeated: + * This input method occurs after 24 frames from when the button is pressed, and + * then occurs every 6 frames while the button is still pressed. + * + * Long Pressed: + * This input method occurs after 24 frames from when the button is pressed, and + * then occurs every frame while the button is still pressed. + * + * Released: + * This input method occurs when the button is no longer being pressed. + * + * //============================================================================= + * // Setup: + * //============================================================================= + * This plugin requires a new folder to be created within the project "img" folder. + * The folder must be titled "VirtualButtons". + * Place all UI button images into this folder, and they can be accessed from the + * plugin parameters. + * + * //============================================================================= + * // Vibrate Parameter + * //============================================================================= + * Buttons can trigger a vibrate on the mobile device when pressed, controlled by + * a parameter. + * This parameter follows a pattern of vibrate,pause,vibrate,pause, etc. + * Separate each time interval by a comma. + * Examples: + * 200 --> vibrate for 200ms + * 100,30,100,30,100,30 --> vibrate for 100ms, pause for 30ms; repeat 2 more times + * + * Note that most devices support the Vibration API, but not all. + * Additionally, this may not work in all methods of deployment. + * + * + * + * //============================================================================= + * Diagonal Movement Parameter + * //============================================================================= + * + * There is a parameter that controls whether diagonal input is recorded from the + * D-Pad. This is not a diagonal movement plugin! This parameter merely controls + * whether touching on the top left will add the input values of both "top" and + * "left" to the input state. Other diagonal movement plugins would consume these + * input values to move the character diagonally. + * + * If your game uses diagonal movement, this parameter must be on. If your game + * does not use diagonal movement, it is recommended to turn this parameter off. + * + * //============================================================================= + * Terms of Use: + * //============================================================================= + * Free for use in commercial or non-commercial projects. + * Credits required to: Aloe Guvner + * + * //============================================================================= + * Version History: + * //============================================================================= + * v2.0.1 (May 13 2019) + * --Fix bug where DPad got stuck in menus + * v2.0.0 (May 4 2019) + * --Clears input state on transfer to mitigate stuck DPad input bug + * --Improves clearing of input state each frame to mitigate bug + * --Fix bug where the DPad would not clear the direction after a parallel event + * checking for a input direction triggered a Show Choices event command + * --Add plugin parameter to toggle whether the buttons are hidden during dialogue + * --Plugin command to change button opacity + * --Plugin command option to hide all buttons + * --Plugin command option to show all buttons + * --Delay parameter to fade-in + * --Option to use a "hot" image that shows when the button is pressed + * --Key buttons can trigger common events + * --Buttons hidden via plugin command will stay hidden until the show plugin command + * v1.4.0 (December 13 2018) + * --Added ability to configure which buttons are affected by the "control" button + * Can be used to create dynamic menus. + * v1.3.1 (October 30 2018) + * --Added a parameter to control whether diagonal movement is detected as a + * possible fix for a hard to reproduce movement bug. + * v1.3.0 (September 27 2018) + * --Added a parameter to choose to disable the normal touch input on any chosen + * scene. The only touch input enabled on these scenes is the mobile UI. + * v1.2.3 (September 27 2018) + * --Fixed a bug where buttons that the player had chosen to hide would reappear + * after a game message. + * v1.2.2 (September 27 2018) + * --Fixed a bug where buttons could be pressed before they were fully visible + * v1.2.1 (September 27 2018) + * --Added an "instant" feature to hide/show for smoother cutscene transitions + * v1.2.0 (August 26 2018) + * --Added ability to vibrate when button is pressed + * v1.1.0 (June 27 2018) + * --Fixed bug with awkward player movement on the DPad + * --Added ability to specify the type of touch input on key buttons + * v1.0.3 (May 14 2018) + * --Added ability to run custom code when a key button is pressed + * v1.0.2 (May 9 2018) + * --Added ability to play a sound effect when a button is pressed + * --Fixed a bug where the parameters weren't read correctly due to plugin name change + * --Fixed a bug where the control button didn't hide the dpad properly + * v1.0.1 (May 8 2018) + * --Added a version compatible with MV earlier than 1.6.0 using Babel.js + * v1.0.0 (April 17 2018) + * --Initial release + * + * //============================================================================= + * End of Help File + * //============================================================================= + */ + +/*~struct~dpad: + * @param rockerImage + * @text rockerImage + * @type file + * @dir img/VirtualButtons + * @desc File path for the D-Pad rocker image + * @require 1 + * + * @param pressedpointimage + * @text pressedpointimage + * @type file + * @dir img/VirtualButtons + * @desc File path for the D-Pad rocker point image + * @require 1 + * + * @param padImage + * @text padImage + * @type file + * @dir img/VirtualButtons + * @desc File path for the button image + * @require 1 + * * + * @param x + * @text X + * @desc X position of the D-Pad. Formulas are allowed. + * (ex. Graphics.width - 96) + * @type text + * @default 0 + * + * @param y + * @text Y + * @desc Y position of the D-Pad. Formulas are allowed. + * (ex. Graphics.height - 96) + * @type text + * @default 0 + * + * @param soundEffect + * @text Sound Effect + * @type struct + * @desc Sound Effect to play when button is pressed. + * Depending on scenario, SE might already play. Test first. + * + * @param Use Dynamic roker + * @text Use Dynamic roker(need) + * @desc Use Dynamic roker need pressedPoint (must set true) + * @type boolean + * @default false + * + * @param Dynamic rocker back img + * @text Dynamic rocker back img + * @desc Dynamic rocker Rectangle limit (must set it) + * @type file + * @dir img/VirtualButtons + * @require 1 + * + * @param Rectangle X + * @text Rectangle Left position + * @type text + * @default 0 + * @desc Rectangle left position use for Dynamic rocker + * + * @param Rectangle Y + * @text Rectangle Top position + * @type text + * @default 0 + * @desc Rectangle top position use for Dynamic rocker + * + * + */ + +/*~struct~keyButton: + * @param name + * @text Name + * @type text + * @desc The name of the button + * + * @param inputMethod + * @text Input Method + * @type select + * @option Triggered + * @value 0 + * @option Pressed + * @value 1 + * @option Repeated + * @value 2 + * @option Long Pressed + * @value 3 + * @option Released + * @value 4 + * @desc The type of touch input that will trigger the button. + * See the help file for full descriptions of the options. + * @default 0 + * + * @param inputTrigger + * @text Input Code + * @type text + * @desc The input code triggered when the button is pressed. + * ex. ok / escape / pagedown / pageup + * + * @param image + * @text Image + * @type file + * @dir img/VirtualButtons + * @desc File path for the button image + * @require 1 + * + * @param hotImage + * @text Hot Image + * @type file + * @dir img/VirtualButtons + * @desc File path for the "Hot" button image + * This image shows while the button is being pressed + * @require 1 + * + * + * @param x + * @text X + * @type text + * @desc X position of the button. Formulas are allowed. + * (ex. Graphics.width - 96) + * @default 0 + * + * @param y + * @text Y + * @type text + * @desc Y position of the button. Formulas are allowed. + * (ex. Graphics.height - 96) + * @default 0 + * + * @param soundEffect + * @text Sound Effect + * @type struct + * @desc Sound Effect to play when button is pressed. + * Depending on scenario, SE might already play. Test first. + * + * @param commonEvent + * @text Common Event + * @type number + * @desc Common Event to trigger when the button is pressed. + * @default 0 + * @min 0 + * + * @param customCode + * @text Custom Code + * @type note + * @desc Custom Javascript code to run on button press. + * Use the 'this' keyword to refer to the current scene. + * + * @param vibratePattern + * @text Vibrate Pattern + * @type text + * @default 0 + * @desc Pattern of miliseconds to vibrate on press. + * Use 0 for no vibration. See help for more info. + */ + +/*~struct~controlButton: + * @param image + * @text Image + * @type file + * @dir img/VirtualButtons + * @desc File path for the button image + * @require 1 + * * + * @param x + * @text X + * @type text + * @desc X position of the button. Formulas are allowed. + * (ex. Graphics.width - 96) + * @default 0 + * + * @param y + * @text Y + * @type text + * @desc Y position of the button. Formulas are allowed. + * (ex. Graphics.height - 96) + * @default 0 + * + * @param soundEffect + * @text Sound Effect + * @type struct + * @desc Sound Effect to play when button is pressed. + * Depending on scenario, SE might already play. Test first. + * + * @param buttonsToHide + * @text Buttons To Show / Hide + * @type text[] + * @desc A list of the Key Buttons to show and hide when + * this button is pressed. Leave empty to hide all. + * @default [] + * + * @param hideDPad + * @text Show / Hide DPad? + * @type boolean + * @desc Controls whether the DPad is affected when + * this button is pressed. + * @default true + * + * @param inputMethod + * @text Input Method + * @type select + * @option Triggered + * @value 0 + * @option Pressed + * @value 1 + * @option Repeated + * @value 2 + * @option Long Pressed + * @value 3 + * @option Released + * @value 4 + * @desc The type of touch input that will trigger the button.May can't use + * See the help file for full descriptions of the options. + * @default 0 + * + */ + +/*~struct~soundEffect: + * @param name + * @text Sound Effect Name + * @type file + * @dir audio/se + * @desc Sound effect to play when the button is pressed. + * @default + * @require 1 + * + * @param volume + * @text Volume + * @type number + * @min 0 + * @max 100 + * @desc Volume of the sound effect, in % + * Allowed values: 0% - 100% + * @default 90 + * + * @param pitch + * @text Pitch + * @type number + * @min 50 + * @max 150 + * @desc Pitch of the sound effect, in % + * Allowed values: 50% - 150% + * @default 100 + * + * @param pan + * @text Pan + * @type number + * @min -100 + * @max 100 + * @desc Pan of the sound effect + * Allowed values: -100 - 100 + * @default 0 + * + */ +var Imported=Imported||{}; +Imported.VituralButtons_OnlyForSelf=true; +var ALOE=ALOE||{}; +(function () { + "use strict"; + + var Alias = {}; + var Parameters = {}; + //============================================================================= + // Utils + //============================================================================= + // Create a utility function to parse complex parameters. + //============================================================================= + + ALOE.recursiveParse = function (param) { + try { + return JSON.parse(param, function (key, value) { + try { + return this.recursiveParse(value); + } catch (e) { + return value; + } + }.bind(this)); + } catch (e) { + return param; + } + }; //============================================================================= + // Parameters + //============================================================================= + // Read and parse parameters into a locally scoped Parameters object. + //============================================================================= + + + Object.keys(PluginManager.parameters("VirtualButtons_OnlyForSelf")).forEach(function (a) { + return (Parameters[a] = ALOE.recursiveParse(PluginManager.parameters("VirtualButtons_OnlyForSelf")[a])); + }); //============================================================================= + // ImageManager + //============================================================================= + // Load and reserve virtual button images. + //============================================================================= + + ImageManager.loadVirtualButton = function (filename, hue) { + return this.loadBitmap('img/VirtualButtons/', filename, hue, true); + }; + + ImageManager.reserveVirtualButton = function (filename, hue, reservationId) { + return this.reserveBitmap('img/VirtualButtons/', filename, hue, true, reservationId); + }; //============================================================================= + // Sprite_VirtualButton + //============================================================================= + // Sprite for the UI button(s) + // Parent class for Sprite_DirectionalPad, Sprite_KeyButton, Sprite_ControlButton + //============================================================================= + + + function Sprite_VirtualButton() { + this.initialize.apply(this, arguments); + } + + Sprite_VirtualButton.prototype = Object.create(Sprite_Base.prototype); + Sprite_VirtualButton.prototype.constructor = Sprite_VirtualButton; + + Sprite_VirtualButton.prototype.initialize = function (x, y, normalImage, soundEffect, vibratePattern, hotImage) { + Sprite_Base.prototype.initialize.call(this); + + if (normalImage) { + this.bitmap = ImageManager.loadVirtualButton(normalImage); + this.normalImage = this.bitmap; + } + + if (hotImage) { + this.hotImage = ImageManager.loadVirtualButton(hotImage); + } + + if (soundEffect) { + this._soundEffect = soundEffect; + } + + if (vibratePattern) { + if (!window.navigator.vibrate) { + this._vibratePattern = 0; + } else if (typeof vibratePattern === 'number') { + this._vibratePattern = vibratePattern; + } else { + this._vibratePattern = vibratePattern.split(',').map(Number); + } + } + + if (isNaN(x)) { + x = eval(x); + } + + if (isNaN(y)) { + y = eval(y); + } + + this.move(x, y); + this._start = new Point(null, null); + this._distance = new Point(null, null); + this._destination = new Point(null, null); + this._velocity = new Point(null, null); + this._origin = new Point(x, y); + this._hiding = false; + this._showing = false; + this._duration = Parameters.fadeDuration; + this._delay = Parameters.fadeDelay; + this._delayCounter = 0; + this.active = true; + this._pluginHidden = false; + this.z = 5; + + this._point = null; + this._lastPoint = null; + this._TouchID=null; + }; + + Sprite_VirtualButton.prototype.update = function () { + Sprite_Base.prototype.update.call(this); + + if(this.active) this.updatePressPoint(); + else { + if(this._TouchID!=null){ + delete Alias.TouchIdUsed[this._TouchID]; + } + this._TouchID=null; + this._lastPoint=null; + this._point=null; + } + + if (this.active && !this.moving) { + this.updateTouchInput(); + } + + if (this.active && this.updateHotImage) { + this.updateHotImage(); + } + + if (this.moving) { + this.updatePosition(); + } + + if (!this.active) { + this.updateActive(); + } + }; + + Sprite_VirtualButton.prototype.updatePressPoint = function () { + this._lastPoint = this._point; + this._point = this.GetPressPoint(); + if (this._point) { + if (!!this._lastPoint) { + this._trigger = false; + } else { + this._trigger = true; + } + this._pressed = true; + this._pressCount++; + } else { + this._pressed = false; + this._pressCount = 0; + if (!!this._lastPoint) { + this._released = true; + } else { + this._released = false; + } + } + }; + + Sprite_VirtualButton.prototype.updateTouchInput = function () {}; + + Sprite_VirtualButton.prototype.updateHotImage = function () { + if (this._pressed) { + var point = this._point; + + if (this.containsPoint(point)) { + if (this.hotImage) { + this.bitmap = this.hotImage; + } + } + } else { + if (this.bitmap !== this.normalImage) { + this.bitmap = this.normalImage; + } + } + }; + + Sprite_VirtualButton.prototype.updateVisibility = function () { + if (this._hiding && this.opacity > 0) { + if (this._delayCounter < this._delay) { + this._delayCounter++; + } else { + this.opacity -= 255 / this._duration; + if (this.opacity <= 0) { + this._delayCounter = 0; + this._showing = false; + } + } + } else if (this._showing && this.opacity < 255) { + if (this._delayCounter < this._delay) { + this._delayCounter++; + } else { + this.opacity += 255 / this._duration; + if (this.opacity >= 255) this._delayCounter = 0; + } + } + }; + + Sprite_VirtualButton.prototype.updateActive = function () { + if (this.opacity === 255 && !this.moving && !this._pluginHidden &&!this._hiding) { + this.active = true; + } + }; + + Sprite_VirtualButton.prototype.updatePosition = function () { + this.x += this._velocity.x; + this.y += this._velocity.y; + var currentPos = new Point(this.x, this.y); + var currentDistance = this.absDistance(this._start, currentPos); + + if (currentDistance >= this._distance.abs) { + this.x = this._destination.x; + this.y = this._destination.y; + this._velocity.x = 0; + this._velocity.y = 0; + this.moving = false; + } + }; + + Sprite_VirtualButton.prototype.hide = function () { + this._hiding = true; + this.active = false; + }; + + Sprite_VirtualButton.prototype.show = function () { + this._hiding = false; + this._showing = true; + }; + + Sprite_VirtualButton.prototype.hideInstant = function () { + this._hiding = true; + this.opacity = 0; + this.active = false; + this._delayCounter = this._delay; + }; + + Sprite_VirtualButton.prototype.showInstant = function () { + this._hiding = false; + this._showing = true; + this.opacity = 255; + this.active = true; + this._delayCounter = this._delay; + }; + + Sprite_VirtualButton.prototype.collapse = function (x, y) { + this._destination.x = x; + this._destination.y = y; + this._start.x = this.x; + this._start.y = this.y; + this._distance.x = this._destination.x - this._start.x; + this._distance.y = this._destination.y - this._start.y; + this._distance.abs = this.absDistance(this._destination, this._start); + this._velocity.x = this._distance.x / this._duration; + this._velocity.y = this._distance.y / this._duration; + this.moving = true; + }; + + Sprite_VirtualButton.prototype.expand = function () { + this._destination.x = this._origin.x; + this._destination.y = this._origin.y; + this._start.x = this.x; + this._start.y = this.y; + this._distance.x = this._destination.x - this._start.x; + this._distance.y = this._destination.y - this._start.y; + this._distance.abs = this.absDistance(this._destination, this._start); + this._velocity.x = this._distance.x / this._duration; + this._velocity.y = this._distance.y / this._duration; + this.moving = true; + }; + + Sprite_VirtualButton.prototype.absDistance = function (pos1, pos2) { + return Math.sqrt(Math.pow(pos1.x - pos2.x, 2) + Math.pow(pos1.y - pos2.y, 2)); + }; + + + Sprite_VirtualButton.prototype.GetPressPoint = function () { + var i; + var touches = TouchInput._event; + var touch = null; + var point = null; + var x=null; + var y=null; + if (window.TouchEvent && touches instanceof TouchEvent) { + if (this._TouchID!=null) { + touches = TouchInput._event.targetTouches; + for (i = 0; i < touches.length; i++) { + touch = touches.item(i); + if (this._TouchID != touch.identifier) { + continue; + } + x = Graphics.pageToCanvasX(touch.pageX); + y = Graphics.pageToCanvasY(touch.pageY); + return new Point(x, y); + } + } + if(SceneManager._scene._directionalPadDynamic&& + SceneManager._scene._directionalPadDynamic.active&& + (this==SceneManager._scene._directionalPad|| + this==SceneManager._scene._directionalPadPoint)){ + //Nothing to do + //console.log("skip"); + } else { + touches = TouchInput._event.targetTouches; + for (i = 0; i < touches.length; i++) { + touch = touches.item(i); + if (!touch) continue; + x = Graphics.pageToCanvasX(touch.pageX); + y = Graphics.pageToCanvasY(touch.pageY); + point = new Point(x, y); + if (this.containsPoint(point)&&!Alias.TouchIdUsed[touch.identifier]) { + if((SceneManager._scene._controlButton&& + SceneManager._scene._controlButton.active&& + SceneManager._scene._controlButton.containsPoint(point)&& + SceneManager._scene._controlButton!=this)) {continue ;} + Alias.TouchIdUsed[touch.identifier]=this; + this._TouchID=touch.identifier; + return point; + } + } + } + } else if (touches instanceof MouseEvent && TouchInput.isPressed()) { + touch = touches; + x = Graphics.pageToCanvasX(touch.pageX); + y = Graphics.pageToCanvasY(touch.pageY); + point = new Point(x, y); + if(TouchInput.isPressed()&&Alias.MouseUsed==this){ + return point; + } else if(SceneManager._scene._directionalPadDynamic&& + SceneManager._scene._directionalPadDynamic.active&& + (this==SceneManager._scene._directionalPad|| + this==SceneManager._scene._directionalPadPoint)){ + //Noting to do + }else if(!Alias.MouseUsed&&TouchInput.isPressed()&&this.containsPoint(point)){ + if((SceneManager._scene._controlButton&& + SceneManager._scene._controlButton.active&& + (SceneManager._scene._controlButton==Alias.MouseUsed|| + SceneManager._scene._controlButton.containsPoint(point))&& + SceneManager._scene._controlButton!=this)) { + //Nothing to do + } else { + Alias.MouseUsed=this; + return point; + } + } + return; + } + Alias.MouseUsed=null; + delete Alias.TouchIdUsed[this._TouchID]; + this._TouchID=null; + return; + }; + + + Sprite_VirtualButton.prototype.GetCenterPoint = function () { + return new Point(this.x + this.width / 2, this.y + this.height / 2); + }; + + Sprite_VirtualButton.prototype.isTouchTriggered = function () { + switch (this._inputMethod) { + case 0: + // Was just pressed + return this._trigger; + + case 1: + //Currently pressed down + return this._pressed; + + case 2: + //Is repeated + return this._pressed && (this._trigger || + (this._pressCount >= TouchInput.keyRepeatWait && + this._pressCount % TouchInput.keyRepeatInterval === 0)); + + case 3: + //Is kept pressed + return this._pressed && this._pressCount >= TouchInput.keyRepeatWait; + + case 4: + //Was just released + return this._released; + + default: + return this._trigger; + } + }; + + //============================================================================= + // Sprite_DirectionalPad + //============================================================================= + // Sprite for the Directional Pad + //============================================================================= + + + function Sprite_DirectionalPad() { + this.initialize.apply(this, arguments); + } + + Sprite_DirectionalPad.prototype = Object.create(Sprite_VirtualButton.prototype); + Sprite_DirectionalPad.prototype.constructor = Sprite_DirectionalPad; + + Sprite_DirectionalPad.prototype.initialize = function (x, y, image, hotImage, soundEffect) { + Sprite_VirtualButton.prototype.initialize.call(this, x, y, image, soundEffect, undefined, hotImage); + this._lastInput = ""; + this._hiding = false; + }; + + Sprite_DirectionalPad.prototype.updateTouchInput = function () { + this.clearLastDirection(); + var point = null; + if (Alias.globalShowStates.controlMethod=="fixed rocker"|| + Alias.globalShowStates.controlMethod=="dynamic rocker") { + point = SceneManager._scene._directionalPadPoint._point; + } else if (Alias.globalShowStates.controlMethod=="fixed button"){ //否则 + point = this._point; + } + if (point) { + if (this._soundEffect) { + AudioManager.playSe(this._soundEffect); + } + var index = this.whichIndex(point); + switch (index) { + case 0: + if (Parameters.enableDiagonalInput) { + Input._currentState.up = true; + Input._currentState.left = true; + this._lastInput = "up-left"; + } + break; + case 1: + Input._currentState.up = true; + this._lastInput = "up"; + break; + case 2: + if (Parameters.enableDiagonalInput) { + Input._currentState.right = true; + Input._currentState.up = true; + this._lastInput = "up-right"; + } + break; + case 3: + Input._currentState.left = true; + this._lastInput = "left"; + break; + case 4: + break; + case 5: + Input._currentState.right = true; + this._lastInput = "right"; + break; + case 6: + if (Parameters.enableDiagonalInput) { + Input._currentState.left = true; + Input._currentState.down = true; + this._lastInput = "down-left"; + } + break; + case 7: + Input._currentState.down = true; + this._lastInput = "down"; + break; + case 8: + if (Parameters.enableDiagonalInput) { + Input._currentState.down = true; + Input._currentState.right = true; + this._lastInput = "down-right"; + } + break; + default: + break; + } + } + }; + + Sprite_DirectionalPad.prototype.whichIndex = function (point) { + // 2 1 0 + // 5 4 3 + // 8 7 6 + var index = 0; + if (Alias.globalShowStates.controlMethod=="fixed rocker"|| + Alias.globalShowStates.controlMethod=="dynamic rocker") { + var centerX = this.x + this.width / 2; + var centerY = this.y + this.height / 2; + var range = this.absDistance(point, this.GetCenterPoint()); + if (range < Math.max(this.width / 6, this.height / 6)) { + return 4; + } + if (centerX == point.x) { + return centerY == point.y ? 4 : (centerY > point.y ? 7 : 1); + } + var rad = Math.atan((point.y - centerY) / (point.x - centerX)) / Math.PI * 180; + rad = point.x < centerX ? rad : rad + 180; + rad = rad < 0 ? rad + 360 : rad; + if (rad < 22.5 || rad > 360 - 22.5) { + return 3; + } else if (rad > 22.5 && rad < 22.5 + 45) { + return 0; + } else if (rad > 22.5 + 45 && rad < 22.5 + 45 * 2) { + return 1; + } else if (rad > 22.5 + 45 * 2 && rad < 22.5 + 45 * 3) { + return 2; + } else if (rad > 22.5 + 45 * 3 && rad < 22.5 + 45 * 4) { + return 5; + } else if (rad > 22.5 + 45 * 4 && rad < 22.5 + 45 * 5) { + return 8; + } else if (rad > 22.5 + 45 * 5 && rad < 22.5 + 45 * 6) { + return 7; + } else if (rad > 22.5 + 45 * 6 && rad < 22.5 + 45 * 7) { + return 6; + } else { + return 4; + } + } else if (Alias.globalShowStates.controlMethod=="fixed button"){ //否则 + index += point.x - this.x > this.width / 3 ? point.x - this.x > this.width * 2 / 3 ? 2 : 1 : 0; + index += point.y - this.y > this.height / 3 ? point.y - this.y > this.height * 2 / 3 ? 6 : 3 : 0; + } + return index; + }; + + Sprite_DirectionalPad.prototype.clearLastDirection = function () { + if (this._lastInput) { + this._lastInput.split("-").forEach(function (direction) { + return (Input._currentState[direction] = false); + }); + this._lastInput = ""; + } + }; + + //============================================================================= + // Sprite_DirectionalPadPoint + //============================================================================= + // Sprite for the Directional Pad Press Point + //============================================================================= + function Sprite_DirectionalPadPoint() { + this.initialize.apply(this, arguments); + } + + Sprite_DirectionalPadPoint.prototype = Object.create(Sprite_VirtualButton.prototype); + Sprite_DirectionalPadPoint.prototype.constructor = Sprite_DirectionalPad; + + Sprite_DirectionalPadPoint.prototype.initialize = function (image) { + Sprite_VirtualButton.prototype.initialize.call(this, 0, 0, image, undefined, undefined, undefined); + this.followLeft = 10; + var x = SceneManager._scene._directionalPad.x; + var y = SceneManager._scene._directionalPad.y; + var width = SceneManager._scene._directionalPad.width; + var height = SceneManager._scene._directionalPad.height; + this._origin = new Point(x + width / 2 - this.width / 2, y + height / 2 - this.height / 2); + this._TouchID = null; + }; + + Sprite_DirectionalPadPoint.prototype.updateTouchInput = function () { + var x = SceneManager._scene._directionalPad.x; + var y = SceneManager._scene._directionalPad.y; + var width = SceneManager._scene._directionalPad.width; + var height = SceneManager._scene._directionalPad.height; + var point = this._point; + if (point) { + this.x = point.x - this.width / 2; + this.y = point.y - this.height / 2; + } else { + this.x = x + width / 2 - this.width / 2; + this.y = y + height / 2 - this.height / 2; + } + }; + + Sprite_DirectionalPadPoint.prototype.updatePosition = function () { + var x = SceneManager._scene._directionalPad.x; + var y = SceneManager._scene._directionalPad.y; + var width = SceneManager._scene._directionalPad.width; + var height = SceneManager._scene._directionalPad.height; + var currentPos = new Point(x + width / 2 - this.width / 2, y + height / 2 - this.height / 2); + var currentDistance = this.absDistance(this._start, currentPos); + this.x = currentPos.x; + this.y = currentPos.y; + + if (currentDistance >= this._distance.abs) { + this.x = this._destination.x; + this.y = this._destination.y; + this._velocity.x = 0; + this._velocity.y = 0; + this.moving = false; + } + }; + + //============================================================================= + // Sprite_DirectionalPadDynamic + //============================================================================= + // Sprite for the Directional Pad Dynamic + //============================================================================= + function Sprite_DirectionalPadDynamic() { + this.initialize.apply(this, arguments); + } + + Sprite_DirectionalPadDynamic.prototype = Object.create(Sprite_VirtualButton.prototype); + Sprite_DirectionalPadDynamic.prototype.constructor = Sprite_DirectionalPad; + + Sprite_DirectionalPadDynamic.prototype.initialize = function (x,y,image) { + Sprite_VirtualButton.prototype.initialize.call(this, x, y, image, undefined, undefined, undefined); + this._TouchID=null; + }; + + Sprite_DirectionalPadDynamic.prototype.updateTouchInput = function () { + var padPoint=SceneManager._scene._directionalPadPoint; + var pad = SceneManager._scene._directionalPad; + var button = SceneManager._scene._directionalPadButton; + if(Alias.globalShowStates.controlMethod=="dynamic rocker"){ + if(this._TouchID!=null&&padPoint._TouchID==null){ + padPoint._TouchID=this._TouchID; + Alias.TouchIdUsed[this._TouchID]=padPoint; + pad.x=this._point.x-pad.width/2; + pad.y=this._point.y-pad.height/2; + padPoint.update(); + } else if(Alias.MouseUsed==this){ + Alias.MouseUsed=padPoint; + pad.x=this._point.x-pad.width/2; + pad.y=this._point.y-pad.height/2; + padPoint.update(); + } + } else if(Alias.globalShowStates.controlMethod=="fixed rocker"){ + if(this._TouchID!=null&&padPoint._TouchID==null){ + padPoint._TouchID=this._TouchID; + Alias.TouchIdUsed[this._TouchID]=padPoint; + pad.x=isNaN(Parameters.dPadSettings.x)?eval(Parameters.dPadSettings.x):Parameters.dPadSettings.x; + pad.y=isNaN(Parameters.dPadSettings.y)?eval(Parameters.dPadSettings.y):Parameters.dPadSettings.y; + this._TouchID=null; + padPoint.update(); + } else if(Alias.MouseUsed==this){ + Alias.MouseUsed=padPoint; + pad.x=isNaN(Parameters.dPadSettings.x)?eval(Parameters.dPadSettings.x):Parameters.dPadSettings.x; + pad.y=isNaN(Parameters.dPadSettings.y)?eval(Parameters.dPadSettings.y):Parameters.dPadSettings.y; + padPoint.update(); + } + } else if(Alias.globalShowStates.controlMethod=="fixed button"){ + if(this._TouchID!=null&&button._TouchID==null){ + button._TouchID=this._TouchID; + Alias.TouchIdUsed[this._TouchID]=padPoint; + this._TouchID=null; + button.update(); + } else if(Alias.MouseUsed==this){ + Alias.MouseUsed=button; + button.update(); + } + }else if(Alias.globalShowStates.controlMethod=="touch input"){ + SceneManager._scene.setControlMethod("touch input"); + } + }; + + + //============================================================================= + // Sprite_KeyButton + //============================================================================= + // Sprite for the buttons that simulate a key input (besides arrow keys). + // Ex. "ok", "cancel", "pageup", "pagedown" + //============================================================================= + + + function Sprite_KeyButton() { + this.initialize.apply(this, arguments); + } + + Sprite_KeyButton.prototype = Object.create(Sprite_VirtualButton.prototype); + Sprite_KeyButton.prototype.constructor = Sprite_KeyButton; + + Sprite_KeyButton.prototype.initialize = function (x, y, image, hotImage, soundEffect, inputTrigger, customCode, vibratePattern) { + var inputMethod = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; + var commonEvent = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; + Sprite_VirtualButton.prototype.initialize.call(this, x, y, image, soundEffect, vibratePattern, hotImage); + + if (inputTrigger) { + this._inputTrigger = inputTrigger; + } + + if (customCode) { + this._customCode = customCode; + this._customFunction = new Function(customCode).bind(SceneManager._scene); + } + + this._commonEvent = commonEvent; + this._inputMethod = inputMethod; + this._point = null; + }; + + + Sprite_KeyButton.prototype.updateTouchInput = function () { + + if (this.isTouchTriggered()) { + var point = this._point; + + if (!!point && this.containsPoint(point)) { + if (this._soundEffect) { + AudioManager.playSe(this._soundEffect); + } + + if (this._vibratePattern) { + window.navigator.vibrate(this._vibratePattern); + } + + if (this._customFunction) { + this._customFunction(); + } + + if (this._commonEvent && $gameTemp) { + $gameTemp.reserveCommonEvent(this._commonEvent); + } + + if (this._inputTrigger) { + Input._currentState[this._inputTrigger] = true; + } + } else { + Input._currentState[this._inputTrigger] = false; + } + } else { + Input._currentState[this._inputTrigger] = false; + } + }; //============================================================================= + // Sprite_ControlButton + //============================================================================= + // Sprite for the button that activates / deactivates all other buttons. + //============================================================================= + + + function Sprite_ControlButton() { + this.initialize.apply(this, arguments); + } + + Sprite_ControlButton.prototype = Object.create(Sprite_VirtualButton.prototype); + Sprite_ControlButton.prototype.constructor = Sprite_ControlButton; + + Sprite_ControlButton.prototype.initialize = function (x, y, image, soundEffect) { + Sprite_VirtualButton.prototype.initialize.call(this, x, y, image, soundEffect); + this._buttonsHidden = !(Alias.globalShowStates.dPadSettings && + Alias.globalShowStates.controlButtonSettings && + Object.keys(Alias.globalShowStates.keyButtonSettings).some(function (a) { + return Alias.globalShowStates.keyButtonSettings[a]; + })); + this.inputMethod = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + this._moveDistance = 0; + }; + + Sprite_ControlButton.prototype.updateTouchInput = function () { + var point = this._point; + var moveDistance = 0; + if (!!point) { + this._lastx = this.x; + this._lasty = this.y; + this.x = (point.x - this.width / 2) < 0 ? 0 : (((point.x - this.width / 2) > Graphics.width - this.width) ? Graphics.width - this.width : point.x - this.width / 2); + this.y = (point.y - this.height / 2) < 0 ? 0 : (((point.y - this.height / 2) > Graphics.height - this.height) ? Graphics.height - this.height : point.y - this.height / 2); + } + if (this._trigger) { + this._dstx = this.x; + this._dsty = this.y; + } + if (this._released) { + moveDistance = this.absDistance(new Point(this._dstx, this._dsty), new Point(this.x, this.y)); + Alias.globalShowStates.controlButtonX = this.x; + Alias.globalShowStates.controlButtonY = this.y; + if (moveDistance > 40) { + return; + } + } + if (this._released) { + if (this._soundEffect) { + AudioManager.playSe(this._soundEffect); + } + SceneManager._scene.hideVirtualButtonsInstant.call(SceneManager._scene); + this.changeControlMethod(); + } + + }; + + Sprite_ControlButton.prototype.changeControlMethod = function(){ + var method=['fixed button','fixed rocker','dynamic rocker','touch input']; + var index=method.indexOf(Alias.globalShowStates.controlMethod); + if(index==-1) index=3; + index=(index+1)%method.length; + SceneManager._scene.setControlMethod.call(SceneManager._scene,method[index]); + }; + + //============================================================================= + // Scene_Base + //============================================================================= + // Methods to create the buttons in any scene. + //============================================================================= + + + Alias.Scene_Boot_create = Scene_Boot.prototype.create; + + Scene_Boot.prototype.create = function () { + Alias.Scene_Boot_create.call(this); + var params = null; + Alias.globalShowStates = {}; + Alias.TouchIdUsed=[]; + Alias.MouseUsed=null; + Alias.globalShowStates.controlMethod = "touch input";// fixed rocker , dynamic rocker , touch input , fixed button + Alias.globalShowStates.dPadSettings = true; + Alias.globalShowStates.keyButtonSettings = {}; + params = Parameters.keyButtonSettings; + for (var i = 0; i < params.length; i++) { + Alias.globalShowStates.keyButtonSettings[params[i].name.toLowerCase()] = true; + } + Alias.globalShowStates.controlButtonSettings = true; + Alias.globalShowStates.controlButtonX = Parameters.controlButtonSettings.x; + Alias.globalShowStates.controlButtonY = Parameters.controlButtonSettings.y; + + window.VituralButtons=Alias.globalShowStates; + + }; + + Alias.Scene_Base_start = Scene_Base.prototype.start; + + Scene_Base.prototype.start = function () { + Alias.Scene_Base_start.call(this); + if(this instanceof Scene_Boot){return ;} + TouchInput.clear(); + Input.clear(); + Alias.MouseUsed=null; + Alias.TouchIdUsed=[]; + this.createDirPad(); + this.createKeyButtons(); + this.createControlButton(); + this.hideVirtualButtonsInstant(); + this.setControlMethod(Alias.globalShowStates.controlMethod); + }; + + Scene_Base.prototype.createDirPad = function () { + var params = Parameters.dPadSettings; + + if (params) { + //if (params.activeScenes.length > 0 && params.activeScenes.contains(this.constructor)) { + if (this instanceof Scene_Base) { + var x = params.x; + var y = params.y; + var image = params.rockerImage || ""; + var hotImage=""; + var soundEffect = params.soundEffect; + var pressedpointimage = params.pressedpointimage || ""; + var buttonImage = params.padImage||""; + this._directionalPad = new Sprite_DirectionalPad(x, y, image, hotImage, soundEffect); + this.addChild(this._directionalPad); + this._directionalPadButton = new Sprite_DirectionalPad(x,y,buttonImage,hotImage,soundEffect); + this.addChild(this._directionalPadButton); + this._directionalPadPoint = new Sprite_DirectionalPadPoint(pressedpointimage); + this.addChild(this._directionalPadPoint); + this._directionalPadDynamic = new Sprite_DirectionalPadDynamic(params["Rectangle X"],params["Rectangle Y"],params["Dynamic rocker back img"]); + this.addChild(this._directionalPadDynamic); + + } + } + }; + + Scene_Base.prototype.createKeyButtons = function () { + var params = Parameters.keyButtonSettings; + + if (params) { + if (params.length > 0) { + this._keyButtons = {}; + for (var i = 0; i < params.length; i++) { + //if (params[i].activeScenes.length > 0 && params[i].activeScenes.contains(this.constructor)) { + if (this instanceof Scene_Base) { + var a = params[i]; + this._keyButtons[a.name.toLowerCase()] = new Sprite_KeyButton(a.x, a.y, a.image, a.hotImage, a.soundEffect, a.inputTrigger.toLowerCase(), a.customCode, a.vibratePattern, a.inputMethod, a.commonEvent); + this._keyButtons[a.name.toLowerCase()].name = a.name.toLowerCase(); + this.addChild(this._keyButtons[a.name.toLowerCase()]); + } + } + } + } + }; + + Scene_Base.prototype.createControlButton = function () { + var params = Parameters.controlButtonSettings; + + if (params) { + //if (params.activeScenes.length > 0 && params.activeScenes.contains(this.constructor)) { + if (this instanceof Scene_Base) { + var x = Alias.globalShowStates.controlButtonX; + var y = Alias.globalShowStates.controlButtonY; + var image = params.image || ""; + var soundEffect = params.soundEffect; + this._controlButton = new Sprite_ControlButton(x, y, image, soundEffect, params.inputMethod); + this.addChild(this._controlButton); + this._controlButton._keyButtons = this._keyButtons; + this._controlButton._directionalPad = this._directionalPad; + } + } + }; + + Scene_Base.prototype.hideVirtualButtons = function () { + var _this3 = this; + + if (this._directionalPad) { + this._directionalPad.hide(); + this._directionalPadPoint.hide(); + this._directionalPadDynamic.hide(); + this._directionalPadButton.hide(); + } + + if (this._keyButtons) { + Object.keys(this._keyButtons).forEach(function (a) { + return _this3._keyButtons[a].hide(); + }); + } + + if (this._controlButton) { + this._controlButton.hide(); + } + }; + + Scene_Base.prototype.hideVirtualButtonsInstant = function () { + var _this3 = this; + + if (this._directionalPad) { + this._directionalPad.hideInstant(); + this._directionalPadPoint.hideInstant(); + this._directionalPadDynamic.hideInstant(); + this._directionalPadButton.hideInstant(); + } + + if (this._keyButtons) { + Object.keys(this._keyButtons).forEach(function (a) { + return _this3._keyButtons[a].hideInstant(); + }); + } + + if (this._controlButton) { + this._controlButton.hideInstant(); + } + }; + + Alias.Scene_Base_terminate = Scene_Base.prototype.terminate; + + Scene_Base.prototype.terminate = function () { + var _this5 = this; + + Alias.Scene_Base_terminate.call(this); + + if (this._directionalPad) { + this.removeChild(this._directionalPad); + this.removeChild(this._directionalPadPoint); + this.removeChild(this._directionalPadDynamic); + this.removeChild(this._directionalPadButton); + } + + if (this._keyButtons) { + Object.keys(this._keyButtons).forEach(function (a) { + return _this5.removeChild(_this5._keyButtons[a]); + }); + } + + if (this._controlButton) { + this.removeChild(this._controlButton); + } + }; + + Scene_Base.prototype.setControlMethod = function(method){ + this.hideVirtualButtonsInstant(); + switch(method){ + case "touch input": + if(this._controlButton) this._controlButton.show(); + break; + case "fixed rocker": case "dynamic rocker": + if(this._controlButton && Alias.globalShowStates.controlButtonSettings) this._controlButton.show(); + if(this._directionalPadDynamic && Alias.globalShowStates.dPadSettings) this._directionalPadDynamic.show(); + if(this._directionalPadPoint && Alias.globalShowStates.dPadSettings) this._directionalPadPoint.show(); + if(this._directionalPad && Alias.globalShowStates.dPadSettings){ + this._directionalPad.show(); + this._directionalPad.x=isNaN(Parameters.dPadSettings.x)?eval(Parameters.dPadSettings.x):Parameters.dPadSettings.x; + this._directionalPad.y=isNaN(Parameters.dPadSettings.y)?eval(Parameters.dPadSettings.y):Parameters.dPadSettings.y; + } + Object.keys(this._keyButtons).forEach(function(key){ + if(Alias.globalShowStates.keyButtonSettings[key]) SceneManager._scene._keyButtons[key].show(); + }); + break; + case "fixed button": + if(this._controlButton && Alias.globalShowStates.controlButtonSettings) this._controlButton.show(); + //if(this._directionalPadDynamic && Alias.globalShowStates.dPadSettings) this._directionalPadDynamic.show(); + //if(this._directionalPadPoint && Alias.globalShowStates.dPadSettings) this._directionalPadPoint.show(); + if(this._directionalPadButton && Alias.globalShowStates.dPadSettings) this._directionalPadButton.show(); + Object.keys(this._keyButtons).forEach(function(key){ + if(Alias.globalShowStates.keyButtonSettings[key]) SceneManager._scene._keyButtons[key].show(); + }); + break; + default: + if(this._controlButton) this._controlButton.show(); + } + Alias.globalShowStates.controlMethod=method; + }; + + //============================================================================= + // Scene_Map + //============================================================================= + // If map movement is disabled from the parameters, return. + // If an active button is pressed, don't do the usual map movement. + //============================================================================= + + + Alias.Scene_Map_processMapTouch = Scene_Map.prototype.processMapTouch; + + Scene_Map.prototype.processMapTouch = function () { + var point=new Point(TouchInput.x,TouchInput.y); + if(Alias.globalShowStates.controlMethod=="touch input"&& + !SceneManager._scene._controlButton.containsPoint(point)) + Alias.Scene_Map_processMapTouch.call(this); + }; + + Alias.Scene_Map_isMenuCalled = Scene_Map.prototype.isMenuCalled; + Scene_Map.prototype.isMenuCalled = function () { + if (Alias.globalShowStates.controlMethod=="touch input") { + return Alias.Scene_Map_isMenuCalled.call(this); + } else { + return Input.isTriggered('menu'); + } + }; + + //============================================================================= + // Window_Selectable + //============================================================================= + // Disable Touch Input on selectable windows if configured in the parameters. + //============================================================================= + + + Alias.Window_Selectable_processTouch = Window_Selectable.prototype.processTouch; + + Window_Selectable.prototype.processTouch = function () { + var point=new Point(TouchInput.x,TouchInput.y); + if(SceneManager._scene._controlButton&& + SceneManager._scene._controlButton.active&& + (Alias.globalShowStates.controlMethod!="touch input"|| + SceneManager._scene._controlButton.containsPoint(point))) return; + + Alias.Window_Selectable_processTouch.call(this); + }; + //============================================================================= + // Window_Message + //============================================================================= + // Control UI visibility when the dialogue window is activated. + //============================================================================= + + + if (Parameters.hideButtonsDuringDialogue) { + Alias.Window_Message_startMessage = Window_Message.prototype.startMessage; + + Window_Message.prototype.startMessage = function () { + SceneManager._scene.hideVirtualButtons(); + if(SceneManager._scene._keyButtons["debug"]){//&&Alias.globalShowStates.controlMethod!='touch input'){ + SceneManager._scene._keyButtons["debug"].showInstant(); + } + ALOE.clearDpadInput(); + Alias.Window_Message_startMessage.call(this); + }; + + Alias.Window_Message_terminateMessage = Window_Message.prototype.terminateMessage; + + Window_Message.prototype.terminateMessage = function () { + Alias.Window_Message_terminateMessage.call(this); + SceneManager._scene.setControlMethod(Alias.globalShowStates.controlMethod); + }; + } + + if (Parameters.enableDPadDebugWindow) { + //============================================================================= + // Window_TouchInputTest + //============================================================================= + // The window to test what inputs are currently pressed on the D-Pad + //============================================================================= + var Window_TouchInputTest = function Window_TouchInputTest() { + this.initialize.apply(this, arguments); + }; + + Window_TouchInputTest.prototype = Object.create(Window_Base.prototype); + Window_TouchInputTest.prototype.constructor = Window_TouchInputTest; + + Window_TouchInputTest.prototype.initialize = function () { + Window_Base.prototype.initialize.call(this, Graphics.width - 300, 0, 300, 200); + this._lastState = { + up: false, + right: false, + down: false, + left: false + }; + this.refresh(); + }; + + Window_TouchInputTest.prototype.update = function () { + Window_Base.prototype.update.call(this); + + if (this.stateHasChanged()) { + this.refresh(); + } + }; + + Window_TouchInputTest.prototype.refresh = function () { + this.contents.clear(); + this.drawText("Up: ".concat(Input._currentState.up), 6, 0); + this.drawText("Right: ".concat(Input._currentState.right), 6, this.lineHeight()); + this.drawText("Down: ".concat(Input._currentState.down), 6, this.lineHeight() * 2); + this.drawText("Left: ".concat(Input._currentState.left), 6, this.lineHeight() * 3); + }; + + Window_TouchInputTest.prototype.stateHasChanged = function () { + if (this._lastState.up !== Input._currentState.up) { + this._lastState.up = Input._currentState.up; + return true; + } + + if (this._lastState.right !== Input._currentState.right) { + this._lastState.right = Input._currentState.right; + return true; + } + + if (this._lastState.down !== Input._currentState.down) { + this._lastState.down = Input._currentState.down; + return true; + } + + if (this._lastState.left !== Input._currentState.left) { + this._lastState.left = Input._currentState.left; + return true; + } + + return false; + }; + + var Scene_Map_createMapNameWindow = Scene_Map.prototype.createMapNameWindow; + + Scene_Map.prototype.createMapNameWindow = function () { + this._touchInputTestWindow = new Window_TouchInputTest(); + this.addChild(this._touchInputTestWindow); + Scene_Map_createMapNameWindow.call(this); + }; + } // end if Parameters.enableDPadDebugWindow + //============================================================================= + // Game_Player + //============================================================================= + // Help solve bug with stuck movement by clearing input on map transfer. + //============================================================================= + + + var Game_Player_performTransfer = Game_Player.prototype.performTransfer; + + Game_Player.prototype.performTransfer = function () { + if (this.isTransferring()) { + Game_Player_performTransfer.call(this); + ALOE.clearDpadInput(); + } + }; + + ALOE.clearDpadInput = function () { + delete Input._currentState.left; + delete Input._currentState.right; + delete Input._currentState.up; + delete Input._currentState.down; + }; + //============================================================================== + // Array.prototype.includes + // Array.prototype.find + //============================================================================== + // Polyfill for old versions of MV (1.5 and earlier) + //============================================================================== + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + + + if (!Array.prototype.includes) { + Object.defineProperty(Array.prototype, 'includes', { + value: function value(valueToFind, fromIndex) { + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } // 1. Let O be ? ToObject(this value). + + + var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). + + var len = o.length >>> 0; // 3. If len is 0, return false. + + if (len === 0) { + return false; + } // 4. Let n be ? ToInteger(fromIndex). + // (If fromIndex is undefined, this step produces the value 0.) + + + var n = fromIndex | 0; // 5. If n ≥ 0, then + // a. Let k be n. + // 6. Else n < 0, + // a. Let k be len + n. + // b. If k < 0, let k be 0. + + var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + + function sameValueZero(x, y) { + return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); + } // 7. Repeat, while k < len + + + while (k < len) { + // a. Let elementK be the result of ? Get(O, ! ToString(k)). + // b. If SameValueZero(valueToFind, elementK) is true, return true. + if (sameValueZero(o[k], valueToFind)) { + return true; + } // c. Increase k by 1. + + + k++; + } // 8. Return false + + + return false; + } + }); + } // https://tc39.github.io/ecma262/#sec-array.prototype.find + + + if (!Array.prototype.find) { + Object.defineProperty(Array.prototype, 'find', { + value: function value(predicate) { + // 1. Let O be ? ToObject(this value). + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + + var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). + + var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception. + + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function'); + } // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. + + + var thisArg = arguments[1]; // 5. Let k be 0. + + var k = 0; // 6. Repeat, while k < len + + while (k < len) { + // a. Let Pk be ! ToString(k). + // b. Let kValue be ? Get(O, Pk). + // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). + // d. If testResult is true, return kValue. + var kValue = o[k]; + + if (predicate.call(thisArg, kValue, k, o)) { + return kValue; + } // e. Increase k by 1. + + + k++; + } // 7. Return undefined. + + + return undefined; + }, + configurable: true, + writable: true + }); + } + //Rewrite TouchInput + + Alias.TouchInput_update = TouchInput.update; + TouchInput.update = function () { + Alias.TouchInput_update.call(this); + this._event = this._events._event; + //this._events._event = null; + }; + + Alias.TouchInput_clear = TouchInput.clear; + TouchInput.clear = function () { + Alias.TouchInput_clear.call(this); + this._events._event = null; + }; + + Alias.TouchInput_onMouseDown = TouchInput._onMouseDown; + TouchInput._onMouseDown = function (event) { + this._events._event = event; + Alias.TouchInput_onMouseDown.call(this, event); + }; + + Alias.TouchInput_onMouseMove = TouchInput._onMouseMove; + TouchInput._onMouseMove = function (event) { + this._events._event = event; + Alias.TouchInput_onMouseMove.call(this, event); + }; + + Alias.TouchInput_onMouseUp = TouchInput._onMouseUp; + TouchInput._onMouseUp = function (event) { + this._events._event = event; + Alias.TouchInput_onMouseUp.call(this, event); + }; + + Alias.TouchInput_onWheel = TouchInput._onWheel; + TouchInput._onWheel = function (event) { + this._events._event = event; + Alias.TouchInput_onWheel.call(this, event); + }; + + Alias.TouchInput_onTouchStart = TouchInput._onTouchStart; + TouchInput._onTouchStart = function (event) { + this._events._event = event; + Alias.TouchInput_onTouchStart.call(this, event); + this._screenPressed = event.targetTouches.length !== 0; + }; + + Alias.TouchInput_onTouchMove = TouchInput._onTouchMove; + TouchInput._onTouchMove = function (event) { + this._events._event = event; + Alias.TouchInput_onTouchMove.call(this, event); + this._screenPressed = event.targetTouches.length !== 0; + }; + + Alias.TouchInput_onTouchEnd = TouchInput._onTouchEnd; + TouchInput._onTouchEnd = function (event) { + this._events._event = event; + Alias.TouchInput_onTouchEnd.call(this, event); + this._screenPressed = event.targetTouches.length !== 0; + }; + + Alias.TouchInput_onTouchCancel = TouchInput._onTouchCancel; + TouchInput._onTouchCancel = function (event) { + this._events._event = event; + Alias.TouchInput_onTouchCancel.call(this, event); + this._screenPressed = event.targetTouches.length !== 0; + }; + + Alias.TouchInput_onPointerDown = TouchInput._onPointerDown; + TouchInput._onPointerDown = function (event) { + this._events._event = event; + Alias.TouchInput_onPointerDown.call(this, event); + }; + + Alias.DataManager_makeSaveContents = DataManager.makeSaveContents; + DataManager.makeSaveContents = function () { + var contents = Alias.DataManager_makeSaveContents.call(this); + contents.virtualButtonSates = Alias.globalShowStates; + return contents; + }; + + Alias.DataManager_extractSaveContents = DataManager.extractSaveContents; + DataManager.extractSaveContents = function (contents) { + Alias.DataManager_extractSaveContents.call(this, contents); + Alias.globalShowStates = contents.virtualButtonSates; + if (!Alias.globalShowStates) { + var params = null; + Alias.globalShowStates = {}; + + if (Parameters.dPadSettings.activeScenes) { + Alias.globalShowStates.dPadSettings = true; + } + + if (Parameters.keyButtonSettings) { + Alias.globalShowStates.keyButtonSettings = {}; + params = Parameters.keyButtonSettings; + for (var i = 0; i < params.length; i++) { + Alias.globalShowStates.keyButtonSettings[params[i].name.toLowerCase()] = true; + } + } + + if (Parameters.controlButtonSettings.activeScenes) { + Alias.globalShowStates.controlButtonSettings = true; + Alias.globalShowStates.controlButtonX = Parameters.controlButtonSettings.x; + Alias.globalShowStates.controlButtonY = Parameters.controlButtonSettings.y; + } + + Alias.globalShowStates.controlMethod='touch input'; + } + + window.VituralButtons=Alias.globalShowStates; + }; + + Object.defineProperties(Game_CharacterBase.prototype, { + '_moveSpeed': { + get: function () { + if (SceneManager._scene && SceneManager._scene._directionalPadPoint && SceneManager._scene._directionalPadPoint.active) { + var point1 = SceneManager._scene._directionalPadPoint._point; + var center = SceneManager._scene._directionalPad.GetCenterPoint(); + if (!(center && point1)) { + return this._ALOE_maxMoveSpeed; + } + var range = SceneManager._scene._directionalPad.absDistance(point1, center); + var width = Math.max(SceneManager._scene._directionalPad.width, SceneManager._scene._directionalPad.height); + if (range > width / 2 || range < width / 6) { + return this._ALOE_maxMoveSpeed; + } else { + return (range - width / 6) / (width / 3) * this._ALOE_maxMoveSpeed; + } + } else { + return this._ALOE_maxMoveSpeed; + } + }, + set: function (value) { + this._ALOE_maxMoveSpeed = value; + return value; + }, + configurable: true + } + }); +})(); \ No newline at end of file