Touch Damage for Blizz-ABS
Authors: winkio
Version: 1.11
Type: Misc Add-on
Key Term: Blizz-ABS Plugin
IntroductionWhen you touch an enemy it hurts you. It's as simple as that.
Features
- enemies deal damage when you touch them
- configure damage and variance for each enemy individually
- no effect if you set them to not deal damage
- NEW in 1.10 - touch damage can cause states.
- NEW in 1.11 - fixed bug with Blizz-ABS 2.5 or higher.
Screenshotsno. if you have ever played zelda or any game really, it's the same thing.
ScriptPut below Blizz-ABS part 3, above main
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
# Blizz-ABS Touch Damage by Winkio
# Version: 1.11
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
#
#
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
# This script makes it so that when you touch an enemy, it deals damage to you.
#
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
#==============================================================================
# BlizzABS
#------------------------------------------------------------------------------
# This is the master control, configuration, utility and battle process
# module for Blizz-ABS.
#==============================================================================
module BlizzABS
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# BlizzABS::Enemies
#----------------------------------------------------------------------------
# This module provides enemy configurations.
# when ID then return [DAMAGE, VARIANCE, [STATEID_1, STATEID_2, etc.]]
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
module Enemies
def self.touch_damage(id)
case id
when 1 then return [40, 4, [3]]
end
return [0, 0, 0]
end
end
#============================================================================
# BlizzABS::Processor
#----------------------------------------------------------------------------
# This class provides methods for Blizz-ABS handling.
#============================================================================
class Processor
#--------------------------------------------------------------------------
# update
# Updates Blizz-ABS processes.
#--------------------------------------------------------------------------
alias update_touchd_before update
def update
update_touchd_before
update_touch_damage
end
#--------------------------------------------------------------------------
# update_touch_damage
# Updates Blizz-ABS update_touch_damage.
#--------------------------------------------------------------------------
def update_touch_damage
# iterate through all actors
($BlizzABS.actors + $BlizzABS.pets).each {|actor|
# iterate through all battlers
if actor.valid?
($game_map.battlers + $BlizzABS.battlers).each {|battler|
# if target can be hit considering all conditions
if battler.battler != nil &&
!battler.battler.is_a?(Game_Actor) &&
!battler.battler.dead? && @utils.intersection(
Rect.new(actor.real_x / 4, actor.real_y / 4, 32, 32),
Rect.new(battler.real_x / 4, battler.real_y / 4, 32, 32))
# execute attack
actor.touch_effect(battler, battler.battler)
end}
end}
end
end
end
#==============================================================================
# ** Game_Battler (part 3)
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Applying Normal Attack Effects
# attacker : battler
#--------------------------------------------------------------------------
def touch_effect(attacker)
self.critical = false
touchdata = BlizzABS::Enemies.touch_damage(attacker.id)
return false if touchdata[0] == 0
if touchdata[1] > 0
self.damage = [touchdata[0]+rand(touchdata[1])-rand(touchdata[1]), 0].max
end
if self.damage != 0
# State Removed by Shock
remove_states_shock
# Substract damage from HP
self.hp -= self.damage
# State change
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
states_plus(touchdata[2]) if touchdata[2]
return true
end
return false
end
end
#==============================================================================
# Map_Actor
#------------------------------------------------------------------------------
# This class handles a map enemy character. It supports pixel movement,
# complete AI handling, advanced sprite handling and battle handling.
#==============================================================================
class Map_Actor < Map_Battler
#----------------------------------------------------------------------------
# touch_effect
# character - the character that holds attack data (can be projectile)
# _battler - the attacking battler
# This method executes attack upon a map character.
#----------------------------------------------------------------------------
def touch_effect(character, _battler)
# stop attack if no battler assigned or still invincible
return false if @battler == nil || @blinking != nil && @blinking > 0
# stop attack if pressing CTRL in debug mode
return false if $DEBUG && @ai.group != 0 && Input.press?(Input::CTRL)
# if defending
if BlizzABS::Config::FULL_DEFEND && @ai.act.defend?
# set attacked counter
self.attacked = $BlizzABS.pixel
# request damage sprite
$BlizzABS.utils.request_damage_sprite(self, BlizzABS::Cache::TXTDefend)
# not executed
return false
end
# needed for defend emulation
@battler.current_action.kind = 0
# set own battler's action as defend action if necessary
@battler.current_action.basic = (@ai.act.defend? ? 1 : 0)
# reset hpdamage and spdamage
@battler.hpdamage, @battler.spdamage = 0, 0
# State Removed by Shock
result = @battler.touch_effect(_battler)
if result
# apply basic effects
apply_action_effect(_battler)
# request damage sprite
$BlizzABS.utils.request_damage_sprite(self)
# remove damage
@battler.damage, @battler.damage_pop = nil, false
end
# send data to obeserver if attacked by actor
$BlizzABS.AI.observe(_battler, @battler.damage) if _battler.is_a?(Game_Actor)
# delete own charge data if executed
@charge = nil if result
# return result
return result
end
end
Instructionsconfigure in the code under the enemies module
Compatibilityshouldn't have any problems at all
Credits and Thanks
Author's NotesHave fun with it.
It would be databased except that "<TELL US SOMETHING ABOUT YOUR SCRIPT>" isn't what you'd call an introduction to your script.
XD I was in a hurry.
lol. Thanks for taking the time to do that, Winkio. Happily databased.
This is a good add-on...
Great script Winkio, I already have a use for this in my game!
Now can you add events to this!?
Can you make special events take place instead of damage??
it is possible, but I'm not scripting it in. What you would do is change this line:
actor.touch_effect(battler, battler.battler)
to execute whatever event you want. I assume you plan to do this for the zombie game?
this is cool. power up
Yes, I do...
Does the BABS system nullify the event codes of enemies?
*powers up*
This'd be really useful for those classic games where monsters seem to have spikes or poison or something all over them. :D
<333
when i run into a enemy i get an error
Script 'Touch Damage for Blizz-ABS 1.0' line 103: TypeError occurred
nil can't be coerced into Fixnum
and on that line i have
self.hp -= self.damage
and incase if it matters, i'm using SDK version 1.5
Yeah it's probably the SDK System messing with it. SDK tends to do that :roll:
Unless you don't have this script below BABS
There is definitely a conflict with one of your other scripts. SDK I guess. Or if you have anything else that drastically modifies game_battler...
Quote from: winkio on February 24, 2009, 06:51:08 pm
There is definitely a conflict with one of your other scripts. SDK I guess. Or if you have anything else that drastically modifies game_battler...
well there's Tons but i doubt it, i havn't turned on any addons yet, if only i had an Al Bhed Script like Seph's i wouldn't need the bloody SDK
Is there a way to make it do a skill instead of a damage?
if you mod this script. That would be a totally different script though. I am only duplicating the basic touch damage that we all know. I might add states later, but thats about it.
Yeah, that's the main reason why I wanted the skills because of States. :P
once Blizz eventually updates when enemies can execute their code, youll be able to event whatever you want. I'll add states in when I get some time, just wait.
EDIT: lol, hooray for adding one line of code and changing the config! v1.10: states.
Thanks Winkio <3
*Powers Up*
I would like the option to turn off blockable touch damage.. like rolling stones, or fire and such.
I get an error message after having updated to blizz abs v2.53
(http://img300.imageshack.us/img300/2198/touchdmgscripterror.png)
Corrupted savegame.
No tha can't be the problem, I started a new game, since the old savegames was already incompatible with the update to blizz abs 2.53.
# stop attack if pressing CTRL in debug mode
return false if $DEBUG && @ai.basic != 0 && Input.press?(Input::CTRL)
(The last line there is line 138)
Right. Since Blizz-ABS now uses groups it's not "@ai.basic" but "@ai.group". I'll edit the first post.
Yay ^^ it works. Thanks blizz.
It just came to my mind that this add-on kind of loses its purpose after I added Custom Event Triggers. >.<
yeah, I didn't update this for a reason. It's outdated. Sometime, when I have nothing else to do, I'll make it an actual system with more features. But it was really a quick fix that became outdated because of Blizz's updates (a good thing, by the way).
When I move onto a map with enemies this error occurs:
Script 'Touch Damage' line 68: NoMethodError occurred.
undefined method 'intersection' for nil:NilClass
On that line I have:
!battler.battler.dead? && @utils.intersection(
I am using Blizz-ABS version 2.84.
bump?
Quote from: Blizzard on August 16, 2009, 12:01:51 pm
It just came to my mind that this add-on kind of loses its purpose after I added Custom Event Triggers. >.<
Quote from: winkio on August 16, 2009, 05:44:02 pm
yeah, I didn't update this for a reason. It's outdated. Sometime, when I have nothing else to do, I'll make it an actual system with more features. But it was really a quick fix that became outdated because of Blizz's updates (a good thing, by the way).
This script doesn't work because the feature was built into Blizz-ABS. I will remake it and add more features eventually.
Thanks. I think I have it figured out now. Just got to try it.
But wait. If I use custom event triggers for touch damage, I won't be able to use them for triggering events once you kill the enemy or other similiar stuff, right?
Quote
Script ' ' line 68 NoMethodError occurred.
undefined method 'intersection' for nil:NilClass
Got this as I entered a map with an enemy on it. The enemy has ID1 and the script is set to deal touch damage with enemy ID1
Try replacing (CTRL + H) utils with util.
The game didn't crash once entering the map like before. However, I did get this when I touched the enemy:
Quote
Script 'Blizz-ABS Touch Damage' line 153: NoMethodError occurred.
undefined method 'apply_action_effect' for #<Game_Player:0x691d738>
Hmm...I guess BlizzABS has made too many changes since the time of this script. It needs to be updated.