Reedo's Simple Side Battle System (For VX)

PaladinHeart

Veteran
Veteran
Joined
Oct 15, 2012
Messages
30
Reaction score
1
First Language
English
Primarily Uses
Sorry if I am posting this improperly but I couldn't find it on the forum.

I'm guessing the script was lost and that's why it's outdated.

Would be great if someone could fix it and repost it properly. :)

It currently crashes my game, randomly, after battles due to improper disposal of sprites.

At least that is what Graphical Object Global Reference leads me to believe.

Code:
#################################################################################  RSSBS - Reedo's Simple Side Battle System##  Version 1.0##  January 7, 2010##  By Reedo#################################################################################  SOURCE####  Source thread:######  Support thread:##    [URL="http://www.rpgmakervx.net/index.php?showtopic=24587#%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%C2%A0"]http://www.rpgmakervx.net/index.php?showtopic=24587################################################################################# [/URL] REFERENCES####  None.  This is an original script by Reedo.##  However other people have contributed ideas and bug finds. Please see the##  support thread link above for details.#################################################################################  DESCRIPTION####  This script provides a plug-and-play Side Battle System for the default##  battle system. This is purely an asthetic script, and as such, it only##  modifies the visuals of the battle. It does not modify battle mechanics##  when used by itself.####  This script will:##  1) Draw the party on the right side of the screen, facing left, during batle.##  2) Cause actors to perform their stepping animation when they are on the##     ground, and have no state restrictions applied.##  3) Place a shadow under the actor.##  4) Provide a target for animations, and optionally, animations themselves.##  5) Line up actors in a staggerd row, top to bottom, with adjustable spacing,##     recessed according to the position value of their class.##  6) Cause actors to step forward when performing an action.##  7) Draw actors lying down, whitened, and semi-transparent when dead.##  8) Cause living actors to do a victory dance at the end of battle.##  9) Provide the option to horizontally flip enemy images by enemy ID.####  When used with the YERD or YEZ battle scripts, you then get even more##  animation options (such as casting animations) and popups for most battle##  event messages.  This SBS and YEZ combine to form an amazing SBS experience!##     YEZ Script Link:  [URL="http://www.pockethouse.com/yez/#%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%C2%A0"]http://www.pockethouse.com/yez/################################################################################# [/URL] COMPATIBILITY####  Should be compatible with most other scripts.####  This script overwrites 1 method: Spriteset_Battle.update_actors##  All other methods are aliased, and those aliases are called.##  The one overwrite should not cause an issue as the only functionality it##  supresses is setting the party members to the current battle sprites. The##  rest of the original method is maintained, and this script handles the##  relationship between party members and battle sprites.#################################################################################  REQUIREMENTS####  None#################################################################################  INSTALLATION####  Plug-and-play. (and this time I mean it for reals!)####  Insert below Materials, above other Reedo scripts.##  All Reedo scripts should be below all YERD/YEZ scripts.#################################################################################  RIGHTS & RESTRICTIONS####  As with most Reedo scripts, this script is free to re-use, as-is,##  in personal, educational, and commercial RPGVX development projects,##  providing that:  this script, as well as the rpgmakervx.net forum link  ##  from which it was obtained, are credited in writing displayed readily##  to the user of the final compiled code assembly.####  Reedo and rgpmakervx.net retain all rights of intellect and ownership.##  You forego all rights of warranty by utilizing this script.#################################################################################  USAGE####  Plug and play.  Suggested to use YEZ Battle Engine Zealous, and Reedo's##  Tile-Based Battle Backgrounds scripts.####  Some visual options can be modified below.################################################################################################################################################################  USER OPTIONS###############################################################################module REEDO_SBS# If desired, you can modify the default script options using the constants# below. In most cases though, you should not need to adjust these values. ################################################################################# This section controls the battle animations provided by this script###############################################################################  # This controls whether or not this script will provide animations during  # battle. Set to 'true' when using this script without any other battle scene  # enhancements. Set to 'false' when using battle scene enhancements such  # as YEZ/YERD. Default is 'false'.  SBS_ACTION_ANIMES = true   # If this script is providing animations, then you can specify which  # animations to use a default.  SBS_DEFAULT_ATTACK_ANIME = 19  # Skill and item animations will use the animation assigned to the skill or  # item, if any. If none is assigned, then the default will be used. Specify  # a value of 0 if you do not want a default animation. These values have no  # effect if SBS_ACTION_ANIMES is set to 'false'.  SBS_DEFAULT_SKILL_ANIME = 1  SBS_DEFAULT_ITEM_ANIME = 1 ################################################################################# This section adjusts the actors positions on screen###############################################################################  ACTOR_START_LINE = 432        # The left-most position of the first actor  ACTOR_START_TOP = 80          # The top-most position of the first actor  ACTOR_STAGGER_HORZ = 8        # The amount to recess each actor to the right  ACTOR_STAGGER_VERT = 16       # The vertical spacing between characters  ACTOR_CLASS_POS_STAGGER = 16  # The extra distance to the right for class position  ACTOR_STEP_IN_DISTANCE = 64   # The distance an actor steps in during an action  ACTOR_STEP_IN_RATE = 8        # The rate at which the actor covers the distance ################################################################################# This section controls when an actor displays their stepping animation###############################################################################  # If an actor has a state applied which has a restriction value listed in  # the following array, the actor will not display their stepping animation  # until the state is removed.  NO_STEP_RESTRICTIONS = [6, 7, 8, 18]  # Has the same effect as above, but halts the stepping animation based on  # the state's ID, without regard to the state's restriction.  NO_STEP_STATES = [] ################################################################################# This section adjusts the appearance of an actor when dead###############################################################################  ACTOR_DEATH_OPACITY = 175              # The tranparency of dead actors  ACTOR_DEATH_ANGLE = 270                # The angle to rotate the body  ACTOR_DEATH_TONE = [128, 128, 128, 0]  # A color tone to apply to the image  ACTOR_DEATH_OFFSET_X = -8              # A horizontal offset to move the body by  ACTOR_DEATH_OFFSET_Y = -8              # A vertical offset to move the body by ################################################################################# This section adjusts the actor's shadow###############################################################################  ACTOR_SHADOW_IMAGE = "Shadow"       # The name of the system image to use  ACTOR_SHADOW_CUSTOM_PICTURE = nil   # The name of a resource picture to use instead; nil to use system image  ACTOR_SHADOW_OFFSET_X = 0           # The horizontal offset to the actor's position  ACTOR_SHADOW_OFFSET_Y = 8           # The vertical offset to the actor's position  ACTOR_DEATH_SHADOW_OFFSET_X = 8     # Additional X offset added when dead  ACTOR_DEATH_SHADOW_OFFSET_Y = 2     # Additional Y offset added when dead ################################################################################# This section adjusts the victory dance###############################################################################  VICTORY_DANCE_JUMP_HEIGHT = 16    # The height of the jump  VICTORY_DANCE_JUMP_INCREMENT = 2  # The rate of jump movement  VICTORY_DANCE_JUMP_HOVER = 4      # The number of frames to wait in the air  VICTORY_DANCE_JUMP_WAIT = 70      # The number of frames before jumping again  VICTORY_DANCE_JUMP_TWIST = true   # True to twirl when jumping; false to face forward ################################################################################# This section adjusts the battle floor location###############################################################################  BATTLE_FLOOR_TOP = 128  # Allows you to set the top of the battle floor ################################################################################# This section adjusts enemy images###############################################################################  # Specify the ID of enemies who should have their image flipped in battle  FLIP_ENEMY = [] end#################################################################################  MAIN SCRIPT#################################################################################  EDITS BEYOND THIS POINT ARE AT YOUR OWN RISK!!!###############################################################################class Game_Battler  alias reedo_sbs_gb_add_state add_state  def add_state(state_id)    reedo_sbs_gb_add_state(state_id)    if self.is_a?(Game_Actor) and $scene.is_a?(Scene_Battle)      bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)      return if bs == nil      bs.reedo_bc_sprite.character.step_anime = reedo_check_step_anime      reedo_update_life_state    end  end   alias reedo_sbs_gb_remove_state remove_state  def remove_state(state_id)    reedo_sbs_gb_remove_state(state_id)    if self.is_a?(Game_Actor) and $scene.is_a?(Scene_Battle)      bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)      return if bs == nil      bs.reedo_bc_sprite.character.step_anime = reedo_check_step_anime      reedo_update_life_state    end      end   def reedo_check_step_anime    return false if dead?    for state in states      return false if REEDO_SBS::NO_STEP_STATES.include?(state.id)      return false if REEDO_SBS::NO_STEP_RESTRICTIONS.include?(state.restriction)    end    return true  end   def reedo_update_life_state(battle_sprite = nil)    if dead?      if !@reedo_dead_set        reedo_set_dead_state(battle_sprite)        @reedo_dead_set = true      end    else      if @reedo_dead_set        reedo_set_live_state(battle_sprite)        @reedo_dead_set = false      end    end  end   def reedo_reset_dead_set    @reedo_dead_set = false  end   def reedo_set_dead_state(battle_sprite = nil)    if battle_sprite == nil      bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)    else      bs = battle_sprite    end    return if bs == nil    return if bs.reedo_bc_sprite.is_dead    bs.reedo_bc_sprite.angle = REEDO_SBS::ACTOR_DEATH_ANGLE    tone = REEDO_SBS::ACTOR_DEATH_TONE    bs.reedo_bc_sprite.tone.set(tone[0], tone[1], tone[2], tone[3])    bs.reedo_bc_sprite.character.opacity = REEDO_SBS::ACTOR_DEATH_OPACITY    bs.reedo_bc_sprite.character.screen_x += REEDO_SBS::ACTOR_DEATH_OFFSET_X    bs.reedo_bc_sprite.character.screen_y += REEDO_SBS::ACTOR_DEATH_OFFSET_Y    bs.reedo_bc_sprite.shadow_sprite.x += REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_X    bs.reedo_bc_sprite.shadow_sprite.y += REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_Y        bs.reedo_bc_sprite.is_dead = true  end   def reedo_set_live_state(battle_sprite = nil)    if battle_sprite == nil      bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)    else      bs = battle_sprite    end    return if bs == nil    return if bs.reedo_bc_sprite.is_dead != true    bs.reedo_bc_sprite.angle = 0    bs.reedo_bc_sprite.tone.set(0, 0, 0, 0)    bs.reedo_bc_sprite.character.opacity = 255    bs.reedo_bc_sprite.character.screen_x -= REEDO_SBS::ACTOR_DEATH_OFFSET_X    bs.reedo_bc_sprite.character.screen_y -= REEDO_SBS::ACTOR_DEATH_OFFSET_Y    bs.reedo_bc_sprite.shadow_sprite.x -= REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_X    bs.reedo_bc_sprite.shadow_sprite.y -= REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_Y    bs.reedo_bc_sprite.is_dead = false  endendclass Game_Actor  attr_accessor :reedo_battle_sprite_id  attr_accessor :screen_x  attr_accessor :screen_yendclass Game_Actors  def members    return @data  endendclass Game_Troop  def troop_id    return @troop_id  endendclass Game_Character    alias reedo_sbs_gc_screen_x screen_x  def screen_x    if $scene.is_a?(Scene_Battle)      return @battle_screen_x    else      return reedo_sbs_gc_screen_x    end  end  alias reedo_sbs_gc_screen_y screen_y  def screen_y    if $scene.is_a?(Scene_Battle)      return @battle_screen_y    else      return reedo_sbs_gc_screen_y    end  end   def opacity=(value)    @opacity = value  end  def screen_x=(value)    @battle_screen_x = value  end  def screen_y=(value)    @battle_screen_y = value  end  def step_anime    return @step_anime  end  def step_anime=(value)    @step_anime = value  endendclass Sprite_Base  attr_accessor :reedo_victory_waitendclass Sprite_Character  attr_accessor :shadow_sprite  attr_accessor :is_dead   alias reedo_sbs_sc_dispose dispose  def dispose    @shadow_sprite.dispose if @shadow_sprite != nil    reedo_sbs_sc_dispose  end   def create_shadow_sprite    @shadow_sprite = Sprite_Base.new(self.viewport)    bmp = Cache.picture(REEDO_SBS::ACTOR_SHADOW_CUSTOM_PICTURE) if REEDO_SBS::ACTOR_SHADOW_CUSTOM_PICTURE != nil    bmp = Cache.system(REEDO_SBS::ACTOR_SHADOW_IMAGE) if bmp == nil    @shadow_sprite.bitmap = bmp    @shadow_sprite.src_rect = Rect.new(0, 0, bmp.width, bmp.height)    @shadow_sprite.x = self.x - self.ox + REEDO_SBS::ACTOR_SHADOW_OFFSET_X    @shadow_sprite.y = self.y - self.oy + REEDO_SBS::ACTOR_SHADOW_OFFSET_Y    @shadow_sprite.z = self.z - 1  end   alias reedo_sbs_sc_update update  def update    reedo_sbs_sc_update    @shadow_sprite.update if @shadow_sprite != nil  endendclass Sprite_Battler  attr_accessor :reedo_bc_sprite  alias reedo_sbs_sb_dispose dispose  def dispose    @reedo_bc_sprite.dispose if @reedo_bc_sprite != nil    reedo_sbs_sb_dispose  end   alias reedo_sbs_sb_update update  def update    reedo_sbs_sb_update    @reedo_bc_sprite.update if @reedo_bc_sprite != nil  endendclass Spriteset_Battle  alias reedo_sbs_ssb_create_battlefloor create_battlefloor  def create_battlefloor    reedo_sbs_ssb_create_battlefloor    @battlefloor_sprite.y = REEDO_SBS::BATTLE_FLOOR_TOP  end   alias reedo_sbs_ssb_create_actors create_actors  def create_actors    if @actor_sprites != nil      dispose_actors    end    reedo_sbs_ssb_create_actors    @reedo_start_points = {}    @actor_sprites = []    i = 1    for actor in $game_party.members      actor.reedo_battle_sprite_id = i - 1              gc = Game_Character.new      gc.set_graphic(actor.character_name, actor.character_index)      gc.set_direction(4)      gc.screen_x = 0; gc.screen_y = 0      bc = Sprite_Character.new(@viewport1, gc)      gc.screen_x = REEDO_SBS::ACTOR_START_LINE +                    ($data_classes[actor.class_id].position *                    REEDO_SBS::ACTOR_CLASS_POS_STAGGER) +                    ((i - 1) * REEDO_SBS::ACTOR_STAGGER_HORZ)      gc.screen_y = REEDO_SBS::ACTOR_START_TOP + ((bc.height * i) +                    (REEDO_SBS::ACTOR_STAGGER_VERT * i))      actor.screen_x = gc.screen_x; actor.screen_y = gc.screen_y      sb = Sprite_Battler.new(@viewport1, actor)      sb.reedo_victory_wait = REEDO_SBS::VICTORY_DANCE_JUMP_HOVER      sb.reedo_bc_sprite = bc      gc.step_anime = actor.reedo_check_step_anime      @reedo_start_points[sb] = [gc.screen_x, gc.screen_y]      @actor_sprites.push(sb)        bc.update      bc.create_shadow_sprite      actor.reedo_reset_dead_set      actor.reedo_update_life_state(sb)      i += 1    end  end   alias reedo_sbs_ssb_create_enemies create_enemies  def create_enemies    reedo_sbs_ssb_create_enemies    for sprite in @enemy_sprites      if REEDO_SBS::FLIP_ENEMY.include?(sprite.battler.enemy_id)        sprite.mirror = true      end    end  end   def update_actors    if $scene.is_a?(Scene_Battle)      if $scene.victory_dance_time        reedo_update_victory_dance      end    end        for sprite in @actor_sprites      sprite.reedo_bc_sprite.character.update      sprite.update    end  end   def reedo_get_battle_sprite(sprite_id)    return nil if !sprite_id.is_a?(Fixnum)    return nil if sprite_id < 0    return nil if sprite_id >= @actor_sprites.length    return @actor_sprites[sprite_id]  end   def reedo_update_victory_dance    if @victory_delta == nil      @victory_delta = -REEDO_SBS::VICTORY_DANCE_JUMP_INCREMENT      for sp in @actor_sprites        sp.reedo_bc_sprite.character.step_anime = false      end    end    for sp in @actor_sprites      next if sp.battler.reedo_check_step_anime == false      stpt = @reedo_start_points[sp]      if sp.reedo_bc_sprite.character.screen_y < stpt[1] - REEDO_SBS::VICTORY_DANCE_JUMP_HEIGHT        if sp.reedo_victory_wait <= 0          @victory_delta = REEDO_SBS::VICTORY_DANCE_JUMP_INCREMENT          sp.reedo_victory_wait = REEDO_SBS::VICTORY_DANCE_JUMP_WAIT        else          @victory_delta = 0          sp.reedo_victory_wait -= 1        end      end      if sp.reedo_bc_sprite.character.screen_y > stpt[1]        if sp.reedo_victory_wait <= 0          @victory_delta = -REEDO_SBS::VICTORY_DANCE_JUMP_INCREMENT          sp.reedo_victory_wait = REEDO_SBS::VICTORY_DANCE_JUMP_HOVER          sp.reedo_bc_sprite.character.step_anime = false        else          @victory_delta = 0          sp.reedo_victory_wait -= 1          sp.reedo_bc_sprite.character.step_anime = true if !sp.reedo_bc_sprite.character.step_anime        end      end      if REEDO_SBS::VICTORY_DANCE_JUMP_TWIST        if sp.reedo_bc_sprite.character.screen_y <= stpt[1]          if (sp.reedo_bc_sprite.character.screen_y - stpt[1]) % (REEDO_SBS::VICTORY_DANCE_JUMP_HEIGHT / 4) == 0            case sp.reedo_bc_sprite.character.direction            when 4; sp.reedo_bc_sprite.character.set_direction(2)            when 2; sp.reedo_bc_sprite.character.set_direction(6)            when 6; sp.reedo_bc_sprite.character.set_direction(8)            when 8; sp.reedo_bc_sprite.character.set_direction(4)            end          end        else          sp.reedo_bc_sprite.character.set_direction(4) if sp.reedo_bc_sprite.character.direction != 4        end      end      sp.reedo_bc_sprite.character.screen_y += @victory_delta      sp.battler.screen_y += @victory_delta    end  endendclass Scene_Battle  attr_reader :victory_dance_time   alias reedo_sbs_sb_start start  def start    reedo_sbs_sb_start    @current_party = $game_party.members  end   alias reedo_sbs_sb_terminate terminate  def terminate    reedo_teardown_actors    reedo_sbs_sb_terminate  end   alias reedo_sbs_sb_update update  def update    if @current_party != $game_party.members      @spriteset.create_actors      @current_party = $game_party.members    end    reedo_sbs_sb_update  end   alias reedo_sbs_sb_execute_action_attack execute_action_attack  def execute_action_attack    reedo_do_execute_action("attack")  end  alias reedo_sbs_sb_execute_action_skill execute_action_skill  def execute_action_skill    reedo_do_execute_action("skill")  end   alias reedo_sbs_sb_execute_action_item execute_action_item  def execute_action_item    reedo_do_execute_action("item")  end   alias reedo_sbs_sb_process_victory process_victory  def process_victory    @victory_dance_time = true    reedo_sbs_sb_process_victory  end   def reedo_get_battle_sprite(sprite_id)    return @spriteset.reedo_get_battle_sprite(sprite_id)  end   def reedo_teardown_actors    for actor in $game_actors.members      actor.reedo_battle_sprite_id = nil if actor != nil    end  end   def reedo_do_execute_action(action_method)    targets = @active_battler.action.make_targets    if @active_battler.is_a?(Game_Actor)      reedo_actor_step_in      if REEDO_SBS::SBS_ACTION_ANIMES        targets.each do |t|          if t.is_a?(Game_Actor)            bs = reedo_get_battle_sprite(t.reedo_battle_sprite_id)            bs.reedo_bc_sprite.character.animation_id = eval("reedo_get_" + action_method + "_animation") if bs != nil          end        end      end      eval("reedo_sbs_sb_execute_action_" + action_method)      reedo_actor_step_back    else      if REEDO_SBS::SBS_ACTION_ANIMES        targets.each do |t|          if t.is_a?(Game_Actor)            bs = reedo_get_battle_sprite(t.reedo_battle_sprite_id)            bs.reedo_bc_sprite.character.animation_id = eval("reedo_get_" + action_method + "_animation") if bs != nil          end        end      end      eval("reedo_sbs_sb_execute_action_" + action_method)    end  end   def reedo_get_attack_animation    return REEDO_SBS::SBS_DEFAULT_ATTACK_ANIME  end   def reedo_get_skill_animation    skill = $data_skills[@active_battler.action.skill_id]    aid = REEDO_SBS::SBS_DEFAULT_SKILL_ANIME    aid = skill.animation_id if skill.animation_id > 0        return aid  end  def reedo_get_item_animation    item = $data_items[@active_battler.action.item_id]    aid = REEDO_SBS::SBS_DEFAULT_ITEM_ANIME    aid = item.animation_id if item.animation_id > 0        return aid  end   def reedo_actor_step_in    delta = 0    dr = REEDO_SBS::ACTOR_STEP_IN_RATE    while delta < REEDO_SBS::ACTOR_STEP_IN_DISTANCE      bs = reedo_get_battle_sprite(@active_battler.reedo_battle_sprite_id)      return if bs == nil      bs.reedo_bc_sprite.shadow_sprite.x -= dr      bs.reedo_bc_sprite.character.screen_x -= dr      bs.battler.screen_x -= dr      Graphics.update      @spriteset.update      delta += dr    end  end   def reedo_actor_step_back    delta = 0    dr = REEDO_SBS::ACTOR_STEP_IN_RATE    while delta < REEDO_SBS::ACTOR_STEP_IN_DISTANCE      bs = reedo_get_battle_sprite(@active_battler.reedo_battle_sprite_id)      return if bs == nil      bs.reedo_bc_sprite.shadow_sprite.x += dr      bs.reedo_bc_sprite.character.screen_x += dr      bs.battler.screen_x += dr      Graphics.update      @spriteset.update      delta += dr    end  endend
 

Another Fen

Veteran
Veteran
Joined
Jan 23, 2013
Messages
564
Reaction score
275
First Language
German
Primarily Uses
Hi,

You could try to erase (or comment out) these two lines:

alias reedo_sbs_ssb_create_actors create_actors  (line 378)

reedo_sbs_ssb_create_actors (line 383)

This line calls the standard process for the actor sprite creation, which creates invisible sprites for each partymember as a placeholder. These sprites get instantly replaced and are ignored from that point on anyways, so you don't really need them.

The script does not dispose those sprites properly either, which can lead to said error after the viewport these sprites are bound to got disposed.
 
Last edited by a moderator:

PaladinHeart

Veteran
Veteran
Joined
Oct 15, 2012
Messages
30
Reaction score
1
First Language
English
Primarily Uses
Thanks. I'll do that.

I found out that the sudden crashing was primarily due to another script I'm using, NeonBlack's Animated Battler Graphic script.

???nOBodY??? fixed it.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

People3_5 and People3_8 added!

so hopefully tomorrow i get to go home from the hospital i've been here for 5 days already and it's driving me mad. I miss my family like crazy but at least I get to use my own toiletries and my own clothes. My mom is coming to visit soon i can't wait to see her cause i miss her the most. :kaojoy:
Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.

Forum statistics

Threads
105,868
Messages
1,017,083
Members
137,583
Latest member
write2dgray
Top