Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Swimming Script!

I've been talking to MrMo, I guess he will try to fix this stuff sometime to make it more compatible, but yeah I noticed the same double suffix error as well.
 
half done...**feels offened**:(
lol jk I'm so not done
I can do that....probably do that...I think...lol if I had a diving animation (the splash)...wanna make one :DXD?
 
I've just noticed, that if swimming isn't available, you just walk all over water with your normal sprite XD lol just letting you all know I'm aware of the bug and i'll be fixing it soon.

Which is better:
Can't go in the water
or
Jumps in, screen flashes red and you get a gameover?

***When Swimming isn't available I mean***lol
 
God thank you ...When I saw the swiming graphic I said : Looks like a Flying Super Guy o.0 My next game will be Super Man X-Rays..j/k...But I love this script anyway ...Keep up the good work and you'l be alright :P
 
Yeah I guess I could add more but I'm out of ideas. There's really nothing more I can do about the incompatibility with graphic changes that would apply to everyone. If you have other suggestions, I'll see what I can do.

EDIT:: Oh right diving...hmm...i'll look at it
 
Hey I've come across a huge error. I took the script out because it is causing ALL of MrMo's animations in the ABS to no show, instead it is just the character walking. When it is out though, all the player graphics disappear, why is this happening? Please try to fix it, thanks.
~Axerax~

EDIT: I am using 1.7 now, apparently it was a bug with 1.5. So far it has worked fine for me.
 

haln

Member

This script is really awesome! I took a look at the thread, and the script, and I wanted to suggest something.

It would be cool if you could press a certain button, say, alt, or any other button, then you would dive under the water. You could have the entire character turn transparent, and make it so if you don't come back up for air after a bit, you faint, or die, or something.

Also, if you do something like this, it would be good to make it a choice, some people might not like the idea of dieing, xD.
 
To second his idea, I think placing a dive timer above the character would work well... so like it says 3... 2... 1.. DROWNING!.. etc it would make it more realistic.
 
Axerax":21jed3f6 said:
1.. DROWNING!.. etc it would make it more realistic.
yeah i agree can you do this and im having a problem
http://img249.imageshack.us/img249/4746/83799681gi3.png[/img]
 
This is definitaly a useful script, I especially like the drowning, that way you can have a skill the player has to learn to swim, or earn it another way. I am having problems setting this script up. I have my water tile set to passable in all directions, and the terrain tag set to 7. I have the [character name]_dive, and [character name]_swim sprites, inside of my characters folder. I have the drown, and swim SEs inside of the folder, with the correct names. But, my character can walk into the water without drowning, even with the swim switch off, the character sprites won't change for diving, and swimming, and no SEs go off, and I have my volume high. I made sure I am using the actual water tile on my map. I have the water on layer one with no events, or anything on the other layers, above the water tile. It's like the script doesn't even exist in my project, even though it's there. Here is the script:
Code:
#==============================================================================#
#  Swimming!  v 1.8                                                          #
#  By: ToriVerly @ rmxp.org                                                    #
#==============================================================================#
#  Intructions:                                                                #
#------------------------------------------------------------------------------#
=begin
 Paste this script above Main and below everything else.
 For each character you will have swimming, make a swimming sprite that has the
 same name as the character but ending with "_swim" and another with "_dive" if
 DIVE_GRAPHIC is true.
    Example: "001-Fighter01_swim.png"
 
 If TREAD_ANI = true, the character will be animated while in water when they are
 not moving.  Hence a treading water effect.  Set it to false if you don't want 
 the effect.
 
 Set the WATER constant to the terrain tag ID of your water tiles or whatever tile
 you want to swim through.  When you place non water tiles over water tiles (in 
 a higher layer), the non water tiles will need to have a terrain tag that is
 different than WATER and not 0 or else the characters is swim through it.
 
    IMPORTANT--->make sure your water tile is passable.
 
 If you want the ability to swim to depend on a switch, set SWIM_SWITCH to the ID
 of the game switch you're using. If you don't want to use a switch, set it to nil.
 Similarily, set SWIM_ITEM, SWIM_ARMOR or SWIM_WEAPON to the ID of the item, armor
 or weapon required for swimming and nil if there is none.  You can even set more
 than one condition!
 
 The SWIM_SE will play every time you jump into water.  If you don't want a sound,
 set DIVE_SOUND_OFF to true.
 
 The SNEAK_KEY and DASH_KEY functions can be set for Mr.Mo's ABS or an input
 letters script.  If you don't have such an input system but have another dashing
 and/or sneaking system/script, change them to Input::YourKey.
     Example: Input::X
              Input::Y
 If you don't have dashing or sneaking at all, set them to nil.
 WATER_DASHING is self explanitory.  If you want to dash in water, set it to true.
 If DROWNING is on, the player will have about three seconds to get out of water
 before they die (if swimming isn't available). If it is off, water will just be
 impassable.
 Enjoy!
=end
#------------------------------------------------------------------------------#
WATER = 7
SWIM_SWITCH = 28
SWIM_ITEM = nil
SWIM_ARMOR = nil
SWIM_WEAPON = nil
SNEAK_KEY = nil #Input::Letterres["Z"] for Mr.Mo's ABS or input letters script
DASH_KEY = nil #Input::Letters["X"] for Mr.Mo's ABS or input letters script
SWIM_SE = "022-Dive02"
DROWN_SE = "128-Water03"
DROWNING = true
WATER_DASHING = false
DIVE_SOUND_OFF = false
DIVE_GRAPHIC = true
TREAD_ANI = true
#------------------------------------------------------------------------------#

#==============================================================================#
# Game_Player                                                                  #
#------------------------------------------------------------------------------#
# Modifies the Game_Player class initialization and updating                   #
#==============================================================================#
class Game_Player < Game_Character
  attr_reader   :swim
  attr_reader   :swimming?
  attr_reader   :swim_count
  alias swim_init initialize
  def initialize
    @swim = false
    @drown_count = 0
    @swim_count = 0
    swim_init
  end
  alias swim_update update
  def update

    # Checks if swimming is triggered
    if DROWNING == true
    return jump_in if facing?(WATER, 'any', 1) and !@swim and moving?
    # Drowns if it is not available
    drown if !swim_available? and on?(WATER)
    elsif DROWNING == false
    return jump_in if facing?(WATER, 'any', 1) and !@swim and moving? and swim_available?
    end
    
    # Jumps out of water at shore
    jump_forward if !on?(WATER) and !facing?(WATER, 'any', 1) and !facing?(WATER, 'any', 2) and @swim and moving?
    # Returns original settings when out of water 
    revert if @swim and !on?(WATER)
    
    # Refreshes swimming state
     swim_refresh if swimming?
  swim_update
end

    # Makes water impassable when swimming isn't available
  alias mrmo_swim_game_player_passable passable?
  def passable?(x, y, d)
    # Get new coordinates
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    # Check if it water tag
    return false if $game_map.terrain_tag(new_x,new_y) == WATER and !swim_available? and DROWNING == false
    # Old Method
    mrmo_swim_game_player_passable(x,y,d)
  end
#------------------------------------------------------------------------------#
# Custom Methods                                                               #
#------------------------------------------------------------------------------#
  # Checks swimming availability
  def swim_available?
     if SWIM_SWITCH != nil
      return true if $game_switches[SWIM_SWITCH]
      return false if !$game_switches[SWIM_SWITCH]
     end
     if SWIM_ITEM != nil
       return true if $game_party.item_number(SWIM_ITEM) != 0
       return false if $game_party.item_number(SWIM_ITEM) == 0
     end
     if SWIM_ARMOR != nil
       return true if $game_party.actors[0].armor1_id == SWIM_ARMOR
       return true if $game_party.actors[0].armor2_id == SWIM_ARMOR
       return true if $game_party.actors[0].armor3_id == SWIM_ARMOR
       return true if $game_party.actors[0].armor4_id == SWIM_ARMOR
       return false
     end
     if SWIM_WEAPON != nil
       return true if $game_party.actors[0].weapon_id == SWIM_WEAPON
       return false
     end
     return true
   end
    
  # Jumps in the water if swimming is triggered
  def jump_in
    @swim = true
    unless DIVE_SOUND_OFF
     @play_sound = true
    end
   if DIVE_GRAPHIC == true
    @character_name = $game_party.actors[0].character_name
    @character_name = $game_party.actors[0].character_name + "_dive"
   end
   jump_forward if facing?(WATER, 'any', 1)
  end
  
  # Swimming setup
  def swim_refresh
      get_speed if moving?
      if !moving?
        @character_name = $game_party.actors[0].character_name
        @character_name = $game_party.actors[0].character_name + "_swim"
      end
      if @play_sound and !moving?
         Audio.se_play("Audio/SE/" + SWIM_SE , 80, 100)
         @play_sound = false
      end
         @swim = true
      if TREAD_ANI == true
         @step_anime = true
       end
     end
     
  # Drowning
  def drown
    @move_speed = 0.1
    if @drown_count <= 120
      #jump_in if !@swim
      @drown_count += 1
        if @drown_count %40 == 0
          Audio.se_play("Audio/SE/" + DROWN_SE, 80, 100)
        end
      elsif @drown_count >= 120
      @character_name = ""
      @drown_count = 0
      Audio.se_play("Audio/SE/" + SWIM_SE, 80, 100)
     $scene = Scene_Gameover.new
    end
  end
  
  # Reverts original settings when out of water
  def revert
      @character_name = $game_party.actors[0].character_name
      @swim = false
      @drown_count = 0
        unless dashing? or sneaking?
         @move_speed = 4
         @move_frequency = 6
        end
       if TREAD_ANI == true
       @step_anime = false
     end
   end
   
  # Determines Speed (Swim Leveling)
  def get_speed
    # Gets Swim Count
      @swim_count += 0.05
    case @swim_count
    when 0.05
      @swim_speed = 1
      @move_frequency = 1
    when 100
      @swim_speed =  2
      @move_frequency = 1
    when 250
      @swim_speed = 3
      @move_frequency = 1
    when 750
      @swim_speed = 4
      @move_frequency = 1
    when 2000
      @swim_speed = 5
      @move_frequency = 1
    end
    @move_speed = @swim_speed
      if WATER_DASHING == true
          if DASH_KEY != nil and Input.press?(DASH_KEY) and !sneaking?
           @move_speed = @swim_speed + 1
           @move_frequency = 6
          end
          if SNEAK_KEY != nil and Input.press?(SNEAK_KEY) and !dashing?
           @move_speed = @swim_speed -1
           @move_frequency = 2
         end
       end
     end
  
# Jumps forward
  def jump_forward
  case @direction
      when 2
        jump(0, 1)
      when 4
        jump(-1, 0)
      when 6
        jump(1, 0)
      when 8
        jump(0, -1)
      end
    end
  # Jumps backward
  def jump_backward
    case @direction
      when 2
        jump(0, -1)
      when 4
        jump(1, 0)
      when 6
        jump(-1, 0)
      when 8
        jump(0, 1)
      end
    end

  # Checks if dashing
  def dashing?
    return true if DASH_KEY != nil and Input.press?(DASH_KEY)
    return false if SNEAK_KEY != nil and Input.press?(SNEAK_KEY)
  end
  # Checks if sneaking
  def sneaking?
    return true if SNEAK_KEY != nil and Input.press?(SNEAK_KEY)
    return false if DASH_KEY != nil and Input.press?(DASH_KEY)
  end
  # Checks if swimming
  def swimming?
    return true if on?(WATER) and @swim
  end
  # Checks if player is on a terrain tag
  def on?(tag)
    return true if $game_map.terrain_tag($game_player.x, $game_player.y) == tag
  end
  # Checks if player is facing a terrain tag
  def facing?(tag, dir, dist)
    case dir
     when 2
       if $game_player.direction == 2
        tag_x = $game_player.x
        tag_y = $game_player.y + dist
      end
     when 4
       if $game_player.direction == 4
        tag_x = $game_player.x - dist
        tag_y = $game_player.y
       end
     when 6
       if $game_player.direction == 6
        tag_x = $game_player.x + dist
        tag_y = $game_player.y
       end
     when 8
       if $game_player.direction == 8
        tag_x = $game_player.x
        tag_y = $game_player.y - dist
      end
     when 'any'
       if $game_player.direction == 2
        tag_x = $game_player.x
        tag_y = $game_player.y + dist
      end
       if $game_player.direction == 4
        tag_x = $game_player.x - dist
        tag_y = $game_player.y
      end
       if $game_player.direction == 6
        tag_x = $game_player.x + dist
        tag_y = $game_player.y
      end
      if $game_player.direction == 8
        tag_x = $game_player.x
        tag_y = $game_player.y - dist
      end
    end
   return false if tag_x == nil or tag_y == nil
   return true if $game_map.terrain_tag(tag_x, tag_y) == tag
 end
end
#------------------------------------------------------------------------------#
# By ToriVerly
# Thanks to Mr.Mo for help with my passability issues and to Chaosg1 for my intro
# into scripting :)
#------------------------------------------------------------------------------#

Please could you help me with these issues setting up?
 

Mcdohl

Member

how could i make it possible so everytime you move in the water a sound effect is played?

Dont necropost, make a new thread if its a must c:
 

Mcdohl

Member

sorry man, I found out anyway.

In case anyway wants to know, just make it a common event in parallel that is constantly checking the terrain tag in a conditional branch and if a directional key is being pressed, and of course at a wait 20 after the sound to avoid uber loops
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top