RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
XP Script - Flat Sprites Render as Flat!

0 Members and 1 Guest are viewing this topic.

***
Rep:
Level 70
RMRK Junior
Anyone ever try to use this Graphic for an Event?



Your Character has a problem of "Walking Behind or Under" that Graphic. Like this:



That isnt what we want. I wont bother to explain the problem in technical terms, but I will offer a FIX.



THAT is what we want! Did you notice the Characters are now on TOP of the Graphic?

The problem is that the engine "Thinks" that the Graphic is a Character that is standing up and not laying on the ground. This script tells the Engine to just render it as "Flat" instead of as "Standing Up".

Spoiler for:
Code: [Select]
# Heretic Fix Flat Sprites
#
# People stand up straight off the ground, but
# Rugs lay flat on the ground.
#
# The intention of this script is to allow a quick fix for
# Sprites that are supposed to look like they should lay flat
# Namely, the "Support 7" Graphics.  They look like they should
# lay flat, and not stack in front of the characters EVER.
#
# The "Support 7" Graphic, make an event, give it a Graphic
# and find "Support 7", it is one up from the bottom of the list.
#
# ALWAYS_ON_TOP MUST BE OFF!!!
#
# To define an event to be FLAT, change the NAME of the EVENT
# and add \z_flat, so a Rug would be "Rug\z_flat"
#
# If you have trouble with your Event stacking correctly
# you can try using the optional parameter field to specify a Z-Index to add
# I.E. - "Sign\z_flat[32]", 32 per tile you want higher.
#
# This is useful if you have TWO EVENTS you want to stack, like a TREE
# I sometimes use EVENTS to hold GRAPHICS when I need to put more
# than Three Layers of Graphics
#
# Another option is "Name\z_add[32]" which REQUIRES a Number
#
# This is intended also for fixing things like Graphic Events.  To make it
# stack on top of Characters, give it a nice high number, but less than 999
# as 999 is the Z-Index for "Always On Top", thus allowing even more
# Graphic Events to stack on top of that.  500 is a good number to work with.
#
# This whole thing gives you MUCH MORE CONTROL over the way that events stack
# when they occupy the same space.  Normally, the engine just cycles through
# Events in order, so if you have 3 Graphic Events stacked on top of one another
# the Event with the LOWEST EVENT ID will be on Bottom of that Stack.
#
# Needless to say, if you are fighting with the Stacking Order and trying to
# figure out Event ID's, then change tons of other stuff, this script will
# save you time from heavy modifications.
#
#
# Shouldnt affect performance because it is only called when the map is loaded
# which would be the only place you might take a performance hit.
#
# If you use my revision of Zeriab's Caterpillar, place this BELOW that script
# and above MAIN


class Game_Event < Game_Character
 
  unless self.method_defined?('flat_sprite_initialize')
    alias flat_sprite_initialize initialize
  end
 
  def initialize(map_id, event, *args)
    flat_sprite_check(event)
    flat_sprite_initialize(map_id, event, *args)
  end

  unless self.method_defined?('flat_sprite_screen_z')
    alias flat_sprite_screen_z screen_z
  end
 
  def screen_z (height = 0)
    if not @z_flat.nil? and !@always_on_top
      return z = (@real_y - $game_map.display_y + 3) / 4 + @z_flat
    end
   
    if not @z_add.nil? and !@always_on_top
      return z = (@real_y - $game_map.display_y + 3) / 4 + 32 + @z_add
    end

    #Run Original screen_z
    flat_sprite_screen_z(height)
   
  end
 
  def flat_sprite_check(event)
    # Options
    #
    # "Name\z_flat"
    # "Name\z_flat[32]" for characters manual adjustments, for whatever reason
    # "Name\z_add[32]" for characters higher than 32 pixels high

    event.name.gsub(/\\z_flat\[([-]?[0-9]+)\]|\\z_flat/i) {@z_flat = $1.to_i }
    return if @z_flat   
   
    event.name.gsub(/\\z_add\[([-]?[0-9]+)\]/i) {@z_add = $1.to_i }
    return if @z_add
  end
end

edit: cleaned up the Regular Expressions a little bit.

To do this, change the Name of the event to include \z_flat, so "Rug\z_flat" will force the engine to render characters on top of it correctly.

There are a couple other options in there in case you are having trouble with Event Stacking.  \z_add renders sprites with a higher z_index based on the graphics height.  If it is taller than 32 pixels, it adds 31 to the z_index, plus, whatever you specify.  The optional argument for \z_flat[int] does NOT consider height, and sets the Z_index to include your x.  Thus, you want the z_index to be 32 higher (32 per pixel), put in \z_flat[32], or \z_flat[1] if you want one event to stack in front of another without using @always_on_top.
« Last Edit: March 01, 2012, 12:34:33 PM by Heretic86 »
Heretic's Vehicles XP (Boat and Magic Carpet)

Heretic's Collection XP Ver 2.3 - Updated to include Dynamic Lighting, Moving Platforms, Vehicles, and much much more!