Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


UncannyBoots last won the day on May 12

UncannyBoots had the most liked content!

About UncannyBoots

  • Rank
    Advanced Member

Profile Information

  • Gender

RPG Maker Information

  • RM Skill -
    Game Developer

Recent Profile Visitors


  1. Is there a sort of "weather" or animation system that would allow for a "disco" effect? Like with multicolor circles moving around the floor as an overlay

  2. While I love VX Ace, there are still many limitations to work around (most of which are also present in MV). Which leads me to dream about what would be included in my ideal RPG Maker. Not in any order, just off the top of my head: -Events that can span multiple tiles. You'd make an event, then there would be an "event size" option. This would open a window that is very similar to the "Transfer Player" window, when you select a tile on the grid for the player to transfer to. Then you can simply click and drag the square to resize it by tiles (so no pixel resizing -- unless pixel movement were to be the default...). You could also type in the dimensions if you wanted. And to make this extremely ideal, you could also set any tile to be above player, which would work great for collisions with large sprites. This event resizing would also be great for transfer player events. -XP layering, except you can add as many layers as you want (within reason). -An event command that allows you to anchor a picture to the map and set the z value (and if it spans multiple tiles, you can change the z value for each tile, and add tall sprite functionality so the head of a tall sprite doesn't go under the picture when walking in front of it, if that's what you want) -"Find and Replace" dialogue text throughout entire project -An option to toggle between normal eventing and a new "text editor" eventing which literally allows you to type events. So it'd be like coding except with the same ease as eventing. This would be amazing for added "find and replace" functionality, and tbh I find typing in long periods of time to be more comfortable than clicking all over the place. -Set the tile size for the entire project when creating a project (or better yet, whenever you want, but that'd be more tricky). Sizes would include 16x16, 32x32, 48x48, and maybe even ones unseen by RPG Maker such as 24x24 or 62x64 (or larger). -More window customization, like adding a menu (the grey bar at the top with "File" and "Options" and stuff), enable/disable resizing. Clickteam Fusion has so many options here and it'd be cool to have for RPG Maker -Screen filters (Pixel Game Maker MV has some filters I think) and upscaling options like Nearest Neighbor or Bicubic or whatever you want -Auto tile collisions, which would allow for walking behind the top part of an auto tile (like a building) -Editor customization in general would be sweet. If you ever tried the Godot Engine, you'll know that you can move any menu wherever you want to make it as comfortable for you as possible. -This applies to MV: a built-in script editor... and while we're at it, a window resizing for the script editor. I'll come back to edit if I think of any more. I've thought about this for a long time and I'm definitely forgetting some. I'd love to read your ideas for a dream RPG Maker
  3. UncannyBoots

    Compatibility issue between movement scripts

    I don't know how I organized the scripts in that demo (I already deleted it from my pc) but I did it hastily. Did I put VE Engine above the bug fixes or something? (I just checked after redownloading the demo and yeah, that's what I did. It's not like that in my actual project tho) I put your fix into my project, and the same error continues to happen. I assume it fixed the error for you though? It might be my project so I'll redownload my demo and try it there. ...Yeah, it works in the sample project now (which is good!) but I must have yet another script in my project that is interfering with it. Sigh... I'll be looking for what it is. Thank you though! EDIT: I ended up deleting every script to see what it was that was conflicting with it, and it turns out... none of them. So it must be that I edited one of the default scripts and that is making it not work. I checkd Game_CharacterBase, Character, and Player, and none of them seem to have any changes to the direction variable. Do you have any idea what script it might be? No... it works. It was a very stupid error on my part. I fixed the typo a few posts back and I fixed it in the demo, but not in my game. Wow I'm dumb. Thank you very much for the fix, I'm so glad it works now
  4. UncannyBoots

    Compatibility issue between movement scripts

    When you input the first script call, the frame selected will be in the first character on the sprite sheet, the direction facing down. The second script call, when removing the rotational script, will then select a frame in the direction facing left (which, when using "Damage1" as an example, selects the blonde girl). When the rotation script is on, it doesn't select the left direction, it stays in the down direction. Updated the previous post, I made a typo that didn't demonstrate the script call properly. And here's a sample project showing the issue. Play once with Victor's rotational script, and play once without it. https://mega.nz/#!rEpiAALL!tv_uCDSxWBIBcwgAfF8drQk3RU1yHz-i_f5L2uCTjjU
  5. UncannyBoots

    Compatibility issue between movement scripts

    It's not an easy problem to explain but try using these script calls in a move route and see if the direction of the sprite changes. As far as I have tested, even in a new project (no other scripts) it doesn't change direction. "set_char("Damage1",1,2,2)" wait 60 frames "set_char("Damage1",1,1,4)" wait 60 frames
  6. There's a severe compatibility issue between victor's rotational moving script and the "set_char" animation script call in galv's move route script. I'm too defeated and tired to really go into detail but in a nutshell, galv's script relies on the default direction variable found in Game_CharacterBase, and victor's script completely changes how the direction variable works. This makes it so that when using "set_char" in a move route, it is impossible to select a different character direction. Victor's script splits the direction variable into three different variables, "current_direction", "final_direction" and "direction". It's very confusing to me. This is the area of galv's script that I believe needs fixing (and the "set_char" script call function is all I want from this script and is crucial): def set_char(name,index,pattern,direction) @gstop = true @direction = direction @pattern = pattern - 1 @character_name = name @character_index = index - 1 end I'll just link the entirety of Galv's script here. And here's the rotational moving script by Victor: #============================================================================== # ** Victor Engine - Rotational Turning #------------------------------------------------------------------------------ # Author : Victor Sant # # Version History: # v 1.00 - 2011.12.23 > First release # v 1.01 - 2011.12.30 > Fixed get on and off vehicle glitch # v 1.02 - 2012.01.01 > Fixed initial event direction and added new tags # v 1.03 - 2012.01.04 > Compatibility with Character Control # v 1.04 - 2012.05.30 > Compatibility with Pixel Movement # v 1.05 - 2012.07.24 > Compatibility with Moving Platforms # v 1.06 - 2012.11.03 > Fixed issue with direction ladders # > Fixed issue with direction after map transfer #------------------------------------------------------------------------------ # This scripts allows to set a different movement when the character changes # the direction he is facing, instead of facing directly the new direction # the character tunrs smoothly with a rotational movement. #------------------------------------------------------------------------------ # Compatibility # Requires the script 'Victor Engine - Basic Module' v 1.05 or higher # If used with 'Victor Engine - Multi Frames' place this bellow it. # # * Overwrite methods # class Game_CharacterBase # def set_direction(d) # # * Alias methods # class Game_CharacterBase # def init_private_members # def update # # class Game_Event < Game_Character # def clear_page_settings # def setup_page_settings # # class Game_Player < Game_Character # def initialize # # class Game_Interpreter # def comment_call # #------------------------------------------------------------------------------ # Instructions: # To instal the script, open you script editor and paste this script on # a new section bellow the Materials section. This script must also # be bellow the script 'Victor Engine - Basic' # #------------------------------------------------------------------------------ # Comment calls note tags: # Tags to be used in events comment box, works like a script call. # # <actor rotation on> # <actor rotation off> # These tags allows to turn the rotation move on or off for the player. # # <event i rotation on> # <event i rotation off> # These tags allows to turn the rotation move on or off for events. # i : event ID # #------------------------------------------------------------------------------ # Comment boxes note tags: # Tags to be used on events Comment boxes. They're different from the # comment call, they're called always the even refresh. # # <rotation move> # This tag allows the rotation move for events if VE_ROTATE_EVENTS = false # It enables the rotation move only for the page where the comment # is located # # <block rotation> # This tag disable the rotation move for events if VE_ROTATE_EVENTS = true # It disable the rotation move only for the page where the comment # is located # #============================================================================== #============================================================================== # ** Victor Engine #------------------------------------------------------------------------------ # Setting module for the Victor Engine #============================================================================== module Victor_Engine #-------------------------------------------------------------------------- # * Set rotational turning for events # If true, automatically all events will have rotational turning. # If false, you must add the rotational turning manually by adding the # comment tag for rotational turn on it. #-------------------------------------------------------------------------- VE_ROTATE_EVENTS = false #-------------------------------------------------------------------------- # * Set wait time between the frame change during rotation #-------------------------------------------------------------------------- VE_ROTATION_WAIT = 3 #-------------------------------------------------------------------------- # * required # This method checks for the existance of the basic module and other # VE scripts required for this script to work, don't edit this #-------------------------------------------------------------------------- def self.required(name, req, version, type = nil) if !$imported[:ve_basic_module] msg = "The script '%s' requires the script\n" msg += "'VE - Basic Module' v%s or higher above it to work properly\n" msg += "Go to http://victorenginescripts.wordpress.com/ to download this script." msgbox(sprintf(msg, self.script_name(name), version)) exit else self.required_script(name, req, version, type) end end #-------------------------------------------------------------------------- # * script_name # Get the script name base on the imported value, don't edit this #-------------------------------------------------------------------------- def self.script_name(name, ext = "VE") name = name.to_s.gsub("_", " ").upcase.split name.collect! {|char| char == ext ? "#{char} -" : char.capitalize } name.join(" ") end end $imported ||= {} $imported[:ve_roatation_turn] = 1.06 Victor_Engine.required(:ve_roatation_turn, :ve_basic_module, 1.05, :above) #============================================================================== # ** Game_CharacterBase #------------------------------------------------------------------------------ # This class deals with characters. Common to all characters, stores basic # data, such as coordinates and graphics. It's used as a superclass of the # Game_Character class. #============================================================================== class Game_CharacterBase #-------------------------------------------------------------------------- # * Overwrite method: set_direction #-------------------------------------------------------------------------- def set_direction(d) @stop_count = 0 return if @direction_fix || d == 0 || rotating? || (ladder_down? && d == 2) set_final_direction(d) @rotation_wait = VE_ROTATION_WAIT @clock_rotation = rotation_direction @current_direction = @final_direction if !rotation_enabled? || tranfering? update_direction if tranfering? end #-------------------------------------------------------------------------- # * Alias method: init_private_members #-------------------------------------------------------------------------- alias :init_private_members_ve_roatation_turn :init_private_members def init_private_members init_private_members_ve_roatation_turn @final_direction = 0 @current_direction = 0 @rotation_wait = 0 end #-------------------------------------------------------------------------- # * Alias method: update #-------------------------------------------------------------------------- alias :update_ve_roatation_turn :update def update update_rotation if rotating? update_ve_roatation_turn update_direction end #-------------------------------------------------------------------------- # * New method: set_final_direction #-------------------------------------------------------------------------- def set_final_direction(d) diag = $imported[:ve_diagonal_move] && diagonal_enabled? && diagonal? case d when 2 then @final_direction = diag ? 1 : 0 when 4 then @final_direction = diag ? 3 : 2 when 6 then @final_direction = diag ? 7 : 6 when 8 then @final_direction = diag ? 5 : 4 end end #-------------------------------------------------------------------------- # * New method: rotation_direction #-------------------------------------------------------------------------- def rotation_direction clock = 0 nclock = 8 clock += 1 while @final_direction != (@current_direction + clock) % 8 nclock -= 1 while @final_direction != (@current_direction + nclock) % 8 clock < (8 - nclock) end #-------------------------------------------------------------------------- # * New method: rotation_enabled? #-------------------------------------------------------------------------- def rotation_enabled? @rotation_enabled end #-------------------------------------------------------------------------- # * New method: rotating? #-------------------------------------------------------------------------- def rotating? @final_direction != @current_direction end #-------------------------------------------------------------------------- # * New method: update_rotation #-------------------------------------------------------------------------- def update_rotation @pattern = @original_pattern return @rotation_wait -= 1 if @rotation_wait > 0 @rotation_wait = VE_ROTATION_WAIT add = $imported[:ve_diagonal_move] ? 1 : 2 dir = @current_direction dir = (dir + add) % 8 if @clock_rotation dir = dir - add if !@clock_rotation dir = $imported[:ve_diagonal_move] ? 7 : 6 if dir < 0 @current_direction = dir end #-------------------------------------------------------------------------- # * New method: update_direction #-------------------------------------------------------------------------- def update_direction case @current_direction when 0 then @direction = 2; @diagonal = 0 when 1 then @direction = 2; @diagonal = 1 when 2 then @direction = 4; @diagonal = 0 when 3 then @direction = 4; @diagonal = 7 when 4 then @direction = 8; @diagonal = 0 when 5 then @direction = 8; @diagonal = 9 when 6 then @direction = 6; @diagonal = 0 when 7 then @direction = 4; @diagonal = 3 end end #-------------------------------------------------------------------------- # * New method: update_clear_direction #-------------------------------------------------------------------------- def update_clear_direction case @direction when 2 then @current_direction = @final_direction = 0 when 4 then @current_direction = @final_direction = 2 when 6 then @current_direction = @final_direction = 6 when 8 then @current_direction = @final_direction = 4 end end #-------------------------------------------------------------------------- # * New method: get_final_direction #-------------------------------------------------------------------------- def get_final_direction case @final_direction when 0 then [2, 0] when 1 then [2, 1] when 2 then [4, 0] when 3 then [4, 7] when 4 then [8, 0] when 5 then [8, 9] when 6 then [6, 0] when 7 then [4, 3] end end #-------------------------------------------------------------------------- # * New method: ladder_down? #-------------------------------------------------------------------------- def ladder_down? $game_map.ladder?(@x, @y + 1) end #-------------------------------------------------------------------------- # * New method: transfer? #-------------------------------------------------------------------------- def tranfering? $game_player.transfer? && (player? || follower?) end end #============================================================================== # ** Game_Event #------------------------------------------------------------------------------ # This class deals with events. It handles functions including event page # switching via condition determinants, and running parallel process events. # It's used within the Game_Map class. #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # * Alias method: clear_page_settings #-------------------------------------------------------------------------- alias :clear_page_settings_ve_roatation_turn :clear_page_settings def clear_page_settings clear_page_settings_ve_roatation_turn @rotation_enabled = false end #-------------------------------------------------------------------------- # * Alias method: setup_page_settings #-------------------------------------------------------------------------- alias :setup_page_settings_ve_roatation_turn :setup_page_settings def setup_page_settings setup_page_settings_ve_roatation_turn @rotation_enabled = VE_ROTATE_EVENTS || note =~ /<ROTATION MOVE>/i @rotation_enabled = false if note =~ /<BLOCK ROTATION>/i set_final_direction(@direction) @current_direction = @final_direction end #-------------------------------------------------------------------------- # * New method: rotation_on #-------------------------------------------------------------------------- def rotation_on @rotation_enabled = true end #-------------------------------------------------------------------------- # * New method: rotation_off #-------------------------------------------------------------------------- def rotation_off @rotation_enabled = false end end #============================================================================== # ** Game_Player #------------------------------------------------------------------------------ # This class handles maps. It includes event starting determinants and map # scrolling functions. The instance of this class is referenced by $game_map. #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # * Alias method: initialize #-------------------------------------------------------------------------- alias :initialize_ve_roatation_turn :initialize def initialize initialize_ve_roatation_turn rotation_on end #-------------------------------------------------------------------------- # * Alias method: get_on_off_vehicle #-------------------------------------------------------------------------- alias :get_on_off_vehicle_ve_roatation_turn :get_on_off_vehicle def get_on_off_vehicle return if rotating? get_on_off_vehicle_ve_roatation_turn end #-------------------------------------------------------------------------- # * Alias method: init_private_members #-------------------------------------------------------------------------- alias :clear_transfer_info_ve_roatation_turn :clear_transfer_info def clear_transfer_info clear_transfer_info_ve_roatation_turn update_clear_direction end #-------------------------------------------------------------------------- # * New method: rotation_on #-------------------------------------------------------------------------- def rotation_on @rotation_enabled = true @followers.rotation_on end #-------------------------------------------------------------------------- # * New method: rotation_off #-------------------------------------------------------------------------- def rotation_off @rotation_enabled = false @followers.rotation_off end end #============================================================================== # ** Game_Follower #------------------------------------------------------------------------------ # This class handles the followers. Followers are the actors of the party # that follows the leader in a line. It's used within the Game_Followers class. #============================================================================== class Game_Follower < Game_Character #-------------------------------------------------------------------------- # * New method: rotation_on #-------------------------------------------------------------------------- def rotation_on @rotation_enabled = true end #-------------------------------------------------------------------------- # * New method: rotation_off #-------------------------------------------------------------------------- def rotation_off @rotation_enabled = false end end #============================================================================== # ** Game_Followers #------------------------------------------------------------------------------ # This class handles the followers. It's a wrapper for the built-in class # "Array." It's used within the Game_Player class. #============================================================================== class Game_Followers #-------------------------------------------------------------------------- # * New method: rotation_on #-------------------------------------------------------------------------- def rotation_on each {|follower| follower.rotation_on } end #-------------------------------------------------------------------------- # * New method: rotation_off #-------------------------------------------------------------------------- def rotation_off each {|follower| follower.rotation_off } end end #============================================================================== # ** Game_Interpreter #------------------------------------------------------------------------------ # An interpreter for executing event commands. This class is used within the # Game_Map, Game_Troop, and Game_Event classes. #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # * Alias method: comment_call #-------------------------------------------------------------------------- alias :comment_call_ve_roatation_turn :comment_call def comment_call call_change_actor_rotation call_change_event_rotation comment_call_ve_roatation_turn end #-------------------------------------------------------------------------- # * New method: call_change_actor_rotation #-------------------------------------------------------------------------- def call_change_actor_rotation if note =~ /<ACTOR ROTATION (ON|OFF)>/i $game_player.rotation_off if $1.upcase == "OFF" $game_player.rotation_on if $1.upcase == "ON" end end #-------------------------------------------------------------------------- # * New method: call_change_event_rotation #-------------------------------------------------------------------------- def call_change_event_rotation if note =~ /<EVENT (\d+) ROTATION (ON|OFF)>/i $game_map.events[$1.to_i].rotation_off if $2.upcase == "OFF" $game_map.events[$1.to_i].rotation_on if $2.upcase == "ON" end end end If I can't get this solved then I will disappointingly need to remove the rotational moving script, but I've grown very accustomed to it and would prefer not to. So if the direction variable in galv's script could be made to become compatible with victor's script, that'd be awesome... but in truth, I am completely stumped in how to do that. Thank you for any support, truly
  7. How would I go about calling Common Event #8 during a map transfer? I already know where to place the code (it's in Game_Player), I just need to know what command I need to call. Thanks again 😭

    1. Show previous comments  4 more
    2. Kayzee


      Yeah, that's pretty much exactly what I thought might happen. Though actually forgot that error was a thing and I kinda thought it would just bug out and not finish the common event right.


      And as for why eventing feels so much better than scripting? Well, first of all... can you really say that what you are doing is truly pure eventing if you are using a script call like "$game_player.transfer?" in a conditional branch? :P


      But more importantly, eventing is kinda like the dark side of the force. It flows easier for a lot of people and may help you get things done quicker, but eventually it takes it's toll. Of course we should all know by now that both the Jedi and the Sith were more then a little dumb. Just because a tool has problems doesn't mean you never use it, but it does mean that it isn't always the best tool for the job. :P

    3. UncannyBoots



      I get what you mean but I couldn't just put

      "if $game_player.transfer?

      <do this>


      in a script but I could easily do it in an event.

    4. Kayzee


      I guess it's best to think of it like this: Events are handy for doing stuff yes. But scripting is more about making stuff. What I mean is, for events you are making a list of things you want to do when the event is run. Having lists of things you want to do is part of scripting too of course, but that's just part of what you are doing. A ton of scripting involves making different types of objects and telling the program what those objects are and how they work. In the context of an event a script call like "$game_player.transfer?" are like mysterious arcane words that invoke a higher power but lack any real meaning. In the context of scripting though we can understand and even change what those words actually mean.


      Once you get to an advanced enough level, I think scripting becomes so much more easy to deal with then events for a lot of things, just because without doing a lot of script calls you are pretty limited in how you can actually express your intentions. Would you rather make a complex card minigame thing as a large complicated event that uses a billion variables all over the place and probobly only half works, or would you rather be able to make it out of slightly more complex but still understandable parts? I mean using Arrays at the very least would be more helpful then a bunch of random variables. Arrays even already have a built-in way of shuffling them!

  8. UncannyBoots

    Game breaking common event problem

    I don't really know in which place to put this topic. It involves eventing which is kind of programming so I put it in this subforum. I'm having many many issues getting a motorcycle element in my game to work properly, but this is by far the biggest. I'll do a quick rundown of how the mechanic works, and what the issue is: In a parallel process common event, conditional branch checks if button is pressed. If it is, it will call another common event that changes player sprite, speed, and many other things and voila, he's riding a motorbike. It's like the Key Item button from Pokemon that allows the player to ride the bike with a press of a button. Press the button again and the opposite happens; the sprite turns back to the default player sprite, speed goes back to normal, etc. Now here's where the game breaking issue comes in. When walking onto a transfer event, right as the player moves onto that event, if you press the bike button immediately, the game transfers to the next screen and the common event is cut short. This is not a hard glitch to pull off, either. The switch that says the bike is on/off changes, but the graphic doesn't, the speed doesn't, and the other things don't change (for example, passability. You can pass over certain tiles on the bike that you cannot when walking. Player can't dash off of the bike is another thing). So the player will still be on the bike, will have a fast speed, but then cannot dash as if he is off of the bike, and can go over tiles that the bike isn't supposed to be able to ride over, because the bike switch is off, so the game thinks he's not on the bike. What truly baffles me, is that I have it so the switch turns on/off at the end of the conditional branch, while I have the dashing on/off near the middle of the command list, and everything else is either before the dash on/off or before the switch on/off. So evidently, common events don't even go through the command list in order? I haven't a single clue. Long story short, because this is complicated but this gets to the heart of the problem: How would I make it so that when pressing a button and walking onto a transfer event at the same time, the common event that gets called with that button press won't get stopped halfway through its processing?
  9. How do you check which direction the player is facing in RGSS?

    1. Show previous comments  6 more
    2. PhoenixSoul


      $game_player.direction == 8

    3. UncannyBoots


      Yep, that works! Thank you!

    4. PhoenixSoul
  10. UncannyBoots

    Galv Camera Slide issue

    I'll give it a try, I'll report back here when I finish Edit: It didn't work :/ This is the code I currently have, starting with the line with "cw=" in the script cw = (Graphics.width / 2) if !$game_switches[169] ch = (Graphics.height / 2) else if Input.press?(:A) && Input.press?(:UP) && $game_player.moving? && !Input.press?(:RIGHT) && !Input.press?(:LEFT) ch = (Graphics.height / 2 + 120) elsif Input.press?(:A) && Input.press?(:DOWN) && $game_player.moving? && !Input.press?(:RIGHT) && !Input.press?(:LEFT) ch = (Graphics.height / 2 - 100) else ch = (Graphics.height / 2) end end If you want to test it out, make a common event with a cond branch where if switch 169 is on, character speed is 5. That will match the effect I have when player is on the bike and when you press shift, the player will speed up to 6. The resolution of my game is also weird, it's 512x288, a 16:9 aspect ratio, so that's why when moving up or down at a speed of 6, the player goes off of the screen. I have customized all of my menus to fit this resolution and I like how it makes my game have a more pixel art look so I don't want to change the resolution as a solution to this problem Another edit: I just noticed that when going left then turning up and keeping your finger on the left key (or right), the camera change doesn't activate. I put !input.press(left)/(right) there in order to prevent the opposite from happening -- from keeping the up key active while moving left/right. So there's just all sorts of things going wrong here. Is there perhaps a command like $game_player.moving? that checks if the player is moving up? That would omit the directional key checks entirely while maintaining the same effect. (Fun fact: that's actually what I originally asked in this topic before editing the original post because I thought it'd be more convenient to just use a key check. I'm stupid like that) Perhaps $game_player.moving? && [check if player facing up]? ^Crossed out the above because I think it'll be an easy issue to fix. I want to focus more on the screen stuttering/lag issue in this thread. Tbh "lag" isn't the right word. It is more like screen stuttering. When you remove 'game_player.moving?" the effect is very smooth. Add that line in and it isn't smooth. I don't know why that is and it's jarring because the camera will be smooth when going left/right but not up/down.
  11. UncannyBoots

    Galv Camera Slide issue

    I'm actually having another issue. I wrote "if Input.press?(:A) && Input.press?(:UP) && $game_player.moving?" and the screen stutters and lags a bunch. Removing game_player.moving will remove the lag, but the moving check is critical because if the player isn't moving, then the camera should not move when an input is pressed. How would I make it so that the script doesn't constantly refresh and check if the player is moving every frame? I think that's what the problem is
  12. UncannyBoots

    Galv Camera Slide issue

    Thank you! I knew about those commands in the back of my mind but for some reason I couldn't remember them until reading your post. I've got bad memory I guess
  13. UncannyBoots

    Galv Camera Slide issue

    I'm back again lol. As usual I already have a gist of what needs to be done but I don't know how to actually write code in RGSS3. Unlike my last problem though I do believe this one will be a lot easier. So I'm using Galv's Cam Slide script. When riding a motorcycle in my game, you have the option to speed up. It goes very fast and when going up or down, the player outruns the screen cam slide, going off screen. The solution I'm thinking of is to change "ch = (Graphics.height / 2)" to be something like "ch = (Graphics.height / 2 + 100)" when the player is holding the up key and the shift key, and "ch = (Graphics.height / 2 - 100)" when the player is holding the down key and the shift key. How would you write that? Example: if [up key is pressed] && [shift key is pressed] ch = (Graphics.height / 2 + 100) elsif [down key is pressed] && [shift key is pressed] ch = (Graphics.height / 2 - 100) else ch = (Graphics.height / 2) end Replace the stuff inside "[ ]" with the actual script code. I don't know if you have to define button directions or not though Here's the script: #------------------------------------------------------------------------------# # Galv's Cam Slide Control #------------------------------------------------------------------------------# # For: RPGMAKER VX ACE # Version 1.0 #------------------------------------------------------------------------------# # 2015-10-09 - Version 1.0 - release #------------------------------------------------------------------------------# # This script gives the camera a slide effect and also more control of where # the camera is focused. You can set it to follow an event or scroll to an x,y # position on the map. #------------------------------------------------------------------------------- # SCRIPT CALL #------------------------------------------------------------------------------- # $game_map.camslide(status) # status can be true or false (default true) # # # when false - cam reverts to default, # # does not slide and 'scroll map' event works # # # when true - slide effect and targeting # # works but 'scroll map' does not. # # $game_map.camtarget(x,s) # x is event ID # # s is speed of camera scroll (800 default) # # the greater the speed the slower the scroll # # sets camslide to true automatically. # # $game_map.camtarget_xy(x,y,s) # x,y are the x,y co-ordinates on the map. # # s is speed (same as above) # # sets camslide to true automatically. # # $game_map.cam_default # sets camtarget back to player # # sets camslide to true automatically. #------------------------------------------------------------------------------- class Game_Player < Game_Character alias galv_scroll_gp_gc_update_scroll update_scroll def update_scroll(last_real_x, last_real_y) return if !$game_map.free_cam galv_scroll_gp_gc_update_scroll(last_real_x, last_real_y) end end class Game_Map attr_accessor :free_cam attr_accessor :camtarget alias galv_scroll_gm_initialize initialize def initialize galv_scroll_gm_initialize cam_default end def camslide(status) @free_cam = !status end alias galv_scroll_gm_setup setup def setup(map_id) cam_default galv_scroll_gm_setup(map_id) end def camtarget(x, spd = 800) @camtarget = @events[x] @free_cam = false @camspeed = spd end def camtarget_xy(x,y,spd = 800) @camtarget = Camxytarget.new @camtarget.camxy(x,y) @free_cam = false @camspeed = spd end def cam_default(speed = 800) @camtarget = $game_player @free_cam = false @camspeed = speed end alias galv_scroll_gm_update_scroll update_scroll def update_scroll return galv_scroll_gm_update_scroll if @free_cam @scroll_rest = 0 cw = (Graphics.width / 2) ch = (Graphics.height / 2) sx = 0.016 + (@camtarget.screen_x - cw).abs / @camspeed sy = 0.016 + (@camtarget.screen_y - ch).abs / @camspeed y_pos = @camtarget.screen_y.to_i x_pos = @camtarget.screen_x.to_i if y_pos < ch $game_map.scroll_up(sy) elsif y_pos > ch $game_map.scroll_down(sy) end if x_pos < cw $game_map.scroll_left(sx) elsif x_pos > cw $game_map.scroll_right(sx) end end end class Camxytarget < Game_CharacterBase def camxy(x,y) @x = x @y = y @real_x = @x @real_y = @y end end
  14. You were a help, if you didn't help me I never would have realized that changing the z value would make it so that the large sprite's head would also go under the event. It seems obvious now but yeah I totally didn't realize that at the time. While this issue isn't some game breaking issue, it is very immersion breaking. I don't want to give away too much about my game (I dunno if I will release my game under this name "Uncannyboots" or not) but my character rides a motorcycle, and when he pulls up next to another character, the front wheel of the bike goes over the waist area of the event graphic. It looks really bad and unprofessional. I could definitely come back to this issue further down the line but I thought I'd ask just in case someone knew how to write the script. Your theory is definitely a good starting point, so thank you!
  15. I asked in my status about this but the solution is beyond whatever minimal scripting ability I have. I was going to link the status update here but it doesn't seem like I can lol but it's easy to find by clicking onto my profile. The status update is " Wish I knew how to change the z value of the player or of events. Anyone have any ideas?" I was just going to let it go but then I remembered that there has already been made a similar script that fixes the way star tiles work with large sprites: ##----------------------------------------------------------------------------- # Large Sprite ☆ Display Fix v1.3 # Created by Neon Black at request of seita # v1.4 - 12.18.14 - Added position tuning # v1.3 - 1.12.14 - Viewport/position issue fixes # v1.1 - 8.18.13 - Fixed an odd lag issue # v1.0 - 8.17.13 - Main script completed # For both commercial and non-commercial use as long as credit is given to # Neon Black and any additional authors. Licensed under Creative Commons # CC BY 4.0 - http://creativecommons.org/licenses/by/4.0/ ##----------------------------------------------------------------------------- ##------ ## By default, this script only affects the player. To allow it to affect ## an event page as well, add a comment with the tag <large sprite> to the page ## of the event you would like to have affected by this. class Sprite_Character < Sprite_Base ##------ ## The ID of the terrain used to display the large character above ☆ tiles. ## If the player is below this tile (y position), the sprite will appear ## above all tiles and events from that y position up. If the player is on ## the same tile or above (y position) the event will appear BELOW ☆ tiles ## from that position up. ##------ UpperTerrain = 1 ##------ ## This value is the pixel tuning used to check the location. This is ## because characters tagged with a '!' in their name are drawn lower than ## normal characters and are considered to be lower than these. This causes ## the script to think they are on the tile below where they really are and ## draw them above tiles they should appear under. ##------ Tuning = -1 alias :cp_011214_update_bitmap :update_bitmap def update_bitmap(*args) if graphic_changed? && @set_upper_area_sprite @force_no_gfx_change = true else @force_no_gfx_change = false end cp_011214_update_bitmap(*args) end ## Alias the update method to add in the new graphic check. alias :cp_073013_update_pos :update_position def update_position(*args) cp_073013_update_pos(*args) check_encompassed_area if sprite_is_onscreen? end ## Alias the dispose to dispose the upper sprite. alias :cp_073013_dispose :dispose def dispose(*args) @upper_area_sprite.dispose if @upper_area_sprite cp_073013_dispose(*args) end #~ ## Alias the graphic changed method to allow the sprite to revent to what it #~ ## was during the last frame. This allows the check to work again. #~ alias :cp_073013_graphic_changed? :graphic_changed? #~ def graphic_changed?(*args) #~ cp_073013_graphic_changed?(*args) || @set_upper_area_sprite #~ end ## Check if the sprite is onscreen. Reduces redundant drawing. def sprite_is_onscreen? return false if @character.is_a?(Game_Vehicle) || @character.is_a?(Game_Follower) return false unless @character.is_a?(Game_Player) || @character.large_sprite return false if @character.screen_z >= 200 top_left, bot_right = get_edge_corner_dis return false if top_left[0] > Graphics.width return false if top_left[1] > Graphics.height return false if bot_right[0] < 0 return false if bot_right[1] < 0 return true end ## Get the top left and bottom right positions. def get_edge_corner_dis top_left = [self.x - self.ox, self.y - self.oy] bot_right = [top_left[0] + self.width, top_left[1] + self.height] return [top_left, bot_right] end ## Long method that checks each position and draws the upper sprite. def check_encompassed_area if @set_upper_area_sprite && !@force_no_gfx_change old_src = self.src_rect.clone self.bitmap = @old_bitmap self.src_rect = old_src end @set_upper_area_sprite = false top_left, bot_right = get_edge_corner_dis last_x, last_y, copy_region = nil, nil, 0 map_xd, map_yd = $game_map.display_x * 32, $game_map.display_y * 32 total_height = (self.height + @character.jump_height).round self.width.times do |x| xp = map_xd.to_i + top_left[0] + x unless xp / 32 == last_x last_x = xp / 32 last_y, copy_region = nil, 0 total_height.times do |y| yp = map_yd.to_i + bot_right[1] + @character.jump_height - y + Tuning next if yp.to_i / 32 == last_y last_y = yp.to_i / 32 if last_y == (@character.screen_y + @character.jump_height + Tuning + map_yd).to_i / 32 break if $game_map.terrain_tag(last_x, last_y) == UpperTerrain next end next if $game_map.terrain_tag(last_x, last_y) != UpperTerrain copy_region = [self.height, total_height - y + 1].min set_upper_sprite break end end next if copy_region == 0 rect = Rect.new(src_rect.x + x, src_rect.y, 1, copy_region) @upper_area_sprite.bitmap.blt(x, 0, self.bitmap, rect) self.bitmap.clear_rect(rect) end if !@set_upper_area_sprite && @upper_area_sprite @upper_area_sprite.visible = false end end ## Creates the upper sprite that's a copy of the current sprite. def set_upper_sprite return if @set_upper_area_sprite @upper_area_sprite ||= Sprite.new @upper_area_sprite.bitmap = Bitmap.new(self.width, self.height) props = ["x", "y", "ox", "oy", "zoom_x", "zoom_y", "angle", "mirror", "bush_depth", "opacity", "blend_type", "color", "tone", "visible", "viewport"] props.each do |meth| @upper_area_sprite.method("#{meth}=").call(self.method(meth).call) end @upper_area_sprite.z = 200 @set_upper_area_sprite = true @old_bitmap, old_src_rect = self.bitmap, self.src_rect.clone self.bitmap = Bitmap.new(@old_bitmap.width, @old_bitmap.height) self.bitmap.blt(0, 0, @old_bitmap, @old_bitmap.rect) self.src_rect = old_src_rect end end class Game_Event < Game_Character attr_reader :large_sprite alias :cp_081713_setup_page_settings :setup_page_settings def setup_page_settings(*args) cp_081713_setup_page_settings(*args) get_large_sprite_conditions end def get_large_sprite_conditions @large_sprite = true return if @list.nil? || @list.empty? @list.each do |line| next unless line.code == 108 || line.code == 408 case line.parameters[0] when /<large sprite>/i @large_sprite = true end end end end I was wondering, then, if this could be a basis for a new script that fixes large sprites going over adjacent events? Keep in mind that I am no programmer. If I was I probably wouldn't have been so drawn to using RPG Maker :P