[XP] Touch Damage for Blizz-ABS

Started by winkio, February 14, 2009, 05:46:52 pm

Previous topic - Next topic

winkio

February 14, 2009, 05:46:52 pm Last Edit: December 28, 2010, 07:35:35 pm by game_guy
Touch Damage for Blizz-ABS
Authors: winkio
Version: 1.11
Type: Misc Add-on
Key Term: Blizz-ABS Plugin



Introduction

When 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.



Screenshots
no.  if you have ever played zelda or any game really, it's the same thing.



Script

Put 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



Instructions

configure in the code under the enemies module


Compatibility

shouldn't have any problems at all


Credits and Thanks


  • Blizzard's ABS
  • winkio



Author's Notes
Have fun with it.

shdwlink1993

It would be databased except that "<TELL US SOMETHING ABOUT YOUR SCRIPT>" isn't what you'd call an introduction to your script.
Stuff I've made:




"Never think you're perfect or else you'll stop improving yourself."

"Some people say the glass is half full... some half empty... I just wanna know who's been drinking my beer."

winkio


shdwlink1993

lol. Thanks for taking the time to do that, Winkio. Happily databased.
Stuff I've made:




"Never think you're perfect or else you'll stop improving yourself."

"Some people say the glass is half full... some half empty... I just wanna know who's been drinking my beer."

Calintz


legacyblade

Great script Winkio, I already have a use for this in my game!

Calintz

Now can you add events to this!?
Can you make special events take place instead of damage??

winkio

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?

G_G


Calintz

Yes, I do...
Does the BABS system nullify the event codes of enemies?

Reno-s--Joker

*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

Memor-X

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

Landith

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

winkio

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...

Memor-X

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

Landith

Is there a way to make it do a skill instead of a damage?

winkio

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.

Landith

Yeah, that's the main reason why I wanted the skills because of States.  :P

winkio

March 07, 2009, 10:26:44 pm #18 Last Edit: March 07, 2009, 10:59:41 pm by winkio
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.

Landith


Kagutsuchi

I would like the option to turn off blockable touch damage.. like rolling stones, or fire and such.

Kagutsuchi

I get an error message after having updated to blizz abs v2.53

Spoiler: ShowHide

Blizzard

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Kagutsuchi

May 10, 2009, 11:49:01 am #23 Last Edit: May 10, 2009, 12:08:19 pm by Kagutsuchi
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)

Blizzard

Right. Since Blizz-ABS now uses groups it's not "@ai.basic" but "@ai.group". I'll edit the first post.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Kagutsuchi


Blizzard

It just came to my mind that this add-on kind of loses its purpose after I added Custom Event Triggers. >.<
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

winkio

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).

Boba Fett Link

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.
This post will self-destruct in 30 seconds.

Boba Fett Link

This post will self-destruct in 30 seconds.

winkio

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.

Boba Fett Link

Thanks. I think I have it figured out now. Just got to try it.
This post will self-destruct in 30 seconds.

Boba Fett Link

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?
This post will self-destruct in 30 seconds.

MarkHest

December 24, 2013, 07:38:09 pm #33 Last Edit: December 24, 2013, 07:39:36 pm by MarkHest
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
   

KK20

Try replacing (CTRL + H) utils with util.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

MarkHest

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>
   

KK20

Hmm...I guess BlizzABS has made too many changes since the time of this script. It needs to be updated.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!