mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-07-02 01:02:12 +08:00
Cleanup
Events.damage method now groups all common lines for Events.animateRanged and Events.animateMelee.
Balance between success and failure is now determined by Events.lost. It is set to "true" when the player is killed and prevents Events.winFight() altogether.
Events.endFight() groups the 2 consistent actions in winFight and loseFight, i.e., pause unsetting and stopping the enemy.
Completely renewed trap method: instead of relying on a separate counter, enemy.data('stunned') now returns the number of remaining seconds of stunning. Enemy's timed attack decreases this value by the attack delay time (the enemy fights for its freedom).
This commit is contained in:
+66
-77
@@ -10,7 +10,7 @@ var Events = {
|
|||||||
_MEDS_COOLDOWN: 7,
|
_MEDS_COOLDOWN: 7,
|
||||||
_LEAVE_COOLDOWN: 1,
|
_LEAVE_COOLDOWN: 1,
|
||||||
_PAUSE_COOLDOWN: 0.4,
|
_PAUSE_COOLDOWN: 0.4,
|
||||||
STUN_DURATION: 4000,
|
STUN_DURATION: 4,
|
||||||
BLINK_INTERVAL: false,
|
BLINK_INTERVAL: false,
|
||||||
|
|
||||||
init: function(options) {
|
init: function(options) {
|
||||||
@@ -73,7 +73,7 @@ var Events = {
|
|||||||
|
|
||||||
startCombat: function(scene) {
|
startCombat: function(scene) {
|
||||||
Engine.event('game event', 'combat');
|
Engine.event('game event', 'combat');
|
||||||
Events.won = false;
|
Events.lost = false;
|
||||||
var desc = $('#description', Events.eventPanel());
|
var desc = $('#description', Events.eventPanel());
|
||||||
|
|
||||||
$('<div>').text(scene.notification).appendTo(desc);
|
$('<div>').text(scene.notification).appendTo(desc);
|
||||||
@@ -138,10 +138,10 @@ var Events = {
|
|||||||
Events._enemyAttackTimer = Engine.setInterval(Events.enemyAttack, scene.attackDelay * 1000);
|
Events._enemyAttackTimer = Engine.setInterval(Events.enemyAttack, scene.attackDelay * 1000);
|
||||||
},
|
},
|
||||||
|
|
||||||
setPause: function(btn){
|
setPause: function(){
|
||||||
Events.paused = true;
|
Events.paused = true;
|
||||||
$('#event').addClass('paused');
|
$('#event').addClass('paused');
|
||||||
Button.clearCooldown(btn);
|
Button.clearCooldown($('#pause'));
|
||||||
var active = 0;
|
var active = 0;
|
||||||
$('#buttons').find('.button').each(function(i){
|
$('#buttons').find('.button').each(function(i){
|
||||||
if($(this).data('onCooldown')){
|
if($(this).data('onCooldown')){
|
||||||
@@ -190,7 +190,7 @@ var Events = {
|
|||||||
Events.removePause()
|
Events.removePause()
|
||||||
text.text( _('pause.') );
|
text.text( _('pause.') );
|
||||||
} else {
|
} else {
|
||||||
Events.setPause(btn);
|
Events.setPause();
|
||||||
text.text( _('resume.') )
|
text.text( _('resume.') )
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -380,7 +380,7 @@ var Events = {
|
|||||||
|
|
||||||
var attackFn = weapon.type == 'ranged' ? Events.animateRanged : Events.animateMelee;
|
var attackFn = weapon.type == 'ranged' ? Events.animateRanged : Events.animateMelee;
|
||||||
attackFn($('#wanderer'), dmg, function() {
|
attackFn($('#wanderer'), dmg, function() {
|
||||||
if($('#enemy').data('hp') <= 0 && !Events.won) {
|
if($('#enemy').data('hp') <= 0) {
|
||||||
// Success!
|
// Success!
|
||||||
Events.winFight();
|
Events.winFight();
|
||||||
}
|
}
|
||||||
@@ -388,6 +388,32 @@ var Events = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
damage: function(fighter, enemy, dmg) {
|
||||||
|
var enemyHp = enemy.data('hp');
|
||||||
|
var msg = "";
|
||||||
|
if(typeof dmg == 'number') {
|
||||||
|
if(dmg < 0) {
|
||||||
|
msg = _('miss');
|
||||||
|
dmg = 0;
|
||||||
|
} else {
|
||||||
|
msg = '-' + dmg;
|
||||||
|
enemyHp = ((enemyHp - dmg) < 0) ? 0 : (enemyHp - dmg);
|
||||||
|
enemy.data('hp', enemyHp);
|
||||||
|
if(fighter.attr('id') == 'enemy') {
|
||||||
|
World.setHp(enemyHp);
|
||||||
|
}
|
||||||
|
Events.updateFighterDiv(enemy);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(dmg == 'stun') {
|
||||||
|
msg = _('stunned');
|
||||||
|
enemy.data('stunned', Events.STUN_DURATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Events.drawFloatText(msg, $('.hp', enemy));
|
||||||
|
},
|
||||||
|
|
||||||
animateMelee: function(fighter, dmg, callback) {
|
animateMelee: function(fighter, dmg, callback) {
|
||||||
var start, end, enemy;
|
var start, end, enemy;
|
||||||
if(fighter.attr('id') == 'wanderer') {
|
if(fighter.attr('id') == 'wanderer') {
|
||||||
@@ -401,32 +427,8 @@ var Events = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fighter.stop(true, true).animate(start, Events._FIGHT_SPEED, function() {
|
fighter.stop(true, true).animate(start, Events._FIGHT_SPEED, function() {
|
||||||
var enemyHp = enemy.data('hp');
|
|
||||||
var msg = "";
|
|
||||||
if(typeof dmg == 'number') {
|
|
||||||
if(dmg < 0) {
|
|
||||||
msg = _('miss');
|
|
||||||
dmg = 0;
|
|
||||||
} else {
|
|
||||||
msg = '-' + dmg;
|
|
||||||
enemyHp = ((enemyHp - dmg) < 0) ? 0 : (enemyHp - dmg);
|
|
||||||
enemy.data('hp', enemyHp);
|
|
||||||
if(fighter.attr('id') == 'enemy') {
|
|
||||||
World.setHp(enemyHp);
|
|
||||||
}
|
|
||||||
Events.updateFighterDiv(enemy);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(dmg == 'stun') {
|
|
||||||
msg = _('stunned');
|
|
||||||
enemy.data('stunned', true);
|
|
||||||
Engine.setTimeout(function() {
|
|
||||||
enemy.data('stunned', false);
|
|
||||||
}, Events.STUN_DURATION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Events.drawFloatText(msg, $('.hp', enemy));
|
Events.damage(fighter, enemy, dmg);
|
||||||
|
|
||||||
$(this).animate(end, Events._FIGHT_SPEED, callback);
|
$(this).animate(end, Events._FIGHT_SPEED, callback);
|
||||||
});
|
});
|
||||||
@@ -445,33 +447,9 @@ var Events = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$('<div>').css(start).addClass('bullet').text('o').appendTo('#description')
|
$('<div>').css(start).addClass('bullet').text('o').appendTo('#description')
|
||||||
.animate(end, Events._FIGHT_SPEED * 2, 'linear', function() {
|
.animate(end, Events._FIGHT_SPEED * 2, 'linear', function() {
|
||||||
var enemyHp = enemy.data('hp');
|
|
||||||
var msg = "";
|
|
||||||
if(typeof dmg == 'number') {
|
|
||||||
if(dmg < 0) {
|
|
||||||
msg = _('miss');
|
|
||||||
dmg = 0;
|
|
||||||
} else {
|
|
||||||
msg = '-' + dmg;
|
|
||||||
enemyHp = ((enemyHp - dmg) < 0) ? 0 : (enemyHp - dmg);
|
|
||||||
enemy.data('hp', enemyHp);
|
|
||||||
if(fighter.attr('id') == 'enemy') {
|
|
||||||
World.setHp(enemyHp);
|
|
||||||
}
|
|
||||||
Events.updateFighterDiv(enemy);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(dmg == 'stun') {
|
|
||||||
msg = _('stunned');
|
|
||||||
enemy.data('stunned', true);
|
|
||||||
Engine.setTimeout(function() {
|
|
||||||
enemy.data('stunned', false);
|
|
||||||
}, Events.STUN_DURATION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Events.drawFloatText(msg, $('.hp', enemy));
|
Events.damage(fighter, enemy, dmg);
|
||||||
|
|
||||||
$(this).remove();
|
$(this).remove();
|
||||||
if(typeof callback == 'function') {
|
if(typeof callback == 'function') {
|
||||||
@@ -488,7 +466,13 @@ var Events = {
|
|||||||
|
|
||||||
var scene = Events.activeEvent().scenes[Events.activeScene];
|
var scene = Events.activeEvent().scenes[Events.activeScene];
|
||||||
|
|
||||||
if(!$('#enemy').data('stunned')) {
|
var enemy = $('#enemy');
|
||||||
|
var stunning = enemy.data('stunned');
|
||||||
|
|
||||||
|
if(stunning) {
|
||||||
|
stunning -= scene.attackDelay;
|
||||||
|
enemy.data('stunned', Math.max(stunning, 0));
|
||||||
|
} else {
|
||||||
var toHit = scene.hit;
|
var toHit = scene.hit;
|
||||||
toHit *= $SM.hasPerk('evasive') ? 0.8 : 1;
|
toHit *= $SM.hasPerk('evasive') ? 0.8 : 1;
|
||||||
var dmg = -1;
|
var dmg = -1;
|
||||||
@@ -499,23 +483,24 @@ var Events = {
|
|||||||
var attackFn = scene.ranged ? Events.animateRanged : Events.animateMelee;
|
var attackFn = scene.ranged ? Events.animateRanged : Events.animateMelee;
|
||||||
|
|
||||||
attackFn($('#enemy'), dmg, function() {
|
attackFn($('#enemy'), dmg, function() {
|
||||||
if($('#wanderer').data('hp') <= 0) {
|
if($('#wanderer').data('hp') <= 0) {
|
||||||
// Failure!
|
// Failure!
|
||||||
clearTimeout(Events._enemyAttackTimer);
|
Events.loseFight();
|
||||||
Events.endEvent();
|
}
|
||||||
World.die();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
winFight: function() {
|
endFight: function() {
|
||||||
Events.won = true;
|
|
||||||
Events.removePause('end');
|
|
||||||
clearTimeout(Events._enemyAttackTimer);
|
clearTimeout(Events._enemyAttackTimer);
|
||||||
$('#enemy').animate({opacity: 0}, 300, 'linear', function() {
|
Events.removePause('end');
|
||||||
Engine.setTimeout(function() {
|
},
|
||||||
try {
|
|
||||||
|
winFight: function() {
|
||||||
|
if(!Events.lost) {
|
||||||
|
Events.endFight();
|
||||||
|
$('#enemy').animate({opacity: 0}, 300, 'linear', function() {
|
||||||
|
Engine.setTimeout(function() {
|
||||||
var scene = Events.activeEvent().scenes[Events.activeScene];
|
var scene = Events.activeEvent().scenes[Events.activeScene];
|
||||||
var leaveBtn = false;
|
var leaveBtn = false;
|
||||||
var desc = $('#description', Events.eventPanel());
|
var desc = $('#description', Events.eventPanel());
|
||||||
@@ -555,14 +540,19 @@ var Events = {
|
|||||||
$('<div>').addClass('clear').appendTo(exitBtns);
|
$('<div>').addClass('clear').appendTo(exitBtns);
|
||||||
|
|
||||||
Events.allowLeave(takeETbtn, leaveBtn);
|
Events.allowLeave(takeETbtn, leaveBtn);
|
||||||
} catch(e) {
|
}, 1000, true);
|
||||||
// It is possible to die and win if the timing is perfect. Just let it fail.
|
});
|
||||||
}
|
}
|
||||||
}, 1000, true);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
drawDrop:function(btn) {
|
loseFight: function(){
|
||||||
|
Events.lost = true;
|
||||||
|
Events.endFight();
|
||||||
|
Events.endEvent();
|
||||||
|
World.die();
|
||||||
|
},
|
||||||
|
|
||||||
|
drawDrop: function(btn) {
|
||||||
var name = btn.attr('id').substring(5).replace('-', ' ');
|
var name = btn.attr('id').substring(5).replace('-', ' ');
|
||||||
var needsAppend = false;
|
var needsAppend = false;
|
||||||
var weight = Path.getWeight(name);
|
var weight = Path.getWeight(name);
|
||||||
@@ -1049,7 +1039,6 @@ var Events = {
|
|||||||
|
|
||||||
endEvent: function() {
|
endEvent: function() {
|
||||||
Events.eventPanel().animate({opacity:0}, Events._PANEL_FADE, 'linear', function() {
|
Events.eventPanel().animate({opacity:0}, Events._PANEL_FADE, 'linear', function() {
|
||||||
Events.removePause('end');
|
|
||||||
Events.eventPanel().remove();
|
Events.eventPanel().remove();
|
||||||
Events.activeEvent().eventPanel = null;
|
Events.activeEvent().eventPanel = null;
|
||||||
Events.eventStack.shift();
|
Events.eventStack.shift();
|
||||||
|
|||||||
Reference in New Issue
Block a user