Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Dienstag, 12. Februar 2013, 20:09

Problem mit Terrain Types

Hallo,
ich hab ein Problem mit dem Terrain Types Skript von modern algebra.
Spoiler
#==============================================================================
# Terrain Types
# Version: 1.0
# Author: modern algebra (rmrk.net)
# Date: August 18, 2009
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
#
# This script restores the Terrain Types of RM2k3. Not only does this
# include a restoration of terrain tags (from XP), but it gives special
# settings that apply to tiles with those IDs. They are numerous, but just
# some of the features are:
# Scrolling Background (and Foreground) images for battle, depending on
# the terrain type you are standing on
# Encounter Multiplier for certain terrain types, so that encounters can
# be more or less frequent depending on the terrain
# Footstep Sound Effects that apply not only to players, but to events
# as well (if you specify that they should). Further, the footsteps of
# events increase in volume as they approach the player and decrease
# in volume as they move away from the player.
# Terrain types that can hurt (or heal) the player when they step on
# it.
# Walking Speed can be influenced by the type of terrain
# You can set some terrains to disable dashing
# You can set some terrains to prevent airship landing and others to
# allow it. Perfect for Airports!
# And much more. Read Editable Region B at line xx for more details.
#
# Beware though, this script is VERY configuration heavy. Read the
# instructions fully if you would like to use this script.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Instructions:
#
# Place this script above Main and below Materials in the Script Editor.
#
# For instructions on configuring this script (which NEEDS to be done and is
# not easy), please see the editable regions at lines 99, 131, and 250
#
# To set the terrain tag of a tile to a variable, use these codes in a call
# script:
#
# terrain_tag (variable_id, x, y)
# variable_id : the ID of the variable you are setting to terrain tag
# x, y : the coordinates of the tile whose terrain tag you want
#
# terrain_tag (variable_id, character_id)
# variable_id : the ID of the variable you are setting to terrain tag
# character_id : the ID of the character who is standing on the tile you
# want to retrieve the tag from. -1 => Player;
# 0 => This Event; >0 => event ID
#
# Setting up events can also be tricky. There are a few comment codes you
# can use.
#
# \PlayFootstep[x]
# Means that when the event moves, it will play the footstep sound that it
# ought to and have a radius of x. So, if it's walking over a tile that has a
# sound effect, it will play that sound effect, and you will hear it if you're
# within x radius. But that's to distinguish events that shouldn't be making
# footstep sounds, like a flying unit or an invisible tile (unless it's an
# invisible enemy). It will play the right footstep SE for the tile it is on
# though
#
# \TerrainTag[x]
# Means that the event overwrites the map terrain tag. So if the tile
# terrain tag is 5, then putting an event on top of it with this code means
# that the terrain tag of that tile will return x instead. This is just if you
# want some special effect for one tile, but you don't want to set a different
# tile, or if it's a sprite, or whatever.
#
# \SelfOnlyTT[x]
# means that the terrain tag X is set, but it applies only to this event.
# So, for instance the three rocks in the demo, which I wanted to make
# semi-transparent. However, I don't want the player to be totally
# semi-transparent when he steps on that tile. So basically, SelfOnlyTT means
# that that event always has a special terrain tag that applies only to itself.
#
# \NoUpdate
# Is to reduce lag. Basically, if you are setting events for the sole
# purpose of altering the terrain tag of a tile, then it's an unnecessary
# source of lag when that event continues updating. NoUpdate prevents the
# event from being updated
#==============================================================================

#==============================================================================
# *** ModernAlgebra Configuration
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Here is where data for the terrain objects is set up
#==============================================================================

module ModernAlgebra
# Initialize Tilesets with tags of 0
TT_TILE_A = Table.new (256)
TT_TILE_B = Table.new (256)
TT_TILE_C = Table.new (256)
TT_TILE_D = Table.new (256)
TT_TILE_E = Table.new (256)
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# EDITABLE REGION A
#``````````````````````````````````````````````````````````````````````````
# Set the maximum number of terrain types you want here. If you set
#
# TT_MAX_TERRAIN_TAGS = 20
#
# then you have a maximum of 20 terrain types possible.
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TT_MAX_TERRAIN_TAGS = 20
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END EDITABLE REGION A
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Setup Terrain
# id : the ID of the terrain type
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def self.setup_terrain (id)
# Set Default Values
name = ""
damage = 0
incapacitation_allowed = false
encounter_multiplier = 100
se_name, se_volume, se_pitch = "", 100, 100
play_se_only_when_damaged = false
boat_can_pass, ship_can_pass, airship_can_pass, airship_can_land = nil, nil, nil, nil
sprite_display = -1
background_graphic, background_scroll_x, background_scroll_y = "", 0, 0
foreground_graphic, foreground_scroll_x, foreground_scroll_y = "", 0, 0
initiative_chance, ambush_chance = -1, -1
disable_dash, walk_speed = false, 4
case id
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# EDITABLE REGION B
#``````````````````````````````````````````````````````````````````````
# This is where you setup the features of each terrain type. Setup
# follows this format:
#
# when <terrain_id>
# name = "" : The name of this terrain type. The code \nt[x], when
# used in a message, will call the name of the terrain
# being stepped on by character x. -1 => Player;
# 0=> This event; >0 => event with that ID
# damage = 0 : damage the terrain does to player when moving on it. If
# you set damage to be a string (such as "4"), then damage
# is determined by the value of the variable with that ID.
# incapacitation_allowed = false : truth value of whether terrain
# damage can kill your actors
# encounter_multiplier = 100 : percentage multiplier of how much
# this terrain increases likelihood of
# encounters. 100% is no change
# se_name = "" : name of SE played when walking on this terrain
# se_volume = 100 : volume of SE played when walking on this terrain
# se_pitch = 100 : pitch of SE played when walking on this terrain
# play_se_only_when_damaged = false : truth value of whether SE
# should be played only when an
# actor has been damaged by it.
# The boat, ship, & airship values default to the normal passability if
# they are not set.
# boat_can_pass : truth value of whether a boat can pass this tile
# ship_can_pass : truth value of whether a ship can pass this tile
# airship_can_pass : truth value of whether an airship can pass this
# tile
# airship_can_land : truth value of whether an airship can land on
# this tile
# sprite_display = -1 : this can determine bush depth. -1 => defaults
# to regular bush control. 1 => bottom 1/3 of
# sprite semi-transparent. 2 => bottom 1/2 of
# sprite semi-transparent. 3 => whole sprite
# semi-transparent. >3 => that many of the
# bottom pixels semi-transparent.
# If the background and foreground values are not changed, the battle
# background will be the RMVX default one
# background_graphic = "" : name of background graphic in battle.
# background_scroll_x = 0 : speed of background's horizontal scroll
# background_scroll_y = 0 : speed of background's vertical scroll
# foreground_graphic = "" : name of foreground graphic in battle.
# foreground_scroll_x = 0 : speed of foreground's horizontal scroll
# foreground_scroll_y = 0 : speed of foreground's vertical scroll
# initiative_chance = 0 : chance for party surprise attack when on
# this terrain
# ambush_chance = 0 : chance for enemy surprise attack when on
# this terrain
# disable_dash = false : truth value on whether dash is disabled
# on this terrain
# walk_speed = 4 : walking speed on this terrain
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
when 1 # Plains
name = "Plains"
when 2 # Wasteland
name = "Wasteland"
encounter_multiplier = 150
foreground_graphic = "mountain"
background_graphic = "CloudySky"
background_scroll_x = 3
when 3 # Desert
name = "Desert"
airship_can_land = false # Airship can't land
when 4 # Snow
name = "Snow"
airship_can_land = false # Airship can't land
when 5 # Tall Grass
name = "Tall Grass"
encounter_multiplier = 200
ambush_chance = 20
sprite_display = 12
airship_can_land = false # Airship can't land
disable_dash = true
when 6 # Safe Ground
name = "Safe Ground"
encounter_multiplier = 0
when 7 # Shallow Water
name = "Shallow Water"
ship_can_pass = false
when 8 # Deep Water
name = "Deep Water"
when 9 # Waterfall
name = "Waterfall"
when 10 # Lava
name = "Lava"
damage = 25
walk_speed = 2
se_name = "Fire2"
se_volume = 80
sprite_display = 1
incapacitation_allowed = true
airship_can_land = false # Airship can't land
when 11 # Forest
when 12 # Mountains
airship_can_pass = false # Airship can't pass
airship_can_land = false # Airship can't land
when 13 # Full Transparency
sprite_display = 3
when 14 # Flame Monster
se_name = "Fire2"
when 15 # Airport
airship_can_pass = true
airship_can_land = true
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END EDITABLE REGION B
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
end
stats = [name, damage, incapacitation_allowed, encounter_multiplier]
stats.push (se_name, se_volume, se_pitch, play_se_only_when_damaged)
stats.push ([boat_can_pass, ship_can_pass, airship_can_pass, airship_can_land])
stats.push (sprite_display)
stats.push (background_graphic, background_scroll_x, background_scroll_y)
stats.push (foreground_graphic, foreground_scroll_x, foreground_scroll_y)
stats.push (initiative_chance, ambush_chance, disable_dash, walk_speed)
return stats
end
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# EDITABLE REGION C
#``````````````````````````````````````````````````````````````````````````
# Here is where you can set up what tiles are associated with what terrain
# If you do not give a tile a terrain, then it will behave as it would if
# this script were not included in your project.
#
# For each Tileset (A, B, C, D, E), there are 256 tiles, each of which
# can be given a unique terrain tag.
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TT_TILE_A[0] = 7
TT_TILE_A[16] = 1 # World Plains
TT_TILE_A[17] = 11 # World Plains Trees
TT_TILE_A[18] = 12 # World Plains Mountains
TT_TILE_A[19] = 1 # Plains Ground
TT_TILE_A[20] = 5 # Plains Tall Grass
TT_TILE_A[22] = 6 # Safe Ground
TT_TILE_A[24] = 2 # World Wasteland
TT_TILE_A[25] = 11 # World Wasteland Trees
TT_TILE_A[26] = 12 # World Wasteland Mountains
TT_TILE_A[27] = 2 # Wasteland Ground
TT_TILE_A[28] = 5 # Wasteland Grass
TT_TILE_A[30] = 6 # Safe Ground
TT_TILE_A[32] = 3 # World Desert
TT_TILE_A[33] = 11 # World Desert Trees
TT_TILE_A[34] = 12 # World Desert Mountains
TT_TILE_A[35] = 3 # Desert Ground
TT_TILE_A[36] = 5 # Desert Tall Grass
TT_TILE_A[38] = 6 # Safe Ground
TT_TILE_A[40] = 4 # World Snow
TT_TILE_A[41] = 11 # World Snow Trees
TT_TILE_A[42] = 12 # World Snow Mountains
TT_TILE_A[43] = 4 # Snow Ground
TT_TILE_A[44] = 5 # Snow Tall Grass
TT_TILE_A[46] = 6 # Safe Ground
TT_TILE_A[112] = 12 # Mountain
TT_TILE_A[120] = 12 # Mountain
TT_TILE_A[147] = 1
TT_TILE_A[178] = 10 # Lava
TT_TILE_A[202] = 10 # Lava
TT_TILE_A[226] = 10 # Lava
TT_TILE_B[250] = 15 # Airport
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END EDITABLE REGION C
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
end

#==============================================================================
# ** Data Terrain
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This holds the data for each terrain object
#==============================================================================

class Data_Terrain
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :id # ID of terrain object
attr_reader :name # The name of this terrain type
attr_reader :incapacitation # Boolean if terrain can kill actors
attr_reader :encounter_mult # Percentage increased likelihood of encounters
attr_reader :se # Footstep SE
attr_reader :play_when_dmg # Boolean, play SE only if damaged
attr_reader :boat_can_pass
attr_reader :ship_can_pass
attr_reader :airship_can_pass
attr_reader :airship_can_land
attr_reader :sprite_display # Sprite Display properties
attr_reader :bg_graphic # The background graphic for battles
attr_reader :bg_scroll_x # The speed of horizontal scrolling for bg
attr_reader :bg_scroll_y # The speed of vertical scrolling for bg
attr_reader :fg_graphic # The foreground graphic for battles
attr_reader :fg_scroll_x # The speed of horizontal scrolling for fg
attr_reader :fg_scroll_y # The speed of vertical scrolling for fg
attr_reader :surprise_chance # Chance to be ambushed on this terrain
attr_reader :preemptive_chance # Chance to surprise enemy on this terrain
attr_reader :disable_dash # Whether dash is disabled on this tile
attr_reader :walk_speed # The walking speed on this tile
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
# id : the ID of the terrain tag assigned to this Data_Terrain
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (id)
@id = id
terrain_stats = ModernAlgebra.setup_terrain (id)
@name = terrain_stats[0]
@damage = terrain_stats[1]
@incapacitation = terrain_stats[2]
@encounter_mult = terrain_stats[3]
@se = RPG::SE.new (terrain_stats[4], terrain_stats[5], terrain_stats[6])
@play_when_dmg = terrain_stats[7]
@boat_can_pass = terrain_stats[8][0]
@ship_can_pass = terrain_stats[8][1]
@airship_can_pass = terrain_stats[8][2]
@airship_can_land = terrain_stats[8][3]
@sprite_display = terrain_stats[9]
@bg_graphic = terrain_stats[10]
@bg_scroll_x, @bg_scroll_y = terrain_stats[11], terrain_stats[12]
@fg_graphic = terrain_stats[13]
@fg_scroll_x, @fg_scroll_y = terrain_stats[14], terrain_stats[15]
@surprise_chance, @preemptive_chance = terrain_stats[16], terrain_stats[17]
@disable_dash, @walk_speed = terrain_stats[18], terrain_stats[19]
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Damage
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def damage
return @damage.is_a? (String) ? $game_variables[@damage.to_i] : @damage
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Flash Colour
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def flash_colour
return @flash_colour unless @flash_colour.nil?
r = [[150 + (damage*10), 0].max, 255].min
b = [[150 - (damage*10), 0].max, 255].min
@flash_colour = Color.new (r, 100, b)
return @flash_colour
end
end

#==============================================================================
# ** Game_Party
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased methods - increase_steps
#==============================================================================

class Game_Party
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Increase Steps
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdergbr_incr_steps_terrain_types_83b5 increase_steps
def increase_steps (*args)
# Run Original Method
mdergbr_incr_steps_terrain_types_83b5 (*args)
terrain_type = $data_terrains[$game_player.ma_terrain_tag]
hp_modded = false
# If Damaging
if terrain_type.damage != 0
# Modify HP
$game_party.members.each { |actor|
next if actor.dead?
if !terrain_type.incapacitation && actor.hp - terrain_type.damage <= 0
hp_modded |= true if actor.hp != 1
actor.hp = 1 # If incapacitation is not allowed, make 1
else
hp_modded |= true unless actor.hp == actor.maxhp
actor.hp -= terrain_type.damage
Sound.play_actor_collapse if actor.dead?
$game_temp.next_scene = "gameover" if all_dead?
end
}
end
# Play Footstep SE, if it exists or if damaged
terrain_type.se.play unless (terrain_type.play_when_dmg && !hp_modded)
# Flash Screen if Damage Taken
$game_map.screen.start_flash(terrain_type.flash_colour, 4) if hp_modded
end
end

#==============================================================================
# ** Game_Map
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - setup, boat_passable?, ship_passable?, disable_dash?
# new method - ma_terrain_tag, ma_create_terrain_map, ma_airship_passable?,
# ma_calculate_terrain_tag
#==============================================================================

class Game_Map
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Setup
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrnlgbr_setup_map_tern_types_nh65 setup
def setup (*args)
mdrnlgbr_setup_map_tern_types_nh65 (*args)
ma_create_terrain_map
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Terrain Map
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ma_create_terrain_map
@terrain_tag_map = Table.new (data.xsize, data.ysize)
for i in 0...@terrain_tag_map.xsize
for j in 0...@terrain_tag_map.ysize
@terrain_tag_map[i, j] = ma_calculate_terrain_tag (i, j)
end
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Terrain Tag
# x, y : the coordinates to check
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ma_terrain_tag (x, y)
# If events exist
unless events.nil?
# Retrieve tag from events
for event in (events_xy (x, y)).reverse
if event.ma_force_terrain_tag != nil && !event.ma_ignore_terrain_tag
return event.ma_force_terrain_tag
end
end
end
# If not set manually, retrieve tag from map
return @terrain_tag_map[x, y] if @terrain_tag_map != nil && @terrain_tag_map[x, y] != nil
return ma_calculate_terrain_tag (x, y)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Calculate Terrain Tag
# x, y : the coordinates to check
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ma_calculate_terrain_tag (x, y)
unless data[x, y, 2] == 0
# Get Tile 0 => B, 1 => C, 2 => D, 3 => E
terrain_table = case data[x, y, 2] / 256
when 0 then ModernAlgebra::TT_TILE_B
when 1 then ModernAlgebra::TT_TILE_C
when 2 then ModernAlgebra::TT_TILE_D
when 3 then ModernAlgebra::TT_TILE_E
end
# Get tile terrain tag
terrain_tag = terrain_table[data[x, y, 2] % 256]
return terrain_tag unless terrain_tag == 0
end
# If no higher layer present, get first layer terrain tag
for i in [1, 0]
unless data[x, y, i] == 0
# If an autotile
tile = data[x, y, i] < 2048 ? data[x, y, i] - 1408 : (data[x, y, i] - 2048) / 48
terrain_tag = ModernAlgebra::TT_TILE_A[tile]
return terrain_tag unless terrain_tag == 0
end
end
# Terrain tag is 0 if no specified pattern
return 0
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Determine if Boat is Passable
# x, y - coordinates
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrnag_bt_pass_terrain_types_73b5 boat_passable?
def boat_passable?(x, y)
# Check if Terrain Type allows Boat Passability
passable_check = $data_terrains[ma_terrain_tag (x, y)].boat_can_pass
return passable_check unless passable_check.nil?
# Run Original Method
return mdrnag_bt_pass_terrain_types_73b5 (x, y)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Determine if Ship is Passable
# x, y - coordinates
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mrnaba_pssbl_ship_trrntypes_62h4 ship_passable?
def ship_passable?(x, y)
# Check if Terrain Type allows ship passability
passable_check = $data_terrains[ma_terrain_tag (x, y)].ship_can_pass
return passable_check unless passable_check.nil?
# Run Original Method
return mrnaba_pssbl_ship_trrntypes_62h4 (x, y)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Determine if Airship is Passable
# x, y - coordinates
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ma_airship_passable? (x, y)
return false unless valid? (x, y)
# Check if Terrain Type allows airship passability
passable_check = $data_terrains[ma_terrain_tag (x, y)].airship_can_pass
return passable_check unless passable_check.nil?
# Return that it is true
return true
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Determine if Airship Can Land
# x, y - coordinates
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias moderna_arshp_land_terrain_types_63b5 airship_land_ok?
def airship_land_ok?(x, y)
# Check if Terrain Type allows airship to land
passable_check = $data_terrains[ma_terrain_tag (x, y)].airship_can_land
return passable_check unless passable_check.nil?
# Run Original Method
return moderna_arshp_land_terrain_types_63b5 (x, y)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Check if dash enabled
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mornbra_dsbldsh_check_terrin_04r3 disable_dash?
def disable_dash? (*args)
# Check if terrain has disabled dash
return true if $data_terrains[$game_player.ma_terrain_tag].disable_dash
# Run Original Method
return mornbra_dsbldsh_check_terrin_04r3 (*args)
end
end

#==============================================================================
# ** Game_Character
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new method - ma_terrain_tag, ma_sprite_height=
# aliased method - initialize, update_bush_depth
#==============================================================================

class Game_Character
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdalgbra_terntpe_init_sprtdisp_1g45 initialize
def initialize (*args)
# Run Original Method
mdalgbra_terntpe_init_sprtdisp_1g45 (*args)
# Initialize new variables
@ma_sprite_display_type = 0
@ma_sprite_height = 0
@ma_real_speed = @move_speed
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Move
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modrnb_mveupt_terrain_8hg3 update_move
def update_move (*args)
# Run Original Method
modrnb_mveupt_terrain_8hg3 (*args)
return if $game_player.vehicle_type == 2 # Do not reduce speed if in airship
# Set move speed according to terrain
@move_speed = $data_terrains[ma_terrain_tag].walk_speed - (4 - @ma_real_speed)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Bush Depth
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modernalgebra_bushdpthupd_terrns_31e4 update_bush_depth
def update_bush_depth (*args)
# If sprite display has been changed
if @ma_sprite_display_type != $data_terrains[ma_terrain_tag].sprite_display
@ma_sprite_display_type = $data_terrains[ma_terrain_tag].sprite_display
case @ma_sprite_display_type
when 1 then @bush_depth = @ma_sprite_height / 3
when 2 then @bush_depth = @ma_sprite_height / 2
when 3 then @bush_depth = @ma_sprite_height
else
@bush_depth = @ma_sprite_display_type
end
end
# If specified as -1, then default to regular bush control
if @ma_sprite_display_type == -1
# Run Original Method
modernalgebra_bushdpthupd_terrns_31e4 (*args)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Terrain Tag
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ma_terrain_tag
return @ma_force_terrain_tag if @ma_force_terrain_tag != nil
return $game_map.ma_terrain_tag (@x, @y)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Set Sprite Height
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ma_sprite_height= (val)
return if @ma_sprite_height == val
@ma_sprite_height = val
@ma_sprite_display_type = 0
update_bush_depth
end
end

#==============================================================================
# ** Game Event
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new public instance variable - ma_force_terrain_tag
#==============================================================================

class Game_Event
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variable
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :ma_force_terrain_tag
attr_reader :ma_ignore_terrain_tag
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Event page setup
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrnalgbr_terin_typs_forctt_setup_53b5 setup
def setup (new_page, *args)
# Run Original Method
mdrnalgbr_terin_typs_forctt_setup_53b5 (new_page, *args)
@ma_old_x, @ma_old_y = @x, @y
@ma_force_terrain_tag = nil
@ma_ignore_terrain_tag = false
@ma_no_update = false
@ma_play_footstep = false
@ma_footstep_radius = 0
@ma_real_speed = @move_speed
# Initialize Force Terrain Tag
unless @page == nil
# Evaluate comments
comments = []
@page.list.each { |i| i.code == 108 || i.code == 408 ? comments.push (i) : break }
# Evaluate comments for TT codes
comments.each { |i|
text = i.parameters[0].dup
# Self Only Terrain Tag => Terrain tag altered but applies only to self
if text[/\\SELFONLYTT\[(\d+)\]/i] != nil
@ma_ignore_terrain_tag = true
@ma_force_terrain_tag = $1.to_i
end
# Alter terrain tag for this square
if text[/\\TERRAINTAG\[(\d+)\]/i] != nil
@ma_force_terrain_tag = $1.to_i
end
# Do not update this event
if text[/\\NOUPDATE/i] != nil
@ma_no_update = true
end
# Play footstep when this event moves?
if text[/\\PLAYFOOTSTEP(\[(\d+)\])?/i] != nil
@ma_play_footstep = true
@ma_footstep_radius = $1 == nil ? 10 : $2.to_i
end
}
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Frame Update
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias maba_upd_trran_tagsyps_off_73b5 update
def update (*args)
# Do not update if turned off
if @ma_no_update
@move_route_forcing = false
return
end
# Run Original Method
maba_upd_trran_tagsyps_off_73b5 (*args)
# If moving
if @ma_old_x != @x || @ma_old_y != @y
@ma_old_x, @ma_old_y = @x, @y
terrain = $data_terrains[ma_terrain_tag]
# Check Bush Depth
@ma_sprite_display_type = terrain.sprite_display
# Play SE only if required
return unless @ma_play_footstep
# Return if No SE
return if terrain.se.name == ""
volume = terrain.se.volume
# Get distance between actor and event
xd = (@x - $game_player.x).abs
yd = (@y - $game_player.y).abs
distance = Math.sqrt (xd**2 + yd**2)
# Do not play if event out of range
return if distance > @ma_footstep_radius
terrain.se.volume = volume - (volume*distance) / @ma_footstep_radius
# Adjust volume according to distance
terrain.se.play
terrain.se.volume = volume
end
end
end

#==============================================================================
# ** Game_Player
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - passable?, update_encounter
#==============================================================================

class Game_Player
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Passable?
# x, y : coordinates
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrgbr_pssble_trrantyps_73n5 passable?
def passable? (x, y, *args)
if @vehicle_type == 2 # If Airship
# Check airship passability
return false unless $game_map.ma_airship_passable? (x, y)
end
# Run Original Method
mdrgbr_pssble_trrantyps_73n5 (x, y, *args)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Encounter
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrnalgbr_encntupd_trrntypes_4nm5 update_encounter
def update_encounter
enc_count = @encounter_count
# Run Original Method
mdrnalgbr_encntupd_trrntypes_4nm5
difference = enc_count - @encounter_count
encnt_mod = $data_terrains[ma_terrain_tag].encounter_mult - 100
@encounter_count -= (difference * (encnt_mod / 100.0))
end
end

#==============================================================================
# ** Game Interpreter
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new method - terrain_tag_xy, terrain_tag_character
#==============================================================================

class Game_Interpreter
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Terrain Tag
# variable_id : the ID of the variable to set it to
# args : either X & Y coordinates, or a character ID
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def terrain_tag (variable_id, *args)
# If arguments passed are X & Y coordinates
if args.size == 2
$game_variables[variable_id] = $game_map.ma_terrain_tag (args[0], args[1])
elsif args.size == 1 # If argument passed is a character ID
character = case args[0]
when -1 then $game_player # Player
when 0 then $game_map.events[@event_id] # This Event
else # Event ID
character = $game_map.events[args[0]]
end
return 0 if character == nil
$game_variables[variable_id] = character.ma_terrain_tag
end
return $game_variables[variable_id]
end
end

#==============================================================================
# ** Sprite_Character
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - update_bitmap
#==============================================================================

class Sprite_Character
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Bitmap
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdnabra_upd_bmp_terrains_6n35 update_bitmap
def update_bitmap (*args)
# Run Original Method
mdnabra_upd_bmp_terrains_6n35 (*args)
@character.ma_sprite_height = self.oy
end
end

#==============================================================================
# ** Spriteset Battle
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - create_battleback, dispose_battleback, update_battleback
#==============================================================================

class Spriteset_Battle
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Battleback Sprite
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modernalgbr_terraintypes_crtbttlebck_63b5 create_battleback
def create_battleback (*args)
# If Battletest, default background
if $BTEST
# Run Original Method
modernalgbr_terraintypes_crtbttlebck_63b5 (*args)
return
end
# Get terrain player is standing on
terrain = $data_terrains[$game_player.ma_terrain_tag]
plane_created = false
# If a background is set, create background
if terrain.bg_graphic != ""
@background_plane = Plane.new (@viewport1)
@background_plane.z -= 100
@background_plane.bitmap = Cache.parallax (terrain.bg_graphic)
@bg_scroll_x, @bg_scroll_y = terrain.bg_scroll_x, terrain.bg_scroll_y
@bg_plane_x, @bg_plane_y = 0, 0
plane_created = true
end
# If a foreground is set, create a foreground
if terrain.fg_graphic != ""
@foreground_plane = Plane.new (@viewport1)
@foreground_plane.z -= 50
@foreground_plane.bitmap = Cache.parallax (terrain.fg_graphic)
@fg_scroll_x, @fg_scroll_y = terrain.fg_scroll_x, terrain.fg_scroll_y
@fg_plane_x, @fg_plane_y = 0, 0
plane_created = true
end
# If neither a background or foreground is set, set to default
if plane_created
Graphics.frame_reset
else
# Run Original Method
modernalgbr_terraintypes_crtbttlebck_63b5 (*args)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Dispose of Battleback Bitmap
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modrnalgbra_terratas_dspsebkbmp_74bt dispose_battleback_bitmap
def dispose_battleback_bitmap (*args)
# Run Original Method if battleback sprite exists
modrnalgbra_terratas_dspsebkbmp_74bt (*args) unless @battleback_sprite.nil?
# Dispose background bitmaps if they exist
@foreground_plane.bitmap.dispose unless @foreground_plane.nil?
@background_plane.bitmap.dispose unless @background_plane.nil?
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Dispose of Battleback Sprite
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modrenalbr_dspsbb_terrintypes_09b6 dispose_battleback
def dispose_battleback (*args)
# Run Original Method if default battleback
modrenalbr_dspsbb_terrintypes_09b6 (*args) unless @battleback_sprite.nil?
# Dispose background if background set
@background_plane.dispose unless @background_plane.nil?
# Dispose foreground if foreground set
@foreground_plane.dispose unless @foreground_plane.nil?
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Battleback
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_bbckupd_trrantypes_52n5 update_battleback
def update_battleback (*args)
# If default battleback
if @background_plane.nil? && @foreground_plane.nil?
# Run Original Method
modalg_bbckupd_trrantypes_52n5 (*args)
else
# If background set
unless @background_plane.nil?
@bg_plane_x += @bg_scroll_x * 2
@bg_plane_y += @bg_scroll_y * 2
# Update background
@background_plane.ox = @bg_plane_x / 16
@background_plane.oy = @bg_plane_y / 16
end
# If foreground set
unless @foreground_plane.nil?
@fg_plane_x += @fg_scroll_x * 4
@fg_plane_y += @fg_scroll_y * 4
# Update foreground
@foreground_plane.ox = @fg_plane_x / 16
@foreground_plane.oy = @fg_plane_y / 16
end
end
end
end

#==============================================================================
# ** Window Message
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - convert_special_characters
#==============================================================================

class Window_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Convert Special Characters
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalbr_terraintgs_trnnme_cnvrtspcchar_0hb2 convert_special_characters
def convert_special_characters (*args)
modalbr_terraintgs_trnnme_cnvrtspcchar_0hb2 (*args) # Run Original Method
# \NT[character_id] => Name of Terrain Character is ON
while @text[/\\NT\[(\d+)\]/i] != nil
character = case $1.to_i
when -1 then $game_player # Player
when 0 then $game_map.events[@event_id] # This Event
else # Event ID
character = $game_map.events[args[0]]
end
@text.sub!(/\\NT\[\d+\]/i) { $data_terrains[character.ma_terrain_tag].name }
end
end
end

#==============================================================================
# ** Scene_Title
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased methods - load_database
#==============================================================================

class Scene_Title
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Load Database
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modlgr_ld_database_terrain_types_843h load_database
def load_database (*args)
# Run Original Method
modlgr_ld_database_terrain_types_843h (*args)
# Create Terrain Types Data
$data_terrains = []
for i in 0...ModernAlgebra::TT_MAX_TERRAIN_TAGS
$data_terrains.push (Data_Terrain.new (i))
end
end
end

#==============================================================================
# ** Scene Map
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - preemptive_or_surprise
#==============================================================================

class Scene_Map
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Preemptive or Surprise
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modrgba_terrntps_premsrprs_2bg5 preemptive_or_surprise
def preemptive_or_surprise (*args)
# Get terrain
terrain = $data_terrains[$game_player.ma_terrain_tag]
# If surprise and preemptive chances manually set
if terrain.surprise_chance >= 0 || terrain.preemptive_chance >= 0
# Get chance of surprise depended on agi
prob_surp = [3, 5]
prob_surp.reverse! if $game_party.average_agi >= $game_troop.average_agi
if rand(100) < terrain.preemptive_chance + prob_surp[0]
$game_troop.preemptive = true
elsif rand(100) < terrain.surprise_chance + prob_surp[1]
$game_troop.surprise = true
end
else
# Run Original Method
modrgba_terrntps_premsrprs_2bg5 (*args)
end
end
end
zum Lesen den Text mit der Maus markieren
Ich weiß, dass dieses Skript sehr umfangreich ist, hoffe jedoch, dass mir jemand aus diesem Forum helfen kann.
Von den verschiedenen Funktionen des Skripts nutze ich nur, die, Events und dem Spieler Schrittgeräusche zu geben. Allerdings soll dabei nicht nur je nach Terrain,
sondern auch je nach Laufgeschwindigkeit verschiedene Schrittgeräusche abgespielt werden. Dazu kommt noch, dass so ein Sound sehr nervig ist, wenn er immer und immer wieder abgespielt wird.
Deshalb sollen die Sounds mit verschiedener Tonhöhe und -lautstärke abgespielt werden. Weiter unten habe ich ein Beispielprojekt hochgeladen, anhand dessen ihr mein Problem wahrscheinlich besser
verstehen werdet, den folgenden Teil werdet ihr ohne das Projekt wahrscheinlich nicht verstehen, da ich mich genau darauf beziehel.
Wie ihr wahrscheinlich bemerkt, wird überhaupt kein Ton abgespielt. Das liegt daran, dass bei die ID 1 nur als Platzhalter dient, damit der Spieler diesen Sound nicht immer standardmäßig abspielt.
Das liegt daran, dass der Sound vom Spieler hinterher auch per Event geregelt wird , da mir nur hierbei die vielen Möglichkeiten zur Verfügung stehen, aber das ist was anderes.

Das größte Problem ist also, dass sich zwar die Variable, nach der der Sound abgespielt wird verändert, das Skript allerdings an dieser Stelle kein Update zulässt,
so dass immer der Sound abgespielt wird, der durch die Methode

Spoiler
terrain_tag (variable_id, character_id)
zum Lesen den Text mit der Maus markieren


ermittelt wird. Merkwürdigerweise lässt das Skript hierbei ein Update zu, ansonsten wäre die Footstep-Methode ja auch völlig unbrauchbar.

Ich habe schon versucht dem vorzubeugen, indem hier erstens nicht die terrain_tag Variable nicht direkt bei dieser Methode

Spoiler
\TerrainTag[x]
zum Lesen den Text mit der Maus markieren


abgefragt wird, sondern erst auf die zufällige Variable addiert wird, und zweitens die verschiedenen Variablen auf zwei Event-Seiten durchgeführt wird.
(Ich hatte gehofft, dass sich das Skript dadurch irgendwie aktualisiert)

Ich hoffe, dass ich nicht einfach einen dummen Fehler beim Eventing gemacht habe, allerdings habe ich das Skript jetzt schon auf viele verschiedenen Arten ausprobiert und das oben beschriebene Problem ist immer aufgetreten.

Ich kenne mich mit dem Skripten leider nicht aus, da gerade dieses Feature für mein Spiel sehr essenziell ist, fände ich es wirklich toll, wenn mir jemand sagen könnte, was ich falsch mache, oder was das Skript falsch macht.

Vielen Dank im Voraus :)


Nohito
»Nohito« hat folgende Datei angehängt:
  • Project8.exe (554,23 kB - 4 mal heruntergeladen - zuletzt: 23. Februar 2013, 16:48)

FlipelyFlip

unregistriert

2

Mittwoch, 13. Februar 2013, 11:01

du hast das komplette System wie es ausguckt nicht ganz verstanden^^"

dort wo du die Sounds inkl. Namen angibst, wird beim when die TerrainID angegeben.
Um diese Random zu machen, muss man etwas scripten können und das dann anpassen.
Im Event selbst hast du folgendes gemacht:

\SelfOnlyTT[§game_variables[21]

dieser Befehl ist schon komplett Falsch aufgebaut. Wenn du das nutzen willst, dann gehört das so hin:

\SelfOnlyTT[$game_variables[21]]

Btw. der Befehl tackert den Sound an das Event mit der ID, welche in der Variable gespeichert ist. Also nicht auf das aktuelle Event.

dann gehts weiter:

terrain_tag(1, 0)

dieser Befehl bewirkt, dass vom Event (diesem in dem das steht) der Terrain Tag in die Variable 1 gepackt wird. Dies wird bei jedem Update wiederholt (da kann man dann im Script auch das so anpassen, dass es verschiedene Sounds spielt, aber dazu später mehr)

Danach bearbeitest du mit den Variablen die terrain_id und wechselst auf die nächste Seite. Dort selbige Fehler wie bereits erwähnt. Die terrain_id ändert sich zurück auf den orginal-Wert, sprich der richtige Sound wird abgespielt.

jetzt aber allgemein zum Script:

Erstmal solltest du alle Terrain_IDs den Tiles geben. Wie du die ID der Tiles rausfindest? ganz einfach, so:

Spoiler: Tiles_ID

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module Stuff
  def self.stuff
    if $TEST and Input.trigger?(Input::F5)      # タイルIDのチェック
      text = []
      for i in 0..3
      x = $game_player.real_x + 128 >> 8
      y = $game_player.real_y + 128 >> 8
      x += i
      text[i] = sprintf("Über %d : Mittel %d : Unter %d", $game_map.data[x, y, 2],
      $game_map.data[x, y, 1], $game_map.data[x, y, 0])
      end
      for a in text
        p a
      end
    end
  end
end
 
class Scene_Map < Scene_Base
  alias f_update update
  def update
    f_update
    Stuff.stuff
  end
end
zum Lesen den Text mit der Maus markieren

Wenn du F5 auf der Map drückst, erhälst du alle TileIDs die auf den Koordinaten des Helden sind. Da Autotiles aus mehreren Tiles bestehen, haben diese auch dementsprechend viele IDs.
Diese müssen natürlich alle definiert werden. Btw. die TileIDs für die Tilesets A1 bis A5 finden sich bei Unter und Mittel.

Dann noch weiter: wenn du mehrere verschiedene Sounds für ein Terrain-ID haben willst, dann guck auf wieviele Terrain-IDs du gesamt kommst. dann darfst anfangen das ganze zu scripten.
Nehmen wir mal für 1 Terrain-ID 10 verschiedne Sounds her. Standardmäßig haben wir nun theoretisch 10 verschiedne Terrain-IDs.

Das würde nun so ausgucken. Wenn die Terrain-ID zB. 1 ist, erstellen wir einen zufälligen Wert von zB. 0-3. Danach überprüfst du, ob der Wert < 1 ist. Wenn ja, dann wird der Standardsound abgespielt. Wenn nein, dann gehts weiter. Nun überprüfen wir, welche Terrain-ID es genau ist. wenn es zB. 1 ist, rechnen wir +10, bei 2 rechnen wir +20 usw. Nun haben wir herausgefunden, dass unsre TileID == 1 ist und haben nun 10 dazu gerechnet. Jetzt wird nochmal eine Randomzahl zwischen 0 bis 9 erstellt. Das rechnen wir ebenfalls zur Terrain-ID dazu und haben nun unsere endgültige TerrainID, welche den Sound abspielt. Fertig, jetzt musst du es nur noch umsetzen.

lg flipy

3

Donnerstag, 14. Februar 2013, 16:43

Erstmal vielen Dank für deine Hilfe, ich hätte nicht gedacht, dass ich so schnell eine Antwort bekomme :)
Zu ein paar Sachen hab ich allerdings noch Fragen:

Zitat

Btw. der Befehl tackert den Sound an das Event mit der ID, welche in der Variable gespeichert ist. Also nicht auf das aktuelle Event.

Bist du dir da sicher? So wie das im Skript beschriben wird

Zitat

# \SelfOnlyTT[x]
# means that the terrain tag X is set, but it applies only to this event.
# So, for instance the three rocks in the demo, which I wanted to make
# semi-transparent. However, I don't want the player to be totally
# semi-transparent when he steps on that tile. So basically, SelfOnlyTT means
# that that event always has a special terrain tag that applies only to itself.

ist x doch keine Event ID sondern die Terrain ID und gilt der Befehl auch immer für das aktuelle Event.

Zitat

Danach bearbeitest du mit den Variablen die terrain_id und wechselst auf die nächste Seite. Dort selbige Fehler wie bereits erwähnt. Die terrain_id ändert sich zurück auf den orginal-Wert, sprich der richtige Sound wird abgespielt.

Tut mir Leid, aber ich versteh nicht so ganz, welchen meiner Fehler du hier meinst. Und könnte das ganze nicht irgendwie behoben werden, so dass ich es doch noch irgendwie mit Events hinkrieg? Skripten kann ich nämlich dummerweise überhaupt nicht :(

Zitat

Erstmal solltest du alle Terrain_IDs den Tiles geben.

Das hatte ich schonmal gemacht, allerdings verwende ich bei dem Projekt andere Grafiken und hab das Projekt von oben nur als Beispiel erstellt. Da ich hier andere Grafiken verwende,
hab ich die TerrainID nur für das Gras festgelegt, es ging mir auch eher darum, ob es so prinzipiell funktionieren würde.
Das mit der ID der Tiles hab ich bisher wohl falsch gemacht, danke dafür :) Ich bin einfach im Editor immer so vorgegangen die Tiles durchzuzählen:

0, 1, 2, 3, 4, 5, 6, 7, 8
8, 9, 10, 11, 12, 13, 14, 15, 16

Bisher ist das so auch gut hingekommen, aber ich werds nochmal ausprobieren.

Zitat

Das würde nun so ausgucken. Wenn die Terrain-ID zB. 1 ist, erstellen wir einen zufälligen Wert von zB. 0-3. Danach überprüfst du, ob der Wert < 1 ist. Wenn ja, dann wird der Standardsound abgespielt. Wenn nein, dann gehts weiter. Nun überprüfen wir, welche Terrain-ID es genau ist. wenn es zB. 1 ist, rechnen wir +10, bei 2 rechnen wir +20 usw. Nun haben wir herausgefunden, dass unsre TileID == 1 ist und haben nun 10 dazu gerechnet. Jetzt wird nochmal eine Randomzahl zwischen 0 bis 9 erstellt. Das rechnen wir ebenfalls zur Terrain-ID dazu und haben nun unsere endgültige TerrainID, welche den Sound abspielt. Fertig, jetzt musst du es nur noch umsetzen.

Das hört sich ja schonmal gut an, aber ich kann halt, wie gesagt, überhaupt nicht skripten. Wäre es denn nicht möglich meine Methode anzupassen/zu verändern so dass das ganze dann auch mit Events funktioniert?

FlipelyFlip

unregistriert

4

Freitag, 15. Februar 2013, 00:58

ach fu. Hab mich da etwas verlesen gehabt. Es tackert einen bestimmten TerainTag an das Event nicht umgekehrt ._.
sry für den kleinen verwirrer ._.

Ich machs mal so:

Variable 1 bekommt die Terrain_ID.
danach rechnest du zur Terrain_ID einen Wert dazu.
Danach legst du ja Self Switch A um und gehst auf die nächste seite.
Variable 1 wird nun wieder mit der Terrain-ID überschrieben.
Sprich: Du änderst die Terrain-ID nicht. Denn wenn du die ändern willst, musst du das wie gesagt im Script selbst machen anstelle von im Event.

nene, das Autotile besteht aus mehreren Tiles die aus dem Autotile erstellt werden, daher ist es da auch etwas schwieriger zu zählen. Ausser man hat die genauen Zahlen immer im Kopf^^"

ich setz es mal auf die liste, kann dir aber nicht sagen ob ich diese oder nächste Woche dazu komme.

lg flipy

5

Freitag, 15. Februar 2013, 17:56

Die Terrain_ID an sich will ich ja eigentlich nicht verändern, sondern nur Variable 1, so dass dann eine andere Terrain_ID, die nur für diesen Zweck, also um den Sound je nach Schrittart, oder auch nur um nicht immer den gleichen Sound abzuspielen, vorhanden ist. Das war jedenfalls der Grundgedanke, aber wenn das nur mit einer Änderung im Script geht...
Auf jeden Fall vielen Dank für deine Hilfe, ich werd mich dann erstmal gedulden. :thumbsup:
Wär nur nett, wenn du, falls du dich doch entscheidest, es nicht zu machen, mir Bescheid geben könntest. ;)

Ähnliche Themen

Social Bookmarks