Suggestions for the next RPG Maker

Status
Not open for further replies.

Caustic

Hopped Up on Goofballs
Member
Joined
Jan 6, 2014
Messages
182
Reaction score
39
First Language
Engrish
Primarily Uses
I think most developers are just too lazy to do as such, even when the conditions would imply that it SHOULD be done (see Chrono Trigger, FFX, and pretty much any sequence where characters are jailed/captured/etc.).

Still, it could be used to cause player distress to great effect, and would make for more "realistic" instances, considering how often characters are tossed into jail XD
 

Mike

Veteran
Veteran
Joined
Aug 28, 2013
Messages
316
Reaction score
36
First Language
English
Primarily Uses
Not sure if this has been addressed or not, but please don't delete the history/log when project is saved. Please keep them for 'undo' sake.

Sometimes I'm dealing with thousands lines of codes, and most of the time, I just need to tweak different groups of 5-6 lines with hundreds lines between each line just to test out as trial-error. After running the project couple times after some quick-tweaks to test out the output, I'd like to restore the code to previous x-tweak, but I can't undo because the log is gone or moved or not-sure-what-happens-but-it-becomes-unaccessable-from-standard-path-which-is-control-z-undo.

I've been doing an alternative path to avoid this problem from happening by storing the code to other location before starting the trial-errors, but it becomes more and more time-consuming as more tweaks are done, so if this feature could be addressed, it would save tons of time for scripters like me. : )
 

Tsukihime

Veteran
Veteran
Joined
Jun 30, 2012
Messages
8,564
Reaction score
3,848
First Language
English
I've been doing an alternative path to avoid this problem from happening by storing the code to other location before starting the trial-errors, but it becomes more and more time-consuming as more tweaks are done, so if this feature could be addressed, it would save tons of time for scripters like me. : )
Considering using an external script editor in the meantime


http://forum.chaos-project.com/index.php?topic=10420.0
 

Mike

Veteran
Veteran
Joined
Aug 28, 2013
Messages
316
Reaction score
36
First Language
English
Primarily Uses
Thanks for the feedback.

3rd party ftw. I'll definitely check it tonight. : p
 

2d_quest

Veteran
Veteran
Joined
Oct 18, 2013
Messages
60
Reaction score
7
First Language
English
Primarily Uses
Better Visually Identify Save Files

Currently it's hard to tell the difference between 2 saves if your party happens to have the same members.  I don't remmeber how much game time I've spent do you?

          Here are a couple ways to solve this (1st and 2nd probably the most effective)

1.  Attempting to save for the first time could prompt a name entry for the file and this would display on the  save slot box.

                        2.  displaying level and location you saved at

                        3.  displaying level of player

                        4.  displaying the amount of money you have

P.S.  So Zoltor, what did you think I meant in my Message Box post anyway?
 
Last edited by a moderator:

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,003
First Language
Tagalog
Primarily Uses
RMVXA
I'd go for the naming, it will really help a LOT... and lol at that PS... even I is curious as to whatever he thought, since I think your post was crystal clear
 

Zoltor

Veteran
Veteran
Joined
Jan 18, 2014
Messages
1,550
Reaction score
211
First Language
English
Primarily Uses
This is a added resource type of thing in general(for the next RTP, as well as additional resource packs that come after). It would be nice if they added individual 32x32 pics of each tile in their tilesets. This makes it infinitely easier to mix/match, add your own, while still being able to use their tiles(and the way you want to use the tiles), ect

To manually crop a 32x32 square exactly lined up with a tile in a tileset is near impossible(It's literally easier to create the tile from scratch, then to crop it perfectly from the tileset pic).
 
Last edited by a moderator:

DS Piron

Bystander
Veteran
Joined
Dec 19, 2012
Messages
70
Reaction score
5
First Language
English
Primarily Uses
This is a added resource type of thing in general(for the next RTP, as well as additional resource packs that come after). It would be nice if they added individual 32x32 pics of each tile in their tilesets. This makes it infinitely easier to mix/match, add your own, while still being able to use their tiles(and the way you want to use the tiles), ect

To manually crop a 32x32 square exactly lined up with a tile in a tileset is near impossible(It's literally easier to create the tile from scratch, then to crop it perfectly from the tileset pic).
Have you tried using the grid option?

...admittedly, I only know Gimp, but Photoshop and Paint.net should also have the capacity to display a configurable grid.

Also, I don't see how exactly it can be harder (with exceptions for when it's adjacent).

Unless you're using something like paint, but your use of the word cropping didn't make it sound like it... (but that might just be me)
 

Mike

Veteran
Veteran
Joined
Aug 28, 2013
Messages
316
Reaction score
36
First Language
English
Primarily Uses
@2d_quest

Love me will ya.

One of my earlier scripting : p

I cba to edit for the naming and proper documentation (if other scripter/user is interested in documenting this, go ahead do yourself the credit).

But this is my "AutoSave VX + Woratana Neo Save System 3.0" conversion from vx to ace by request

If you're using ace, you can use this one. If you're using vx, copy paste the title on previous sentence and search it on google.

Code:
SAVE_NUMBER = 1SAVE_ON_MAP_TRANSFER = 92SAVE_AFTER_WINNING_BATTLE = 93SAVE_AFTER_CLOSING_MENU = 94Allow_Special_Picture_To_Be_Used_For_The_File = 95module Michael_extra_save_thingy  Extra_Save_Thing = ["pick me :D","Graphics\\File",'da_map_name_here']endmodule Wora_NSS  #==========================================================================  # * START NEO SAVE SYSTEM - SETUP  #--------------------------------------------------------------------------  NSS_WINDOW_OPACITY = 255 # All windows' opacity (Lowest 0 - 255 Highest)  # You can change this to 0 in case you want to use image for background  NSS_IMAGE_BG = '' # Background image file name, it must be in folder Picture.  # use '' for no background  NSS_IMAGE_BG_OPACITY = 255 # Opacity for background image  MAX_SAVE_SLOT = 10 # Max save slots no.  SLOT_NAME = 'SLOT {id}'  # Name of the slot (show in save slots list), use {id} for slot ID  SAVE_FILE_NAME = 'Saveslot{id}.rvdata2'  # Save file name, you can also change its file type from .rvdata2 to other  # use {id} for save slot ID  SAVE_PATH = '' # Path to store save file, e.g. 'Save/' or '' (for game folder)  SAVED_SLOT_ICON = 133 # Icon Index for saved slot  EMPTY_SLOT_ICON = 141 # Icon Index for empty slot  EMPTY_SLOT_TEXT = '-NO DATA-' # Text to show for empty slot's data  DRAW_GOLD = true # Draw Gold  DRAW_PLAYTIME = true # Draw Playtime  DRAW_LOCATION = true # Draw location  DRAW_FACE = true # Draw Actor's face  DRAW_LEVEL = false # Draw Actor's level  DRAW_NAME = true # Draw Actor's name  PLAYTIME_TEXT = 'Play Time: '  GOLD_TEXT = 'Money: '  LOCATION_TEXT = 'Location: '  LV_TEXT = 'Lv '  MAP_NAME_TEXT_SUB = %w{}  # Text that you want to remove from map name,  # e.g. %w{[LN] [DA]} will remove text '[LN]' and '[DA]' from map name  MAP_NO_NAME_LIST = [] # ID of Map that will not show map name, e.g. [1,2,3]  MAP_NO_NAME_NAME = '??????????' # What you will use to call map in no name list  MAP_BORDER = Color.new(0,0,0,200) # Map image border color (R,G,B,Opacity)  FACE_BORDER = Color.new(0,0,0,200) # Face border color  ## SAVE CONFIRMATION WINDOW ##  SFC_Text_Confirm = 'Confirm to save' # Text to confirm to save file  SFC_Text_Cancel = 'Cancel' # Text to cancel to save  SFC_Window_Width = 200 # Width of Confirmation Window  SFC_Window_X_Offset = 0 # Move Confirmation Window horizontally  SFC_Window_Y_Offset = 0 # Move Confirmation Window verticallyendclass Auto_Save < Scene_Base  def initialize    DataManager.save_game_without_rescue(0)  endendclass Game_Message  attr_accessor :michael_save_file_folder_101  attr_accessor :michael_save_file_picture_extra_101  alias michael_initialize initialize  def initialize    michael_initialize    @michael_save_file_folder_101 = Wora_NSS::SAVE_PATH    @michael_save_file_picture_extra_101 = Michael_extra_save_thingy::Extra_Save_Thing  endendmodule DataManager  include Wora_NSS  class << self    alias michael_DataManager_init init    alias michael_Scene_Battle_create_game_objects_101 create_game_objects  end  def self.init    michael_DataManager_init    create_save_folder_directory  end  def create_game_objects    michael_Scene_Battle_create_game_objects_101    $game_switches[Allow_Special_Picture_To_Be_Used_For_The_File] = false  end  def self.create_save_folder_directory    if SAVE_PATH != ''      Dir.mkdir($game_message.michael_save_file_folder_101) if !File.exists?($game_message.michael_save_file_folder_101)    end    Dir.mkdir($game_message.michael_save_file_picture_extra_101[1]) if !File.exists?($game_message.michael_save_file_picture_extra_101[1])  end  def self.save_file_exists?    file_name = Wora_NSS::SAVE_PATH + Wora_NSS::SAVE_FILE_NAME.gsub(/\{ID\}/i) { '*' }    return (Dir.glob(file_name).size > 0)  end  def self.check_if_that_save_file_exists?(index)    save_file_nameeeeee = String(SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (index + 1).to_s })    return !Dir.glob(save_file_nameeeeee).empty?  end  def self.savefile_max    return Wora_NSS::MAX_SAVE_SLOT  end  def self.make_filename(index)    sprintf(String(SAVE_FILE_NAME.gsub(/\{ID\}/i) { (index + 1).to_s }), index + 1)  endendclass Scene_Base  alias michael_Scene_Base_return_scene return_scene  def return_scene    if (String(self.class) == 'Scene_Menu')      Auto_Save.new if $game_switches[SAVE_AFTER_CLOSING_MENU] == false    end    michael_Scene_Base_return_scene  endendmodule BattleManager  class << self; alias michael_BattleManager_process_victory process_victory; end  def self.process_victory    michael_BattleManager_process_victory    Auto_Save.new if $BTEST == false && $game_switches[SAVE_AFTER_WINNING_BATTLE] == false    return true  endendclass Scene_MenuBase < Scene_Base  alias michael_Scene_MenuBase_create_background create_background  def create_background    michael_Scene_MenuBase_create_background    @background_sprite.update  endendclass Scene_Map < Scene_Base  alias auto_save_bulletxt_update_transfer_player  update_transfer_player  def update_transfer_player    return unless $game_player.transfer?    auto_save_bulletxt_update_transfer_player    Auto_Save.new if $game_switches[SAVE_ON_MAP_TRANSFER] == false  endendclass Scene_File < Scene_MenuBase  include Wora_NSS  attr_reader :window_slotdetail  def start    super    create_background    create_help_window    if NSS_IMAGE_BG != ''      @bg = Sprite.new      @bg.bitmap = Cache.picture(NSS_IMAGE_BG)      @bg.opacity = NSS_IMAGE_BG_OPACITY    end    @window_slotdetail = Window_NSS_SlotDetail.new    @window_slotlist = Window_SlotList.new(0, @help_window.height)    @window_slotlist.width = 160    @window_slotlist.height = Graphics.height - @help_window.height    @window_slotlist.set_handler(:anything_goes_lol, method(:command_scene_file_ftw))    @window_slotlist.activate    @help_window.opacity = NSS_WINDOW_OPACITY    @window_slotdetail.opacity = @window_slotlist.opacity = NSS_WINDOW_OPACITY    if (String(self.class) == 'Scene_Load')      (1..MAX_SAVE_SLOT).each do |i|        @window_slotlist.draw_item(i, false) if !@window_slotdetail.file_exist?(i)      end    end    @index = first_savefile_index    @window_slotlist.index = @index    @last_slot_index = @window_slotlist.index    @window_slotdetail.draw_data(@last_slot_index)    create_confirm_window_for_scene_save  end  def command_scene_file_ftw    return on_savefile_ok  end  def create_confirm_window_for_scene_save    @confirm_window = Window_Command_Attention_Seeker.new((544 - SFC_Window_Width) / 2 + SFC_Window_X_Offset,416 / 2 + SFC_Window_Y_Offset)    @confirm_window.width = SFC_Window_Width    #@confirm_window.height = @confirm_window.fitting_height(2)    @confirm_window.set_handler(:SFC_Text_Confirm, method(:command_SFC_Text_Confirm))    @confirm_window.set_handler(:SFC_Text_Cancel, method(:command_SFC_Text_Cancel))    @confirm_window.z = 200    @confirm_window.deactivate #First_Blood    @confirm_window.hide       #Double_Kill    @confirm_window.close      #Triple_Kill  goodness...   end  def command_SFC_Text_Confirm    @confirm_window.deactivate    @confirm_window.close    determine_savefile  end  def command_SFC_Text_Cancel    Sound.play_cancel    @confirm_window.deactivate    @confirm_window.close    @window_slotlist.activate  end  def terminate    super    dispose_background    unless @bg.nil?      @bg.bitmap.dispose      @bg.dispose    end    @confirm_window.dispose    @window_slotlist.dispose    @window_slotdetail.dispose    @help_window.dispose  end  def update    super    if !@confirm_window.open?      @background_sprite.update      @window_slotlist.update      @help_window.update      update_savefile_selection    else      @confirm_window.update      update_cursor_window_command_attention_seeker    end  end  def saving_not_allowed    Sound.play_buzzer    b = Bitmap.new(340,60)    b.draw_text(0, 20,340, 20, "You can't save on the Auto Save slot.")    w = Window_Message.new    w.contents = b    w.width = 380    w.height = 100    w.visible = true    w.openness = 255    w.x = 100    w.y = 180    w.back_opacity = 255    w.opacity = 255    w.update    Graphics.wait(180)    b.dispose    w.dispose    w = nil    b = nil  end  def latest_file_index    latest_index = 0    latest_time = Time.at(0)    (1..MAX_SAVE_SLOT).each do |i|      file_name = DataManager.make_filename(i - 1)      next if !@window_slotdetail.file_exist?(i)      file_time = File.mtime(file_name)      if file_time > latest_time        latest_time = file_time        latest_index = i - 1      end    end    return latest_index  end  def update_savefile_selection    return on_savefile_ok     if Input.trigger?(:C)    return on_savefile_cancel if Input.trigger?(:    update_cursor  end  def update_cursor    last_index = @index    @counter_switch_ohhhhhh = false    cursor_down (Input.trigger?(:DOWN))  if Input.repeat?(:DOWN)    cursor_up   (Input.trigger?(:UP))    if Input.repeat?(:UP)    if @index != last_index      Sound.play_cursor      @window_slotlist.select(@index)      @last_slot_index = @window_slotlist.index      @window_slotdetail.draw_data(@last_slot_index)    end  end  def update_cursor_window_command_attention_seeker    last_index = @index    @counter_switch_ohhhhhh = true    cursor_down (Input.trigger?(:DOWN))  if Input.repeat?(:DOWN)    cursor_up   (Input.trigger?(:UP))    if Input.repeat?(:UP)    if @index != last_index      Sound.play_cursor      @confirm_window.select(@index)    end  end  def cursor_down(wrap = false)    if (@counter_switch_ohhhhhh)      if @index < 1 || wrap        @index = (@index + 1) % 2      end    else      if @index < item_max - 1 || wrap        @index = (@index + 1) % item_max      end    end  end  def cursor_up(wrap = false)    if (@counter_switch_ohhhhhh)      if @index > 0 || wrap        @index = (@index + 1) % 2      end    else      if @index > 0 || wrap        @index = (@index - 1 + item_max) % item_max      end    end  endendclass Scene_Save < Scene_File  def on_savefile_ok    super    if (@window_slotdetail.file_exist?(@last_slot_index))        Sound.play_cursor        @confirm_window.show        @confirm_window.open        @window_slotlist.deactivate        @confirm_window.activate    else      determine_savefile    end  end  def determine_savefile    if @last_slot_index + 1 == SAVE_NUMBER      saving_not_allowed      @window_slotlist.activate    else      if DataManager.save_game(@index)        on_save_success      else        Sound.play_buzzer      end    end    first_savefile_index = @last_slot_index  endendclass Window_Command_Attention_Seeker < Window_Command  def make_command_list    add_command(Wora_NSS::SFC_Text_Confirm, :SFC_Text_Confirm)    add_command(Wora_NSS::SFC_Text_Cancel, :SFC_Text_Cancel)  endendclass Window_SlotList < Window_Command  include Wora_NSS  def make_command_list    command = []    (1..MAX_SAVE_SLOT).each do |i|      command << SLOT_NAME.clone.gsub!(/\{ID\}/i) { (i).to_s }    end    command.each do |i|      add_command(SLOT_NAME, :anything_goes_lol)    end  end  def draw_item(index, enabled = true)    rect = item_rect(index)    rect.x += 4    rect.width -= 8    icon_index = 0    self.contents.clear_rect(rect)    if (DataManager.check_if_that_save_file_exists?(index))      icon_index = Wora_NSS::SAVED_SLOT_ICON    else      icon_index = Wora_NSS::EMPTY_SLOT_ICON    end    if !icon_index.nil?      rect.x -= 4      draw_icon(icon_index, rect.x, rect.y, enabled) # Draw Icon      rect.x += 26      rect.width -= 20    end    command = []    (1..MAX_SAVE_SLOT).each do |i|      command << SLOT_NAME.clone.gsub!(/\{ID\}/i) { (i).to_s }    end    self.contents.clear_rect(rect)    self.contents.font.color = normal_color    self.contents.font.color.alpha = enabled ? 255 : 128    self.contents.draw_text(rect, command[index]) if index + 1 != SAVE_NUMBER    self.contents.draw_text(rect, "Auto Save") if index + 1 == SAVE_NUMBER  endendclass Window_NSS_SlotDetail < Window_Base  include Wora_NSS  def initialize    super(160, fitting_height(1), 384, Graphics.height - fitting_height(1))    @data = []    @exist_list = []    @bitmap_list = {}    @map_name = []  end  def dispose    dispose_added_stuff    dispose_tilemap    super  end  def dispose_tilemap    unless @tilemap.nil?      @tilemap.dispose      @tilemap = nil    end  end  def dispose_added_stuff    unless @special_save_sprite.nil?      @special_save_sprite.dispose      @special_save_sprite = nil    end    unless @special_save_viewport.nil?      @special_save_viewport.dispose      @special_save_viewport = nil    end  end  def draw_data(slot_id)    contents.clear # 352, 328    dispose_tilemap    dispose_added_stuff    @special_save_viewport = Viewport.new    @special_save_viewport.z = 199    @special_save_sprite = Sprite.new(@special_save_viewport)    load_save_data(slot_id) if @data[slot_id].nil?    if @exist_list[slot_id]      save_data = @data[slot_id]      # DRAW SCREENSHOT~      contents.fill_rect(0,30,352,160, MAP_BORDER)      create_tilemap(save_data['gamemap'], save_data['gamemap'].display_x, save_data['gamemap'].display_y)      #Check Special Picture      if (save_data['gameswi'][Allow_Special_Picture_To_Be_Used_For_The_File])        if save_data['map_name'] == save_data['gamemes'].michael_save_file_picture_extra_101[2]          name = save_data['gamemes'].michael_save_file_picture_extra_101[0]          folder = save_data['gamemes'].michael_save_file_picture_extra_101[1]          @special_save_sprite.bitmap = Cache.cache_save_file_ftw(folder, name)          @special_save_sprite.src_rect.set(160, 48,348,156)          @special_save_sprite.x = 160 + 12 + 2          @special_save_sprite.y = 48 + 12 + 24 + 6 + 2        end      end      if DRAW_GOLD        # DRAW GOLD        gold_textsize = contents.text_size(save_data['gamepar'].gold).width        goldt_textsize = contents.text_size(GOLD_TEXT).width        contents.font.color = system_color        contents.draw_text(0, 0, goldt_textsize, contents.text_size(GOLD_TEXT).height, GOLD_TEXT)        contents.draw_text(goldt_textsize + gold_textsize,0,200,contents.text_size(GOLD_TEXT).height, Vocab::currency_unit)        contents.font.color = normal_color        contents.draw_text(goldt_textsize, 0, gold_textsize, contents.text_size(GOLD_TEXT).height, save_data['gamepar'].gold)      end      if DRAW_PLAYTIME        # DRAW PLAYTIME        time_string = save_data['total_sec']        pt_textsize = contents.text_size(PLAYTIME_TEXT).width        ts_textsize = contents.text_size(time_string).width        contents.font.color = system_color        contents.draw_text(contents.width - ts_textsize - pt_textsize, 0,        pt_textsize, contents.text_size(PLAYTIME_TEXT).height, PLAYTIME_TEXT)        contents.font.color = normal_color        contents.draw_text(0, 0, contents.width, contents.text_size(PLAYTIME_TEXT).height, time_string, 2)    end      if DRAW_LOCATION        # DRAW LOCATION        lc_textsize = contents.text_size(LOCATION_TEXT).width        mn_textsize = contents.text_size(save_data['map_name']).width        contents.font.color = system_color        contents.draw_text(0, 190, contents.width,        contents.text_size(LOCATION_TEXT).height, LOCATION_TEXT)        contents.font.color = normal_color        contents.draw_text(lc_textsize, 190, contents.width, contents.text_size(save_data['map_name']).height,        save_data['map_name'])      end        # DRAW FACE & Level & Name        save_data['gamepar'].members.each_index do |i|          actor = save_data['gameactor'][save_data['gamepar'].members[i].id]          face_x_base = (i*80) + (i*8)          face_y_base = 216          lvn_y_plus = 10          lv_textsize = contents.text_size(actor.level).width          lvt_textsize = contents.text_size(LV_TEXT).width        if DRAW_FACE          # Draw Face          contents.fill_rect(face_x_base, face_y_base, 100, 100, FACE_BORDER)          draw_face(actor.face_name, actor.face_index, face_x_base + 2,          face_y_base + 2, 80)        end        if DRAW_LEVEL          # Draw Level          contents.font.color = system_color          contents.draw_text(face_x_base + 2 + 80 - lv_textsize - lvt_textsize,          face_y_base + 2 + 80 - contents.text_size(LV_TEXT).height + lvn_y_plus, lvt_textsize, text_size(LV_TEXT).height, LV_TEXT)          contents.font.color = normal_color          contents.draw_text(face_x_base + 2 + 80 - lv_textsize,          face_y_base + 2 + 80 - contents.text_size(actor.level).height + lvn_y_plus, lv_textsize, contents.text_size(actor.level).height, actor.level)        end        if DRAW_NAME          # Draw Name          contents.draw_text(face_x_base, face_y_base + 2 + 80 + lvn_y_plus + 6, 84,          contents.text_size(actor.name).height, actor.name, 1)        end      end    else      contents.draw_text(0,0, contents.width, contents.height - contents.text_size(EMPTY_SLOT_TEXT).height, EMPTY_SLOT_TEXT, 1)    end  end  def load_save_data(index)    if (DataManager.check_if_that_save_file_exists?(index))      File.open(DataManager.make_filename(index), "rb") do |file|        header = Marshal.load(file)        contents = Marshal.load(file)        @exist_list[index] = true        @data[index] = {}        @data[index]['char']          = header[:characters]        @data[index]['total_sec']     = header[:playtime_s]        @data[index]['gamesys']       = contents[:system]        @data[index]['gamemes']       = contents[:message]        @data[index]['gameswi']       = contents[:switches]        @data[index]['gamevar']       = contents[:variables]        @data[index]['gameselfvar']   = contents[:self_switches]        @data[index]['gameactor']     = contents[:actors]        @data[index]['gamepar']       = contents[:party]        @data[index]['gametro']       = contents[:troop]        @data[index]['gamemap']       = contents[:map]        @data[index]['map_name']      = get_mapname(@data[index]['gamemap'].map_id)      end    else      @exist_list[index] = false      @data[index] = -1    end  end  def file_exist?(slot_id)    return @exist_list[slot_id] if !@exist_list[slot_id].nil?    @exist_list[slot_id] = FileTest.exist?(DataManager.make_filename(slot_id))    return @exist_list[slot_id]  end  def get_mapname(map_id)    if @map_data.nil?      @map_data = load_data("Data/MapInfos.rvdata2")    end    if @map_name[map_id].nil?      if MAP_NO_NAME_LIST.include?(map_id)        @map_name[map_id] = MAP_NO_NAME_NAME      else        @map_name[map_id] = @map_data[map_id].name        MAP_NAME_TEXT_SUB.each_index do |i|          @map_name[map_id].sub!(MAP_NAME_TEXT_SUB[i], '')        end      end    end    return @map_name[map_id]  end  def create_tilemap(map_data, ox, oy)    @viewport = Viewport.new(self.x + 14, self.y + 30 + 14, 348,156)    @viewport.z = self.z    @tilemap = Tilemap.new(@viewport)    load_tileset(map_data)    @tilemap.map_data = map_data.data    @tilemap.ox = ox / 8 + 99    @tilemap.oy = oy / 8 + 90  end  def load_tileset(map_data)    @tileset = map_data.tileset    @tileset.tileset_names.each_with_index do |name, i|      @tilemap.bitmaps[i] = Cache.tileset(name)    end    @tilemap.flags = @tileset.flags  endendmodule Cache  def self.cache_save_file_ftw(folder, filename)    load_bitmap("#{folder}/", "#{filename}")  endendclass Game_Interpreter  def special_picture_on(picture_name, map_name)    $game_switches[Allow_Special_Picture_To_Be_Used_For_The_File] = true    $game_message.michael_save_file_picture_extra_101[0] = picture_name    $game_message.michael_save_file_picture_extra_101[2] = map_name  end  def special_picture_off    $game_switches[Allow_Special_Picture_To_Be_Used_For_The_File] = false  endend 
 
Last edited by a moderator:

Zoltor

Veteran
Veteran
Joined
Jan 18, 2014
Messages
1,550
Reaction score
211
First Language
English
Primarily Uses
Have you tried using the grid option?

...admittedly, I only know Gimp, but Photoshop and Paint.net should also have the capacity to display a configurable grid.

Also, I don't see how exactly it can be harder (with exceptions for when it's adjacent).

Unless you're using something like paint, but your use of the word cropping didn't make it sound like it... (but that might just be me)
(I'm using Photoshop Elements 11) Didn't notice the grid option thanks, It's a bit clumsy of a feature, but I suppose it could be used for that, still it would be nice if they gave us individual pics of each tile.
 

Andar

Veteran
Veteran
Joined
Mar 5, 2013
Messages
31,431
Reaction score
7,712
First Language
German
Primarily Uses
RMMV
, still it would be nice if they gave us individual pics of each tile.
No, it won't be nicer...
There usually is a reason why things are handled like this, including tilesheets instead of tiles.


I don't want to go into computer language, but believe me the disadvantages of using single files for every tile can make a game unplayable.
 

Zoltor

Veteran
Veteran
Joined
Jan 18, 2014
Messages
1,550
Reaction score
211
First Language
English
Primarily Uses
No, it won't be nicer...

There usually is a reason why things are handled like this, including tilesheets instead of tiles.

I don't want to go into computer language, but believe me the disadvantages of using single files for every tile can make a game unplayable.
No, no, no, you missed my entire point, I didn't say replace tilesets with individual tiles, I said package individual pics of each tile in the set, so people can easily mix/match, and create their own tilesets(having to manually crop a tile out of their tilesets, to combine with your custom tileset is a nightmare).

Having individual pics of tiles, know how long it takes to put together a tileset? Seconds-minutes tops, having to crop their tileset, save each tile as a pic, just so you can combine them, know how long it will take, potentially hours, if you can ever even get it right to beginwith.
 
Last edited by a moderator:

DS Piron

Bystander
Veteran
Joined
Dec 19, 2012
Messages
70
Reaction score
5
First Language
English
Primarily Uses
No, it won't be nicer...

There usually is a reason why things are handled like this, including tilesheets instead of tiles.

I don't want to go into computer language, but believe me the disadvantages of using single files for every tile can make a game unplayable.
It doesn't sound like he's saying the tilesheets should be broken up into individual images,

but more that the RTP should provide a folder with each tile in its individual image.NINJA'd

...Which, now that I think about it, would double the size of the RTP for no reason an actual game would use.

It could be provided along with the RTP, but...
 
Last edited by a moderator:

Zoltor

Veteran
Veteran
Joined
Jan 18, 2014
Messages
1,550
Reaction score
211
First Language
English
Primarily Uses
It doesn't sound like he's saying the tilesheets should be broken up into individual images,

but more that the RTP should provide a folder with each tile in its individual image.NINJA'd

...Which, now that I think about it, would double the size of the RTP for no reason an actual game would use.

It could be provided along with the RTP, but...
That's what I meant, as a bunch of pics in a stand alone file, not actually part of the RTP.
 
Last edited by a moderator:

Andar

Veteran
Veteran
Joined
Mar 5, 2013
Messages
31,431
Reaction score
7,712
First Language
German
Primarily Uses
RMMV
No, no, no, you missed my entire point, I didn't say replace tilesets with individual tiles, I said package individual pics of each tile in the set, so people can easily mix/match, and create their own tilesets(having to manually crop a tile out of their tilesets, to combine with your custom tileset is a nightmare).
Oh, I did get your point - the problem is that each file used needs a handle for the computer, and if the editor/game would have to manage the tiles in single file format, it'll use up too much resources.
The problem isn't the size or graphic of the tile - the problem is that you need to limit the number of files to be accessed - why do you think servers on the internet usually use RAID to spread the workload over several HDD's?


You'll need an external program to copy the tiles into a single file for the tilesheet - if the game has to handle the tiles with one file per tile then things will get very difficult.
 

Tsukihime

Veteran
Veteran
Joined
Jun 30, 2012
Messages
8,564
Reaction score
3,848
First Language
English
Zoltor's idea would be very convenient.


Take a tileset image, your 256x256 sheet. Assume we're talking about page B or something.


Split it up into 32x32 as usual.


Now you have a blank tileset, and you want to pick a set of tiles.


Click on a bunch of those 32x32 tiles from one sheet and it'll automatically be inserted into your new sheet.


Now export the sheet and you have a new tileset. No need to load extra tilesets at runtime.


This is not much different from picking colors from a color wheel and forming a palette.


Should be done as an external tool since it's just image editing and has nothing to do with RM for the most part.
 
Last edited by a moderator:

DS Piron

Bystander
Veteran
Joined
Dec 19, 2012
Messages
70
Reaction score
5
First Language
English
Primarily Uses
Oh, I did get your point - the problem is that each file used needs a handle for the computer, and if the editor/game would have to manage the tiles in single file format, it'll use up too much resources.

The problem isn't the size or graphic of the tile - the problem is that you need to limit the number of files to be accessed - why do you think servers on the internet usually use RAID to spread the workload over several HDD's?

You'll need an external program to copy the tiles into a single file for the tilesheet - if the game has to handle the tiles with one file per tile then things will get very difficult.
Zoltor's idea would be very convenient.

Take a tileset image, your 256x256 sheet. Assume we're talking about page B or something.

Split it up into 32x32 as usual.

Now you have a blank tileset, and you want to pick a set of tiles.

Click on a bunch of those 32x32 tiles from one sheet and it'll automatically be inserted into your new sheet.

Now export the sheet and you have a new tileset. No need to load extra tilesets at runtime.

This is not much different from picking colors from a color wheel and forming a palette.

Should be done as an external tool since it's just image editing and has nothing to do with RM for the most part.
He's saying that these individual files won't be used by RPG Maker, you would use them in an external editor, instead of having to crop* them from the sheets by hand.

This is less a suggestion for the program, and more of an RTP suggestion.

...personally either seems superflous, but I haven't dealt much with tile editing. (and I use GIMP, which has its retangular and epilispe selections have handles, to be adjust)
 
Last edited by a moderator:

Zoltor

Veteran
Veteran
Joined
Jan 18, 2014
Messages
1,550
Reaction score
211
First Language
English
Primarily Uses
Oh, I did get your point - the problem is that each file used needs a handle for the computer, and if the editor/game would have to manage the tiles in single file format, it'll use up too much resources.

The problem isn't the size or graphic of the tile - the problem is that you need to limit the number of files to be accessed - why do you think servers on the internet usually use RAID to spread the workload over several HDD's?

You'll need an external program to copy the tiles into a single file for the tilesheet - if the game has to handle the tiles with one file per tile then things will get very difficult.
But it wouldn't, as It's not part of the database, I initially said pack with(sigh that doesn't mean part of), it wouldn't be in the database, but a stand alone file in your RPG maker folder, that just has pics in it(if people want to use one of those pics for say an event, they would have to import it, just like any other pic on your PC)
 
Last edited by a moderator:

Andar

Veteran
Veteran
Joined
Mar 5, 2013
Messages
31,431
Reaction score
7,712
First Language
German
Primarily Uses
RMMV
But it wouldn't, as It's not part of the database, I initially said pack with(sigh that doesn't mean part of), it wouldn't be in the database, but a stand alone file in your RPG maker folder, that just has pics in it(if people want to use one of those pics for say an event, they would have to import it, just like any other pic on your PC)
OK, but as I said it still needs to copy and save the single files into a tilesheet before they can be used, and for that we'll need an external program.
And that program isn't simple to make, because on the A-sheets, the tiles have different sizes (up to 192x96 for a single animated autotile)
 

Alexander Amnell

Jaded Optimist
Veteran
Joined
Mar 17, 2012
Messages
3,404
Reaction score
1,733
First Language
English
Primarily Uses
N/A
@Zoltar/Tsukihime How exactly would having individual 32 X 32 images of every tile be any more helpful (or even as helpful) as just overlaying a 32 X 32 grid at 50 opacity as a second layer over a full tile-set and then removing that layer when you are finished editing the tile-set? To me it would be infuriating because rather than then being able to copy the tiles in their entirety if it makes up a large image such as a bookshelf that takes up 6 tiles as an example using the grid-lines to copy only those 6 tiles and align them perfectly in the new tile-set for editing you'd have to open up 6 separate image files each with only 1/6 of the image and splice them together, which would still probably require you to use some sort of grid in your new tile-set to make sure that these images are aligned correctly... so I really can't envision any benefits from doing it this way.

(admittedly I use paint.net and haven't tried gimp because the installer installed malware the last time I downloaded it but I can't imagine a program praised for being more versatile wouldn't have these options.)
 
Status
Not open for further replies.

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

Latest Threads

Latest Profile Posts

Day 9 of giveaways! 8 prizes today :D
He mad, but he cute :kaopride:

Our latest feature is an interview with... me?!

People4_2 (Capelet off and on) added!

Just beat the last of us 2 last night and starting jedi: fallen order right now, both use unreal engine & when I say i knew 80% of jedi's buttons right away because they were the same buttons as TLOU2 its ridiculous, even the same narrow hallway crawl and barely-made-it jump they do. Unreal Engine is just big budget RPG Maker the way they make games nearly identical at its core lol.

Forum statistics

Threads
106,038
Messages
1,018,467
Members
137,821
Latest member
Capterson
Top