alter-egoism/js/plugins/survivor_core.js
2025-11-07 03:06:19 +01:00

1115 lines
34 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(() => {
const pluginName = "survivor_core";
let textPictureText = "";
})();
//定数
const SURVIVOR_CONST = {
DEATH_COUNT: 20,
DAMAGE_DURATION: 20,
DM_SE_DURATION: 6,
POP_RATE: 2,
LEFT_MARGIN: 0,
RIGHT_MARGIN: 320,
ABILITY_VARI: 173,
// [100, 500, 700, 2000, 4000, 10000, 20000, 30000, 40000, 50000, Infinity]
ABILITY_PRICE: [100, 500, 1000, 3000, 7000, Infinity],
ABILITY_TEXT: {
collect_range: "Increase Pickup Range",
atk_power: "Increase Attack Power",
atk_rate: "Decrease Cooldown",
atk_speed: "Increase Attack Speed",
atk_num: "Extra Shots",
atk_range: "Increase Attack Range",
st_hp: "Increase Max HP and Recovery",
dm_resist: "Decrease Damage Taken",
st_rec: "Increase HP Recovery per Second",
st_exp: "Increase Experience Gained",
st_money: "Increase Gold Gained",
st_life: "Increase Revival Count"
},
WEAPON_TEXT: {
fire: "Fireballs orbit the caster",
thunder: "Fires lightning orbs at enemies",
ice: "Ice pillars emerge nearby",
maryoku_gun: "Fires magic bullets forward",
oboro: "Throws a sword upward", // Spins the sword around
houou_soutou: "Throws a spinning sword", // Throws the sword
sword: "Slashes enemies in front"
},
MONEY_VARI: 15,
COLLECT_RANGE: 50,
PLAYER_DAMAGE_RANGE: 24,
PLAYER_DAMAGE_DURATION: 6,
PLAYER_DAMAGE_SPRITES: 5,
PLAYER_BASE_HP: 100
};
var SURVIVOR_DATA = {
WeaponList: [], //new WEAPON
AbilityList: [], // {id:id, level:level}
MobList: [],
refreshPlayerState: function () {
// 初期値
Object.assign($gameTemp.SURVIVOR_player_data, {
collect_range: 1,
atk_power: 1,
atk_rate: 1,
atk_speed: 1,
atk_num: 0,
atk_range: 1,
st_hp: 1,
dm_resist: 1,
st_rec: 1,
st_exp: 1,
st_money: 1,
st_life: 1
});
// ステータスは加算で計算するヤツ
var kasan = { atk_num: true, st_rec: true, st_life: true };
//キャラのパラメータを追加
var params = SURVIVOR_UNIT_STATE[$gameTemp.survivor_ac];
for (var i = 0; i < params.length; i++) {
var power = params[i];
if (kasan[power]) {
$gameTemp.SURVIVOR_player_data[power.id] += power.value;
} else {
$gameTemp.SURVIVOR_player_data[power.id] *= power.value;
}
}
// 購入したパラメータの値を追加
var powers = $gameVariables.value(173).power;
for (var i = 0; i < powers.length; i++) {
var power = powers[i];
if (kasan[power.id]) {
$gameTemp.SURVIVOR_player_data[power.id] += SURVIVOR_DEFO_ABILITY_DATA[power.id][power.level];
} else {
$gameTemp.SURVIVOR_player_data[power.id] *= SURVIVOR_DEFO_ABILITY_DATA[power.id][power.level];
}
}
// 所持してるアビリティのパラメータを追加
for (var i = 0; i < $gameTemp.SURVIVOR_player_data.ability_level.length; i++) {
var data = $gameTemp.SURVIVOR_player_data.ability_level[i];
if (kasan[data.id]) {
$gameTemp.SURVIVOR_player_data[data.id] += SURVIVOR_ABILITY_DATA[data.id][data.level];
} else {
$gameTemp.SURVIVOR_player_data[data.id] *= SURVIVOR_ABILITY_DATA[data.id][data.level];
}
}
$gameTemp.SURVIVOR_player_data.collect_range *= SURVIVOR_CONST.COLLECT_RANGE;
$gameTemp.SURVIVOR_player_data.maxhp = SURVIVOR_CONST.PLAYER_BASE_HP;
$gameTemp.SURVIVOR_player_data.maxhp *= $gameTemp.SURVIVOR_player_data.st_hp;
}
};
function Spriteset_survivorMap() {
this.initialize(...arguments);
}
Spriteset_survivorMap.prototype = Object.create(Spriteset_Map.prototype);
Spriteset_survivorMap.prototype.constructor = Spriteset_survivorMap;
(function () {
//タイルマップを狭くして左に寄せる
var Tilemap_initialize = Tilemap.prototype.initialize;
Tilemap.prototype.initialize = function () {
Tilemap_initialize.call(this);
if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") {
this._width -= SURVIVOR_CONST.RIGHT_MARGIN;
}
};
var Game_Player_centerX = Game_Player.prototype.centerX;
Game_Player.prototype.centerX = function () {
if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") {
return ($gameMap.screenTileX() - 1) / 2 - SURVIVOR_CONST.RIGHT_MARGIN / 48 / 2;
} else {
return Game_Player_centerX.call(this);
}
};
Game_Message.prototype.isSurvivorBusy = function () {
return this.hasText() || this.isChoice() || this.isNumberInput() || this.isItemChoice();
};
})();
Spriteset_survivorMap.prototype.createLowerLayer = function () {
Spriteset_Base.prototype.createLowerLayer.call(this);
this.createParallax();
this.createTilemap();
this.createCharacters();
this.createShadow();
this.createDestination();
this.createWeather();
this._mobSp = [];
var wave_count = 0;
for (var i = 0; i < Wave[$gameTemp.survivor_map][wave_count][0].count * SURVIVOR_CONST.POP_RATE; i++) {
this.createMob(Wave[$gameTemp.survivor_map][wave_count][0].id, i);
}
this._weaponSp = {};
for (var i = 0; i < $gameTemp.SURVIVOR_player_data.weapon_level.length; i++) {
this.addWeapon($gameTemp.SURVIVOR_player_data.weapon_level[i].id, 1);
}
this._keikenSp = [];
this.createGauge();
this.createCharaWindow();
};
//経験値ゲージの作成
Spriteset_survivorMap.prototype.createGauge = function () {
var sp = new Sprite_Gauge_K();
sp.x = (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2;
sp.y = 20;
sp.zIndex = 1000;
this.addChild(sp);
};
Spriteset_survivorMap.prototype.createCharaWindow = function (name, id) {};
Spriteset_survivorMap.prototype.createMob = function (name, id) {
var m = new MOB(name, id);
SURVIVOR_DATA.MobList.push(m);
var sp = new Sprite_Mob(m, name, id);
sp.zIndex = 300;
this._mobSp.push(sp);
this.addChild(sp);
};
Spriteset_survivorMap.prototype.createKeiken = function (obj) {
var sp = new Sprite_Keiken(Math.floor(10000 * Math.random()));
sp.x = obj.x;
sp.y = obj.y;
sp._CBR_exp = obj.exp || 1;
sp.zIndex = 100;
this._keikenSp.push(sp);
this.addChild(sp);
};
// ######################## ココで武器情報を全て入れる ##################
Spriteset_survivorMap.prototype.weaponMaker = function (name, level) {
var d = new WEAPON_MAKER(name, level);
if (name == "fire") {
this._weaponSp.fire = [];
for (var i = 0; i < d.num; i++) {
var w = new WEAPON("fire", i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.fire.push(sp);
this.addChild(sp);
}
} else if (name == "thunder") {
this._weaponSp.thunder = [];
for (var i = 0; i < d.num; i++) {
var w = new WEAPON(name, i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.thunder.push(sp);
this.addChild(sp);
}
} else if (name == "ice") {
this._weaponSp.ice = [];
for (var i = 0; i < d.num; i++) {
var w = new WEAPON(name, i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.ice.push(sp);
this.addChild(sp);
}
// 連射系は5倍入れる
} else if (name == "maryoku_gun") {
this._weaponSp.maryoku_gun = [];
for (var i = 0; i < d.num * 5; i++) {
var w = new WEAPON(name, i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.maryoku_gun.push(sp);
this.addChild(sp);
}
// 連射系は5倍入れる
} else if (name == "oboro") {
this._weaponSp.oboro = [];
for (var i = 0; i < d.num * 5; i++) {
var w = new WEAPON(name, i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.oboro.push(sp);
this.addChild(sp);
}
// 連射系は5倍入れる
} else if (name == "houou_soutou") {
this._weaponSp.houou_soutou = [];
for (var i = 0; i < d.num * 5; i++) {
var w = new WEAPON(name, i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.houou_soutou.push(sp);
this.addChild(sp);
}
} else if (name == "sword") {
this._weaponSp.sword = [];
for (var i = 0; i < 1; i++) {
var w = new WEAPON(name, i, d, level);
var sp = new Sprite_Survive_Weapon(w);
SURVIVOR_DATA.WeaponList.push(w);
sp.zIndex = 500;
this._weaponSp.sword.push(sp);
this.addChild(sp);
}
}
};
Spriteset_survivorMap.prototype.addWeapon = function (id, level) {
this.weaponMaker(id, level);
};
Spriteset_survivorMap.prototype.refreshWeapon = function (id, level) {
this.delWeapon(id);
this.weaponMaker(id, level);
};
Spriteset_survivorMap.prototype.delWeapon = function (name) {
if (this._weaponSp[name]) {
for (var i = 0; i < this._weaponSp[name].length; i++) {
this.removeChild(this._weaponSp[name][i]);
this._weaponSp[name][i].destroy();
this._weaponSp[name][i] = null;
}
SURVIVOR_DATA.WeaponList = SURVIVOR_DATA.WeaponList.filter((e) => e.name !== name);
}
};
Spriteset_survivorMap.prototype.update = function () {
if ($gameMessage.isBusy()) {
return;
}
Spriteset_Base.prototype.update.call(this);
this.updateTileset();
this.updateParallax();
this.updateTilemap();
this.updateShadow();
this.updateWeather();
this.updateAnimations();
this.updateBalloons();
var len = survivorState.newKeiken.length;
if (len) {
for (var i = 0; i < len; i++) {
this.createKeiken(survivorState.newKeiken[i]);
}
this.sortChildren(); //新しいの作ったらモンスターの下にくるようにしないとね
survivorState.newKeiken.length = 0;
}
if (survivorState.se_cool) {
survivorState.se_cool--;
}
//消すべき経験のSpriteを削除
if (survivorState.keikenDel.length) {
for (var i = 0, len = survivorState.keikenDel.length; i < len; i++) {
var idx = this._keikenSp.findIndex((e) => e.spriteId == survivorState.keikenDel[i]);
this.delKeiken(idx);
}
survivorState.keikenDel.length = 0;
}
};
Spriteset_survivorMap.prototype.delKeiken = function (idx) {
$gameTemp.SURVIVOR_player_data.now_exp += this._keikenSp[idx]._CBR_exp * $gameTemp.SURVIVOR_player_data.st_exp;
var v = $gameVariables.value(173);
v.gold += Math.ceil(this._keikenSp[idx]._CBR_exp * $gameTemp.SURVIVOR_player_data.st_money);
$gameVariables.setValue(173, v);
this._keikenSp[idx].destroy(); //mapのremoveChild-
this._keikenSp.splice(idx, 1); //_keikenSpからも消す
};
Scene_Survive_Battle_Map.prototype.update = function () {
Scene_Message.prototype.update.call(this);
this.updateDestination();
this.updateMenuButton();
this.updateMapNameWindow();
this.updateMainMultiply();
if (this.isSceneChangeOk()) {
this.updateScene();
} else if (SceneManager.isNextScene(Scene_Battle)) {
this.updateEncounterEffect();
}
this.updateWaitCount();
if ($gameMessage.isBusy()) {
return;
}
if (0 < Survivor_var.dm_se) {
Survivor_var.dm_se--;
}
//中心から離れてる順にソートする
SURVIVOR_DATA.MobList.sort(function (a, b) {
var ax = a.x - (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2;
var bx = b.x - (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2;
var ay = a.y - Graphics.height / 2;
var by = b.y - Graphics.height / 2;
return Math.sqrt(bx * bx + by * by) - Math.sqrt(ax * ax + ay * ay);
});
//削除されてたら消す
for (var i = SURVIVOR_DATA.MobList.length - 1; 0 <= i; i--) {
if (!SURVIVOR_DATA.MobList[i]) {
SURVIVOR_DATA.MobList.pop();
} else {
break;
}
}
this.updatePlayerDir();
this.updateMobCool();
this.updateMobPosition();
this.updateWeapon();
this.updateDamage();
this.updateKb();
this.rePopMob();
// レベルアップ処理、タイマーが0より大きい時だけ
var next_exp = $gameTemp.SURVIVOR_next_exp($gameTemp.SURVIVOR_player_data.level);
if (next_exp < $gameTemp.SURVIVOR_player_data.now_exp && 0 < $gameTimer._frames) {
//$gameTemp.SURVIVOR_player_data.now_exp - next_exp;
$gameMessage.setNumberInput(5, 3); // 5ならレベルアップウィンドウ、4ならキャンセルウィンドウ
}
if (this._spriteset._timerSprite) {
this._spriteset._timerSprite.zIndex = 99999;
this._spriteset.sortChildren();
}
// タイマーが0になって生き延びたら
if ($gameTimer.isWorking() && $gameTimer._frames <= 0) {
// var maplist = [
// 280, //ヒストリア
// 281, //鬼と刀
// 282, //令嬢
// 283, //ディストピア
// 284 //軋轢
// ];
var data = $gameVariables.value(173);
var memoryData = data.memory; // [{name: string, phase: number}] 1普通にクリア、2特定のキャラクターでクリア
// フォーネリア
if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 5) {
var nowName = "for";
// アリス
} else if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 2) {
var nowName = "alice";
// 藍華
} else if ($gameParty.leader().characterName() == "survive_main_unit2" && $gameParty.leader().characterIndex() == 1) {
var nowName = "aika";
// ハヅキ
} else if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 4) {
var nowName = "hazu";
// クレイシア
} else if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 3) {
var nowName = "cla";
}
var nowMapId = $gameMap.mapId();
if (nowMapId === 280) {
var stageName = "for";
var ev = [, 1223, 1224];
} else if (nowMapId === 282) {
var stageName = "alice";
var ev = [, 1227, 1228];
} else if (nowMapId === 281) {
var stageName = "aika";
var ev = [, 1225, 1226];
} else if (nowMapId === 283) {
var stageName = "hazu";
var ev = [, 1229, 1230];
} else if (nowMapId === 284) {
var stageName = "cla";
var ev = [, 1231, 1232];
}
var clearIdx = memoryData.findIndex((e) => e.name === stageName);
if (clearIdx === -1) {
// このステージ初クリアだったら
data.memory.push({ name: stageName, phase: 1 });
$gameTemp.survivor_reserve_kaisou = ev[1];
} else {
if (data.memory[clearIdx].phase === 1 && stageName == nowName) {
//2段階が初クリアだったら
data.memory[clearIdx].phase = 2;
$gameTemp.survivor_reserve_kaisou = ev[2];
}
}
$gameVariables.setValue(173, data);
$gameTimer.stop();
$gameTemp.reserveCommonEvent(1221);
}
};
Scene_Survive_Battle_Map.prototype.updatePlayerDir = function () {
if (tttt % 30 == 20) {
if (Survivor_var.now_x != $gameMap._parallaxX || Survivor_var.now_y != $gameMap._parallaxY) {
Survivor_var.bf_x = Survivor_var.now_x;
Survivor_var.bf_y = Survivor_var.now_y;
Survivor_var.now_x = $gameMap._parallaxX;
Survivor_var.now_y = $gameMap._parallaxY;
Survivor_var.player_dir = Math.atan2(Survivor_var.now_y - Survivor_var.bf_y, Survivor_var.now_x - Survivor_var.bf_x);
}
}
};
//Sprite_Mobでdelが入ってから削除される
Scene_Survive_Battle_Map.prototype.updateDelMob = function () {
SURVIVOR_DATA.WeaponList.forEach((e, index) => {
if (e.del) {
SURVIVOR_DATA.WeaponList.splice(index, 1);
}
});
};
//Sprite_Mobでdelが入ってから削除される
Scene_Survive_Battle_Map.prototype.updateDelMob = function () {
SURVIVOR_DATA.MobList.forEach((e, index) => {
if (e.del) {
SURVIVOR_DATA.MobList.splice(index, 1);
}
});
};
var tttt = 0;
Scene_Survive_Battle_Map.prototype.rePopMob = function () {
var time_span = $gameTemp.timerStart - $gameTimer.seconds();
var wave_count = 0;
wave_count = Math.floor(time_span / 30);
wave_count = Math.min(wave_count, Wave[$gameTemp.survivor_map].length - 1);
if (tttt % 30 == 10) {
for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) {
var m = SURVIVOR_DATA.MobList[i];
if (m.del) {
m.resetMob(Wave[$gameTemp.survivor_map][wave_count][0].id, m.id);
}
}
}
tttt++;
};
Scene_Survive_Battle_Map.prototype.updateKb = function () {
for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) {
var m = SURVIVOR_DATA.MobList[i];
if (m.death) {
continue;
}
if (m.kb) {
if (m.kb.f) {
var r = m.kb.power / m.kb.f;
m.x += r * Math.cos(m.kb.dir);
m.y += r * Math.sin(m.kb.dir);
m.kb.f--;
}
if (m.kb.f <= 0) {
m.kb = null;
}
}
}
};
//移動、Sprite_Mobのupdateでやると順番がバラバラなのでココでやる
Scene_Survive_Battle_Map.prototype.updateMobPosition = function () {
for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) {
var m = SURVIVOR_DATA.MobList[i];
//スクロールによる位置調整
m.x -= ($gameMap._parallaxX - m.dispX) * 48;
m.dispX = $gameMap._parallaxX;
m.y -= ($gameMap._parallaxY - m.dispY) * 48;
m.dispY = $gameMap._parallaxY;
//死んでたら移動しない
if (m.death) {
continue;
}
//中心へ向かって移動
var theta = Math.atan2(Graphics.height / 2 - m.y, (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2 - m.x);
m.x += Math.cos(theta) * m.speed;
m.y += Math.sin(theta) * m.speed;
//もし範囲内にmobがいたら離れる
for (var k = 0, len2 = SURVIVOR_DATA.MobList.length; k < len2; k++) {
//自分より内側のヤツだけ攻撃範囲計算する
//近付いてたら自分が離れる
if (k <= i) {
continue;
}
var m2 = SURVIVOR_DATA.MobList[k];
if (m2.death) {
continue;
}
var saX = m2.x - m.x;
var saY = m2.y - m.y;
var sa = Math.sqrt(saX * saX + saY * saY);
var r = (m.r + m2.r) * 0.75; //衝突判定は攻撃範囲の半分の大きさでいいや
if (sa < r && m.id != m2.id) {
theta += (0.5 - Math.random()) * 3; //だいたい±π/2
m.x -= Math.cos(theta) * (r - sa); //離したい分だけ離す
m.y -= Math.sin(theta) * (r - sa);
break;
}
}
}
};
//攻撃判定
Scene_Survive_Battle_Map.prototype.updateWeapon = function () {
for (var i = 0, len = SURVIVOR_DATA.WeaponList.length; i < len; i++) {
var w = SURVIVOR_DATA.WeaponList[i];
w.update_orbit();
}
};
Scene_Survive_Battle_Map.prototype.updateMobCool = function () {
for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) {
var m = SURVIVOR_DATA.MobList[i];
m.cool.forEach((e, index) => {
if (e.t < 1) {
m.cool.splice(index, 1);
} else {
e.t--;
}
});
}
};
Scene_Survive_Battle_Map.prototype.updateDamage = function () {
$gameTemp.SURVIVOR_player_data.recover_cool--;
if ($gameTemp.SURVIVOR_player_data.recover_cool < 0) {
$gameTemp.SURVIVOR_player_data.recover_cool = 60;
$gameTemp.SURVIVOR_player_data.nowhp += $gameTemp.SURVIVOR_player_data.st_rec;
if ($gameTemp.SURVIVOR_player_data.maxhp < $gameTemp.SURVIVOR_player_data.nowhp) {
$gameTemp.SURVIVOR_player_data.nowhp = $gameTemp.SURVIVOR_player_data.maxhp;
}
}
//プレイヤーのダメージ
if (
$gameTemp.SURVIVOR_player_data.damage_cool <= 0 &&
SURVIVOR_DATA.MobList &&
2 < SURVIVOR_DATA.MobList.length &&
!$gameTemp.SURVIVOR_player_data.game_end
) {
// 一番中心に近いMOBを抽出
var m = SURVIVOR_DATA.MobList[SURVIVOR_DATA.MobList.length - 1];
var px = (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2;
var py = Graphics.height / 2;
var kyori = (m.x - px) * (m.x - px);
kyori += (m.y - py) * (m.y - py);
kyori = Math.sqrt(kyori);
// 距離の内側だったらダメージ
if (kyori < SURVIVOR_CONST.PLAYER_DAMAGE_RANGE) {
$gameTemp.SURVIVOR_player_data.damage_cool = SURVIVOR_CONST.PLAYER_DAMAGE_DURATION;
$gameTemp.SURVIVOR_player_data.disp_damages[$gameTemp.SURVIVOR_player_data.damage_count] = {
dm: m.damage,
duration: SURVIVOR_CONST.DAMAGE_DURATION,
visible: true
};
// hpをダメージ分減らす
$gameTemp.SURVIVOR_player_data.nowhp -= m.damage;
$gameTemp.SURVIVOR_player_data.damage_count = ($gameTemp.SURVIVOR_player_data.damage_count + 1) % SURVIVOR_CONST.PLAYER_DAMAGE_SPRITES;
// もし死んだら
if ($gameTemp.SURVIVOR_player_data.nowhp < 0) {
$gameTemp.SURVIVOR_player_data.death_count++;
// デスカウントが復活回数超えてたら
if ($gameTemp.SURVIVOR_player_data.st_life < $gameTemp.SURVIVOR_player_data.death_count) {
$gameTimer.stop();
$gameTemp.reserveCommonEvent(1216);
$gameTemp.SURVIVOR_player_data.game_end = true;
// まだカウント残ってたら復活
} else {
$gameTemp.SURVIVOR_player_data.nowhp = $gameTemp.SURVIVOR_player_data.maxhp;
$gameTemp.requestAnimation([$gamePlayer], 49);
}
}
}
} else {
$gameTemp.SURVIVOR_player_data.damage_cool--;
}
//モブのダメージ
for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) {
var m = SURVIVOR_DATA.MobList[i];
if (m.death) {
continue;
}
for (var k = 0, len2 = SURVIVOR_DATA.WeaponList.length; k < len2; k++) {
var w = SURVIVOR_DATA.WeaponList[k];
//その武器が攻撃上限に達してたらスルー
if (w.break) {
continue;
}
var kyori = (m.x - w.x) * (m.x - w.x);
kyori += (m.y - w.y) * (m.y - w.y);
kyori = Math.sqrt(kyori);
//もし攻撃範囲内の場合
if (kyori < w.r * $gameTemp.SURVIVOR_player_data.atk_range) {
//クールタイム中だったら次の武器へ
var key = m.cool.findIndex(function (e) {
return e.name == w.name + w.id;
});
if (key != -1) {
continue;
}
//武器の反対方向ではなくプレイヤーの反対へ
if (Survivor_var.dm_se < 1) {
AudioManager.playSe({ name: "Blow2", volume: 10, pitch: 200, pan: 0 });
Survivor_var.dm_se = SURVIVOR_CONST.DM_SE_DURATION;
}
//攻撃回数が設定されている場合
if (w.count_max) {
w.count++;
if (w.count_max <= w.count) {
w.break = true;
}
}
//死んだ瞬間
if (m.hp <= Math.ceil(w.damage * $gameTemp.SURVIVOR_player_data.atk_power)) {
m.death = true;
m.deathCount = SURVIVOR_CONST.DEATH_COUNT;
m.deathFilter = false;
survivorState.newKeiken.push({ x: m.x, y: m.y, exp: m.exp });
break; //ココで終わればブキと対象mobの処理も終わる
}
//吹っ飛ばす
m.cool.push({
name: w.name + w.id,
t: w.cool
});
m.setDamage(Math.ceil(w.damage * $gameTemp.SURVIVOR_player_data.atk_power));
var theta = Math.atan2(m.y - Graphics.height / 2, m.x - (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2);
m.kb = {
dir: theta,
f: w.kb.f,
power: w.kb.power
};
}
}
}
};
const SURVIVOR_WEAPON_LIST = ["fire", "thunder", "ice", "maryoku_gun", "oboro", "houou_soutou", "sword"];
const SURVIVOR_WEAPON_DISP_DATA = {
fire: { name: "Fire", evo_name: "Fire Lv10", icon: { x: 0, y: 4 } },
thunder: { name: "Thunder", evo_name: "Thunder Lv10", icon: { x: 2, y: 4 } },
ice: { name: "Ice", evo_name: "Ice Lv10", icon: { x: 1, y: 4 } },
maryoku_gun: { name: "Magic Bullet", evo_name: "Ancient", icon: { x: 8, y: 6 } },
oboro: { name: "Blurred Blade", evo_name: "Blurred Blade: Lust", icon: { x: 8, y: 7 } }, // 刀をグルグル回す
houou_soutou: { name: "Twin Blades", evo_name: "Amatsukagami", icon: { x: 12, y: 7 } }, //刀を投げ飛ばす
sword: { name: "Normal Sword", evo_name: "Excalibur", icon: { x: 1, y: 6 } } //slash
};
const SURVIVOR_UNIT_STATE = {
for: [
{ id: "st_hp", value: 1.3 },
{ id: "dm_resist", value: 0.8 }
],
aika: [
{ id: "atk_power", value: 1.2 },
{ id: "atk_rate", value: 0.95 }
],
hazu: [{ id: "atk_power", value: 1.3 }],
alice: [{ id: "collect_range", value: 1.4 }],
cla: [
{ id: "atk_range", value: 1.3 },
{ id: "atk_num", value: 1 }
]
};
const SURVIVOR_ABILITY_LIST = [
"collect_range",
"atk_power",
"atk_rate",
"atk_speed",
"atk_num",
"atk_range",
"st_hp",
"dm_resist",
"st_rec",
"st_exp",
"st_money",
"st_life"
];
SURVIVOR_ABILITY_DISP_DATA = {
collect_range: { name: "Pickup Range", icon: { x: 3, y: 4 } },
atk_power: { name: "Attack Power", icon: { x: 13, y: 4 } },
atk_rate: { name: "Cooldown", icon: { x: 15, y: 4 } },
atk_speed: { name: "Attack Speed", icon: { x: 12, y: 4 } },
atk_num: { name: "Extra Shots", icon: { x: 6, y: 7 } },
atk_range: { name: "Attack Range", icon: { x: 8, y: 4 } },
st_hp: { name: "Max HP", icon: { x: 4, y: 5 } },
dm_resist: { name: "Resistance", icon: { x: 0, y: 8 } },
st_rec: { name: "Auto Recovery", icon: { x: 1, y: 15 } },
st_exp: { name: "Bonus EXP", icon: { x: 13, y: 18 } },
st_money: { name: "Bonus Money", icon: { x: 9, y: 19 } },
st_life: { name: "Revival Count", icon: { x: 13, y: 13 } }
};
const SURVIVOR_DEFO_ABILITY_DATA = {
collect_range: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0],
atk_power: [1, 1.02, 1.04, 1.06, 1.08, 1.1, 1.12, 1.14, 1.16, 1.18, 1.2],
atk_rate: [1, 0.98, 0.96, 0.94, 0.92, 0.9, 0.88, 0.06, 0.84, 0.82, 0.8],
atk_speed: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0],
atk_num: [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3], //これは加算
atk_range: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0],
st_hp: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0],
dm_resist: [1, 0.97, 0.94, 0.91, 0.88, 0.85, 0.82, 0.79, 0.76, 0.73, 0.7],
st_rec: [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3], //これは加算
st_exp: [1, 1.02, 1.04, 1.06, 1.08, 1.1, 1.12, 1.14, 1.16, 1.18, 1.2],
st_money: [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6.0],
st_life: [0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5] //これは加算
};
const SURVIVOR_ABILITY_DATA = {
collect_range: [1, 1.4, 1.8, 2.2, 2.6, 3.0],
atk_power: [1, 1.06, 1.12, 1.18, 1.24, 1.3],
atk_rate: [1, 0.94, 0.88, 0.82, 0.76, 0.7],
atk_speed: [1, 1.4, 1.8, 2.2, 2.6, 3.0],
atk_num: [0, 1, 1, 2, 2, 3], //これは加算
atk_range: [1, 1.2, 1.4, 1.6, 1.8, 2.0],
st_hp: [1, 1.2, 1.4, 1.6, 1.8, 2.0],
dm_resist: [1, 0.9, 0.8, 0.7, 0.6, 0.5],
st_rec: [0, 1, 1, 1, 1, 2], //これは加算
st_exp: [1, 1.06, 1.12, 1.18, 1.24, 1.3],
st_money: [1, 1.2, 1.4, 1.6, 1.8, 2.0],
st_life: [0, 1, 2, 3, 4, 5], // これは加算
move_speed: [1, 1.2, 1.4, 1.6, 1.8, 2]
};
const Survivor_var = {
dm_se: 0,
bf_x: 0,
bf_y: 0,
now_x: 0,
now_y: 0,
player_dir: 0
};
var survivorState = {
newKeiken: [],
se_cool: 0,
keikenDel: []
};
// 1面 1wave 種類って感じ
var Wave = {
for: [
[{ id: "ossan", count: 50 }],
[{ id: "monster_slime_b", count: 50 }],
[{ id: "bat", count: 50 }],
[{ id: "jelly", count: 50 }],
[{ id: "ossan_hage", count: 50 }],
[{ id: "monster_ghost", count: 50 }],
[{ id: "ossan_red", count: 50 }],
[{ id: "monster_bone", count: 50 }],
[{ id: "monster_succubus_r", count: 50 }],
[{ id: "ossan_gold", count: 50 }]
],
aika: [
[{ id: "ossan", count: 50 }],
[{ id: "bee", count: 50 }],
[{ id: "spider", count: 50 }],
[{ id: "ossan_long", count: 50 }],
[{ id: "monster_ghost", count: 50 }],
[{ id: "ossan_majime", count: 50 }],
[{ id: "monster_imp", count: 50 }],
[{ id: "ossan_red", count: 50 }],
[{ id: "monster_flower_b", count: 50 }],
[{ id: "ossan_gold", count: 50 }]
],
alice: [
[{ id: "ossan", count: 50 }],
[{ id: "monster_flower_r", count: 50 }],
[{ id: "bat", count: 50 }],
[{ id: "monster_ghost", count: 50 }],
[{ id: "ossan_mura", count: 50 }],
[{ id: "monster_imp", count: 50 }],
[{ id: "ossan_hakase", count: 50 }],
[{ id: "monster_flower_b", count: 50 }],
[{ id: "monster_orc", count: 50 }],
[{ id: "ossan_gold", count: 50 }]
],
hazu: [
[{ id: "ossan", count: 50 }],
[{ id: "monster_slime_b", count: 50 }],
[{ id: "spider", count: 50 }],
[{ id: "ossan_hakase", count: 50 }],
[{ id: "monster_ghost", count: 50 }],
[{ id: "monster_bone", count: 50 }],
[{ id: "ossan_red", count: 50 }],
[{ id: "ossan_battle", count: 50 }],
[{ id: "medama", count: 50 }],
[{ id: "ossan_gold", count: 50 }]
],
cla: [
[{ id: "ossan", count: 50 }],
[{ id: "scorpion", count: 50 }],
[{ id: "jelly", count: 50 }],
[{ id: "ossan_hage", count: 50 }],
[{ id: "monster_ghost", count: 50 }],
[{ id: "monster_imp", count: 50 }],
[{ id: "ossan_red", count: 50 }],
[{ id: "monster_succubus_r", count: 50 }],
[{ id: "fishman", count: 50 }],
[{ id: "ossan_gold", count: 50 }]
]
};
// これ入れないとボカしoffなので拡大した時黒い線が表示される
var sviv_Bitmap_updateScaleMode = Bitmap.prototype._updateScaleMode;
Bitmap.prototype._updateScaleMode = function () {
sviv_Bitmap_updateScaleMode.call(this);
if (this._baseTexture && SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") {
this._baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST;
}
};
// これ入れないとボカしoffなので拡大した時黒い線が表示される
// Bitmap.prototype._updateScaleMode = function () {
// if (this._baseTexture) {
// if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") {
// this._baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST;
// } else {
// if (this._smooth) {
// this._baseTexture.scaleMode = PIXI.SCALE_MODES.LINEAR;
// } else {
// this._baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST;
// }
// }
// }
// };
//右のウィンドウ
var Scene_Survive_Battle_Map_start = Scene_Survive_Battle_Map.prototype.start;
Scene_Survive_Battle_Map.prototype.start = function () {
Scene_Survive_Battle_Map_start.call(this);
const rect = this.infoWindowRect();
this._infoWindow = new Window_Tachie_Info(rect);
this.addWindow(this._infoWindow);
};
Scene_Survive_Battle_Map.prototype.infoWindowRect = function () {
const ww = SURVIVOR_CONST.RIGHT_MARGIN;
const wh = Graphics.height;
const wx = Graphics.width - ww;
const wy = 0;
return new Rectangle(wx, wy, ww, wh);
};
function Window_Tachie_Info() {
this.initialize(...arguments);
}
Window_Tachie_Info.prototype = Object.create(Window_Selectable.prototype);
Window_Tachie_Info.prototype.constructor = Window_Tachie_Info;
Window_Tachie_Info.prototype.initialize = function (rect) {
Window_Selectable.prototype.initialize.call(this, rect);
this.refresh();
this.now_cg_num = 0;
};
Window_Tachie_Info.prototype.colSpacing = function () {
return 0;
};
Window_Tachie_Info.prototype.refresh = function () {
this.contents.clear();
this.drawCharacter(3, 10, 10);
//this.drawIcon(3,10,10);
};
Window_Tachie_Info.prototype.update = function () {
this.processCursorMove();
this.processHandling();
this.processTouch();
Window_Scrollable.prototype.update.call(this);
var new_cg_num = Math.min(4, Math.max(1, 4 - Math.floor(($gameTemp.SURVIVOR_player_data.nowhp / $gameTemp.SURVIVOR_player_data.maxhp) * 4)));
var ary = {
for: "survive_tachi_for_",
alice: "survive_tachi_alice_",
hazu: "survive_tachi_hazu_",
aika: "survive_tachi_aika_",
cla: "survive_tachi_cla_"
};
if (this.now_cg_num < new_cg_num) {
this.drawCharacter(3, 10, 10, ary[$gameTemp.survivor_ac], new_cg_num);
}
};
Window_Tachie_Info.prototype.drawCharacter = function (iconIndex, x, y, new_cg_name, new_cg_num) {
if (!new_cg_name) {
return;
}
var bitmap = ImageManager.loadPicture(`${new_cg_name}${new_cg_num}`);
if (bitmap._loadingState == "loaded" && this.contents) {
this.contents.clear();
const pw = 675;
const ph = 1080;
const sx = 0;
const sy = 0;
this.contents.blt(bitmap, sx, sy, pw, ph, x - 110, y, (pw * 2) / 3, (ph * 2) / 3);
this.now_cg_num = new_cg_num;
}
};
Window_Tachie_Info.prototype.value = function () {};
Window_Tachie_Info.prototype.currencyUnit = function () {
return TextManager.currencyUnit;
};
Window_Tachie_Info.prototype.open = function () {
this.refresh();
Window_Selectable.prototype.open.call(this);
};
Window_Tachie_Info.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window_sviv");
};
Window_Tachie_Info.prototype.updateBackOpacity = function () {
this.backOpacity = 255;
};
Window_Tachie_Info.prototype._refreshBack = function () {
const m = this._margin;
const w = Math.max(0, this._width - m * 2);
const h = Math.max(0, this._height - m * 2);
const sprite = this._backSprite;
const tilingSprite = sprite.children[0];
// [Note] We use 95 instead of 96 here to avoid blurring edges.
sprite.bitmap = this._windowskin;
sprite.setFrame(0, 0, 95, 95);
sprite.move(m, m);
sprite.scale.x = w / 95;
sprite.scale.y = h / 95;
tilingSprite.bitmap = this._windowskin;
tilingSprite.setFrame(0, 96, 96, 96);
tilingSprite.move(0, 0, w, h);
tilingSprite.scale.x = 1 / sprite.scale.x;
tilingSprite.scale.y = 1 / sprite.scale.y;
sprite.setColorTone([0, 0, 0, 255]);
};
// ################ 左下のウィンドウ ################
function Window_Survive_Gold_Info() {
this.initialize(...arguments);
}
(function () {
Window_Survive_Gold_Info.prototype = Object.create(Window_Selectable.prototype);
Window_Survive_Gold_Info.prototype.constructor = Window_Survive_Gold_Info;
Window_Survive_Gold_Info.prototype.initialize = function (rect) {
Window_Selectable.prototype.initialize.call(this, rect);
this.refresh();
};
Window_Survive_Gold_Info.prototype.refresh = function () {
this.contents.clear();
this.contents.fontSize = 18;
this.drawText(`${$gameVariables.value(173).gold} GOLD`, 0, 10, 130, "right");
};
Window_Survive_Gold_Info.prototype.update = function () {
this.processCursorMove();
this.processHandling();
this.processTouch();
Window_Scrollable.prototype.update.call(this);
this.refresh();
};
Window_Survive_Gold_Info.prototype.open = function () {
//this.refresh();
Window_Selectable.prototype.open.call(this);
};
Window_Survive_Gold_Info.prototype.lineHeight = function () {
return 12;
};
Window_Survive_Gold_Info.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window_sviv");
};
const _Scene_Survive_Battle_Map_createAllWindows = Scene_Survive_Battle_Map.prototype.createAllWindows;
Scene_Survive_Battle_Map.prototype.createAllWindows = function () {
_Scene_Survive_Battle_Map_createAllWindows.call(this);
const rect = this.goldWindowRect();
this._goldWindow = new Window_Survive_Gold_Info(rect);
this.addChild(this._goldWindow);
};
Scene_Survive_Battle_Map.prototype.goldWindowRect = function () {
const ww = 130 + 12 * 2;
const wh = 30 * 1 + 14 * 2;
const wx = 806;
const wy = 54;
return new Rectangle(wx, wy, ww, wh);
};
})();