Hey,
erst einmal sorry für die verzögerte Antwort. Ich schiebe gerade zuviele Überstunden. Habe mir das Ganze auch jetzt nur während der Arbeit angeschaut und konnte es daher nicht so genau betrachten.
Es liegt wohl an folgender stelle:
Script Area: CTB by Charlie - Damage and Colors
Methode: Update (ab Zeile 250+)
betroffener Code (ab Zeile ~410):
Code:
# Support for blinking targets
if @battler != nil and @battler.targeted
@_target_blink_count = (@_target_blink_count + 1) % 12
if @_target_blink_count < 6
alpha = (6 - @_target_blink_count) * 24
else
alpha = (@_target_blink_count - 6) * 24
end
self.color.set(255, 255, 255, alpha)
else
self.color.set(0, 0, 0, 0)
end
if @_blink
@_blink_count = (@_blink_count + 1) % 32
if @_blink_count < 16
alpha = (16 - @_blink_count) * 6
else
alpha = (@_blink_count - 16) * 6
end
self.color.set(255, 255, 255, alpha)
end
@@_animations.clear
Hier wird für das CTB das Blinkverhalten der Sprites bestimmt. Der Shadow-Sprite greift mit seinem Update auch darauf zu und wird an dieser Stelle wieder sichtbar gemacht. Als "Hotfix", da ich leider keine Zeit gerade habe, würde ich dir folgende Lösung vorschlagen:
Füge die rote Zeile über dem Code ein:
Code:
return if($shadow_char)
# Support for blinking targets
if @battler != nil and @battler.targeted
@_target_blink_count = (@_target_blink_count + 1) % 12
if @_target_blink_count < 6
alpha = (6 - @_target_blink_count) * 24
else
alpha = (@_target_blink_count - 6) * 24
end
self.color.set(255, 255, 255, alpha)
else
self.color.set(0, 0, 0, 0)
end
if @_blink
@_blink_count = (@_blink_count + 1) % 32
if @_blink_count < 16
alpha = (16 - @_blink_count) * 6
else
alpha = (@_blink_count - 16) * 6
end
self.color.set(255, 255, 255, alpha)
end
@@_animations.clear
Im Schattenskript fügst du folgendes unter der Update-Methode in der Shadow_Sprite Klasse ein (ca. Zeile 220):
Code:
def update
if @character.transparent or @character.opacity <= SHADOWS_OPACITY_THRESHOLD
self.visible = false
return
end
@deltax=(@source.real_x-@character.real_x)/4
@deltay= (@source.real_y-@character.real_y)/4
@distance = (((@deltax ** 2) + (@deltay ** 2))** 0.5)
if @distancemax !=0 and @distance>@distancemax
self.visible = false
return
end
self.angle = 57.3*Math.atan2(@deltax, @deltay )
@angle_trigo= (self.angle+90) % 360
if @anglemin !=0 or @anglemax !=0
if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and \
@anglemin<@anglemax
self.visible = false
return
elsif (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and \
@anglemin>@anglemax
self.visible = false
return
end
end
super
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
self.visible = true
self.x = @character.screen_x
self.y = @character.screen_y-8
self.z = @character.screen_z(@ch)-1
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
if @tile_id == 0
sx = @character.pattern * @cw
quarter = ((@angle_trigo/90+0.5).floor)%4
# The quarter is the position of the event relative to the source.
# Imagine the source is the o point (0,0). Trace the 2 lines
# y=x and y=-x : you get something like a big X
# On the right, quarter=0. Up, quarter = 1, and so on
# Take the @character.direction row (2,4,6,8), and the quarter
# column (0,1,2,3) (remember, it starts at 0), and you'll get
# a number between 1 and 4. It correspond to the row of the charset
# the shadow will be, and mirrored if negative.
# Yes, it isn't obvious, but I didn't find any simple operation to
# get those.
magic = SHADOWS_DIRECTION_ARRAY[@character.direction][quarter]
magic = -magic
if magic < 0
self.mirror = true
magic = -magic
else
self.mirror = false
end
sy = (magic-1)*@ch
self.src_rect.set(sx, sy, @cw, @ch)
end
# This is the formula of the opacity in function of the distance
# ** 2 means square
self.opacity = 1200/((@distance ** 2)/ 1000 + 6)
# This is the formula of the size in function of the distance
# The 0.75 is here so you have a size of 1:1 when next to the source.
self.zoom_y=0.75 + @distance / 256 if SHADOW_GETS_LONGER
end
alias update_fix update
def update
$shadow_char = true
update_fix
$shadow_char = false
end
end
Ich kann dir das Ganze bei Gelegenheit auch mal "schöner" lösen - aber da komme ich wohl erst im Dezember zu.
Hoffe es klappt, so wie es soll.
Viele liebe Grüße,
Linkey