This simple scriptlet will let you call a given Common Event by configuring the ACTORS_EVENT in such a way that it will find the target actor's current level and call the common event if any was found.
How does it find the right common event?
Well, it is very simple to explain. The scriptlet will look for the lowest level possible.
If you set a level like 5 and your actor has just reached level 2, it will trigger the level 5's common event.
Once that actor's level goes beyond that point, it will have to search for a higher level if available.
If no other level is available, nothing will happen.
If you wanna set a specific common event for the remaining levels, 100 or your game's maximum level will suffice.
I embedded some comments in the script to help you add more actors.
Right now it will only work with Aluxes aka Alex or Ralph.
For RMVX ACE
This simple scriptlet will let you call a given Common Event by leaving an extremely simple note tag in an Actor's Note Box.
Instructions for the Old Script
Code:
<level up ce 50>
Thus once the leveling up process ends, and the level up message shows up on screen, the game will call that common event in no time.
Old Script
Code:
# * Level Up Common ACE * #
# Scripter : Kyonides Arkanthes
# 2024-03-18
# Leave a tag in a given Actor's notebox.
# Example: <level up ce 100>
# And it will call that common event after the actor finishes leveling up.
module LvUpCm
COMMON_EVENT = /<level up ce (\d+)>/i
end
class RPG::Actor
def level_up_common_event
@note[LvUpCm::COMMON_EVENT]
$1.to_i
end
end
class Game_Actor
alias :kyon_lvl_up_cmmn_gm_act_lvl_up :level_up
def level_up
kyon_lvl_up_cmmn_gm_act_lvl_up
call_level_up_common_event
end
def call_level_up_common_event
event_id = actor.level_up_common_event
$game_temp.reserve_common_event(event_id) if event_id > 0
end
end
Instructions for the New Script
Code:
<level up 1-5 ce 100>
There 1 and 5 define the range of levels while 100 stands for the Common Event #100.
Thus once the leveling up process ends, and the level up message shows up on screen, the game will call that common event in no time.
This script turns the map's encounter steps as a fixed number.
It features a simple HUD to let you know when you are about to trigger a random encounter on the current map.
For RMXP
The HUD will disappear if you leave any of the terrain tags belonging to a specific troop group.
You have set no such troop groups on that map via script call?
Well, that means you will just fight the same old random troops of yore.
For RMVX
The HUD will disappear if you leave any of the monster areas.
You have set no areas on that map?
Well, that means you won't be fighting any given monster.
For RMVX ACE
The HUD will disappear if you leave any of the monster regions.
You have set no regions on that map?
Well, that means you won't be fighting any given monster.
Welcome dear readers to the latest issue of the Weekly Gazette! Here in the Gazette, we give you the news in brief of what occurred in the past week as well as provide any news happening in Save-Point itself
Official Area
Announcements and Updates
Earlier, Kirito announced that Sunday would see some Site Downtime in order to update server software. I was over an hour that he later announced that the server was updated, though some customizations were temporarily removed..
Occasions
In the middle of the week, the community was joined by Saimon, an artist and current RPGMaker XP user who has two chapters of his 11-part game worked out. He was greeted by DerVVulfman, kyonides, Remi-chan and MetalRenard who was thrilled to find another familiar with the French language.
General Chat
This week's News of the World centered around the turmoil in Haiti, the former cop turned murderous gangleader "Barbecue" issuing threats against his rule, the Dominican Republic's issues with illegal Haitian migrants and the U.N's response, U.S. President Biden's abandonment of missionaries, and Florida's DeSantis intercepting Haitian boats filled with drugs and guns. Relations between the U.S. and Israel worsen as President Biden and Senator Schumer attack Israel's Netanyahu, Israeli opposition leaders blasting them back as election interference. And as Israel rejects another unrealistic deal with Hamas, they reported that it was Hamas that opened fire against civilians waiting for aid in Gaza. Things are still hot with the war between Ukraine and Russia, last week reporting Indians forced into fighting for Russia and now a Cuban falling for a Facebook scam. And once again, President Puten threatened the west with nukes over Ukraine. Despite this and Putin's latest Presidential election victory (against whom?), more support is heading to Ukraine who had begun crossing into Russia and launching drone attacks around Moscow. For the U.S., Republicans had some political victories, President Biden ordered to continue building Trump's border wall, the stain against the Georgia court case against Trump, NYC's court case against Trump needing a 30 day postponement after revealing thousands of new pages at the last minute, and the revelation the White House attempted to interfere with Hur's Special Report on Biden. The death of a Boeing Aircraft whistleblower, the mainstream media's fake twist on Trump's Bloodbath statement, a Nigerian gunman's $620,000 ransom demand, Burger King's Open Air Drug Bazaar lawsuit, Farmers now protesting in Belgium over crippling Green policies, the U.S. investigation into the CCP's government-wide subversion, Denmark's draft espanding to women, and much more hit this week's news. Reduced from 33.5K words to 295
Tech Talk
As it has been in recent months, Artificial Intelligence penetrated the News of the Cyber World, this time with actual warnings over human extinction at its hands coincidentally as an humanoid robot was made with OpenAI as its source. And the issues of disinformation from AI too appeared as Adobe's AI was found altering history, Youtube is flooded with AI content, and five Pulitzer Prize Finalists discovered using AI for their works. For this reason and more, the E.U. now passed an act to reign in AI. On a separate issue, China is working hard to foster sentiment and hold onto TikTok in the US while more U.S. business men are looking to takeover the company, including Steven Mnuchin and the most hated man in video games, Bobby Kotick formerly of Activision. Roku sabotaging their own Televisions, the FBI monitoring online gamers for extremism, NetFlix's "Squid Game" star guilty of sexual misconduct, the Big Tech censorship case heading to the U.S. Supreme Court, and more hit the cybernew this week.
Games Development
Development Discussion
The discussion of the RPGMaker series of engines was apparently What's up among your fellow RMers as Steel Beast 6Beets and Remi-chan were both very displeased with the deminished quality of their later releases, considering profit over functionality. And of functionality, Steel Beast 6Beets discovered a feature within the RPGMaker XP editor that was concealed, something kyonides too later discovered. And as March 14, also International Pi Day given its 3/14 calendar date, is also the date Remi-chan formed her game development collective, she released the second demo for Junked at Itch Io.
Within theMaps and screenshots thread, kyondes proudly displayed his KBribe scrpt for RPGMaker XP working fine on an Android device. After that, Remi-chan posted new shots of her ingame menu's pamphlets, this followed by a video which presented one of Remi-chan's newly hired voice actresses cast the role of the Eldritch Mortician in Fantasia.
Complete Projects
This week, Starmage announced that you can find Rave Heart on Steam at a great discount price for the Steam Spring Sale.
Upcoming Projects
At long last, Steam has now greenlighted BlueSkies 3, one of the latest projects by Starmage and is now online. With that, she expects its upcoming completion.
As part of Steam's Spring Sale, you can find Starmage's Heroes of the Seasons, an entertaining Holiday romp for sale at half-price.
Material Development
Tools
After studying the features of the Win32API, kyonides updated the Linux branch of the HiddenChest RGSS Player Executable to emulate some features which would acquire window dimensions or read INI files. However, this only for the Linux branch and not available for Windows OS users.
Scripts Database
There was a bug which kyonides neede to fix with his KFactions system, along with adding a visual display for recorded quotes. And kyonides fixed bug within FancyChoices that appeared if you had more than 8 choices displayed.
Not satisfied having TextColorTags only work with RPGMaker VXAce, kyonides ported his system that lets define key words without need of control characters to both RPGMaker XP and VX. After that, he offered to port MenuDisabler to work with the RPGMaker XP engine after fixing some errors with the VXAce edition.
Designed for all thre Ruby-Script editions of RPGMaker, kyondes crafted the LoopUpdateCMD collection. It lets events refresh in the screen whilst demanding the player press any key to continue.
As part of a request, DerVVulfman worked upon Saumon's Enemy Reveals, a script that hides enemies at the start of battle within the default battlesystem until it is time for them to be revealed.
Creativity Section
Art and Design
Upon entering Remi-chan's Neato Arty thread thing, you will see that she honored National Panda Day by taking time for a new original character. Thewi is a an adorable panda girl which she illustrated just this weekend. Enjoy the newest creation and the speed draw which Remi-chan had provided.
"When a man steals your wife, there is no better revenge than to let him keep her." - Sacha Guitry (1885-1957)
PROSPECTIVE GAZETEERS!
If you are the creator of a thread in Save-Point, you have the option of sending/writing your own entry into the Gazette. The Gazette accepts write-in announcements (which will be doublechecked). Likewise, the Gazette would welcome other content such as a comic-strip series, ongoing story arc, or the like.
Just PM DerVVulfman with the submissions. Submissions must be in by 10pm EST.
This script makes it possible to define enemies within a troop as hidden until revealed during battle. This useful for battles where a boss enemy may be one to summon underlings to fight.
This script makes it possible to define enemies within a troop as hidden This assumes that all enemies are defined within the appropriate Troops page. But once done, it is a simple matter to update the TROOP array in the Saumon_Reveal configuration module.
Script
REVEAL!!!
Code:
#==============================================================================
# ** Saumon's Enemy Reveals
#------------------------------------------------------------------------------
# by DerVVulfman
# version 1.0
# 03-12-2024 (mm/dd/yyyy)
# RGSS / RPGMaker XP
#==============================================================================
#
# INTRODUCTION:
#
# This script makes it possible to define enemies within a troop as hidden
# until revealed during battle. This useful for battles where a boss enemy
# may be one to summon underlings to fight.
#
# This script makes it possible to define enemies within a troop as hidden
# This assumes that all enemies are defined within the appropriate Troops
# page. But once done, it is a simple matter to update the TROOP array in
# the Saumon_Reveal configuration module.
#
#
#------------------------------------------------------------------------------
#
# INSTALLATION:
#
# Place this script below Scene_Debug and above Main. Then configure the
# TROOPS hash array for any battles needed.
#
#
#------------------------------------------------------------------------------
#
# CONFIGURATION:
#
# This is relatively simple.
#
# TROOP[key] = [ collection of enemy/anim arrays ]
#
# Each TROOP entry has a key, this key is the ID of the Troop within the
# RMXP database. Each Troop entry is also assigned an array that has one
# or more enemy/animation arrays within.
#
# TROOP[12] = [ [0,49], [2,16] ]
#
# The above example TROOP entry will alter Troop #12, the battle with three
# Cockatrice. I t will hide the 1st and 3rd (assuming enemy index 0 and 2),
# and give each enemy its own animation when revealed. The first enemy
# will have a 'Darkness 2' animation (49) played while the third enemy will
# play the 'HP Recovery 2' animation when revealed.
#
# DO NOTE: An animation ID must be given. IF you do not wish an enemy to
# have an animation, supply '0' as the animation ID instead.
#
#
#------------------------------------------------------------------------------
#
# SCRIPT CALLS:
#
# There are really only two, and very easy to understand, And the script
# will already recognize which troop is currently in battle.
#
# NOTE: If used in battle with a Troop not defined, they will not work.
#
# * battle_reveal_id(member_index)
# ------------------------------
# This command will reveal a single enemy that has been hidden. It goes
# by the 'member_index' which assumes the first enemy defined within
# the troop is enemy #0. This assumes the order in which the enemies
# are shown and not the ID of the enemy within the Enemy Database.
#
# Ex: battle_reveal_id 1
# This reveals the 2nd enemy in the troop, not the first.
#
#
# * battle_reveal_all
# ------------------
# This command will reveal all currently hidden/concealed enemies defined
# for this troop. If any enemies were previous revealeda and then killed,
# they will not accidentally re-appear.
#
#
#------------------------------------------------------------------------------
#
# COMPATIBILITY:
#
# Fairly compatible for RPGMaker XP systems. It doesn't rewrite any methods
# in the system.
#
#------------------------------------------------------------------------------
#
# CREDITS AND THANKS:
#
# Thanks to Saumon of Save-Point.Org for the simple request.
#
#
#==============================================================================
#
# TERMS OF USE:
#
# Free for use, even in commercial games. Only due credit is required, for
# both myself and Saumon who put forth the request
#
#
#==============================================================================
module Saumon_Reveal
#--------------------------------------------------------------------------
TROOP = {} # Do not touch
#--------------------------------------------------------------------------
# TROOP BY ID LIST OF ENEMY/ANIMs
# =========== =========================
TROOP[1] = [ [0,16] ]
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
# This class handles enemies. It's used within the Game_Troop class
# ($game_troop).
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :member_index # index of enemy within a given troop
end
#==============================================================================
# ** Game_Troop
#------------------------------------------------------------------------------
# This class deals with troops. Refer to "$game_troop" for the instance of
# this class.
#==============================================================================
class Game_Troop
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias game_troop_saumon_reveal_setup setup
#--------------------------------------------------------------------------
# * Setup
# troop_id : troop ID
#--------------------------------------------------------------------------
def setup(troop_id)
#
@troops_hidden_summon = []
#
# Perform the original method
game_troop_saumon_reveal_setup(troop_id)
#
# Exit unless for a defined troop
return unless Saumon_Reveal::TROOP.has_key?(troop_id)
#
# Acquire list of concealed enemies
list = Saumon_Reveal::TROOP[troop_id]
#
for id in list
@troops_hidden_summon.push(id[0])
end
#
# Cycle through enemies
for enemy in list
id = enemy[0]
next if @enemies[id].nil? # Skip if enemy invalid
@enemies[id].hidden = true # Make hidden
@enemies[id].hp = 0 # Erase HP to make untargetable
end
#
end
#--------------------------------------------------------------------------
# * Reveal all enemies within a troop
# troop_id : troop ID
#--------------------------------------------------------------------------
def reveal_all(troop_id)
#
# Exit unless for a defined troop
return unless Saumon_Reveal::TROOP.has_key?(troop_id)
#
# Acquire current troop data
troop = $data_troops[troop_id]
#
# Cycle through entire troop
for enemy_id in 0...troop.members.size
reveal_id(troop_id, enemy_id)
end
#
end
#--------------------------------------------------------------------------
# * Reveal an enemy within a troop by its id
# troop_id : troop ID
# enemy_id : enemy ID
#--------------------------------------------------------------------------
def reveal_id(troop_id, enemy_id)
#
# Exit unless for a defined troop
return unless Saumon_Reveal::TROOP.has_key?(troop_id)
#
# Exit unless enemy is in concealed list
return unless @troops_hidden_summon.include?(enemy_id)
#
# Define default ID push
temp_array = [0,0]
#
# Using configured list...
list = Saumon_Reveal::TROOP[troop_id]
#
# Cycle through the list
for arrays in list
# and define the proper enemy/animation array
temp_array = arrays if arrays[0] == enemy_id
end
#
troop = $data_troops[troop_id] # Get troop data
temp = Game_Enemy.new(troop_id, enemy_id) # Get enemy data from troop
@enemies[enemy_id].hp = temp.hp # Restore health from data
@enemies[enemy_id].hidden = false # Make visible
@troops_hidden_summon.delete(enemy_id) # Erase from list
$scene.reveal_ids.push(temp_array)
end
end
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
# This interpreter runs event commands. This class is used within the
# Game_System class and the Game_Event class.
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# * Reveal all summonnable or concealed enemies
#--------------------------------------------------------------------------
def battle_reveal_all
#
id = $game_temp.battle_troop_id
$game_troop.reveal_all(id)
#
end
#--------------------------------------------------------------------------
# * Reveal summonnable or concealed enemy by ID
# enemy_id : enemy ID
#--------------------------------------------------------------------------
def battle_reveal_id(enemy_id)
#
id = $game_temp.battle_troop_id
$game_troop.reveal_id(id, enemy_id)
#
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :reveal_ids # enemy id/animation combinations
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias scene_battle_saumon_reveal_main main
alias scene_battle_saumon_reveal_setup_battle_event setup_battle_event
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
#
# Create the id/animation combo array
@reveal_ids = []
#
# Perform the original method
scene_battle_saumon_reveal_main
#
end
#--------------------------------------------------------------------------
# * Battle Event Setup
#--------------------------------------------------------------------------
def setup_battle_event
#
# Perform the original method
scene_battle_saumon_reveal_setup_battle_event
#
# Cycle through the id/animation combo array
for id in @reveal_ids
#
# Acquire individual enemy and animations
enemy_id = id[0]
enemy_anim = id[1]
#
# Cycle through current troops
for enemy in $game_troop.enemies
# Skip if stored enemy ID not a match
next unless enemy.member_index == enemy_id
# Apply stored animation to enemy and pop the animation
enemy.animation_id = enemy_anim
enemy.damage_pop = true
end
#
end
#
# Erase the array for the next round/turn
@reveal_ids = []
#
end
end
Instructions
Plenty, and within the script.
Compatibility
Fairly compatible for RPGMaker XP systems. It doesn't rewrite any methods in the system.
Credits and Thanks
Thanks to Saumon of Save-Point.Org for the simple request.
Terms and Conditions
Free for use, even in commercial games. Only due credit is required, for both myself and Saumon who put forth the request
This scriptlet lets you create an update method that will refresh everything on screen while forcing the player to trigger some button to break the loop.
Take in consideration that the loop event command was not meant to be used this way. Thus, there was a need to create a simple way that could let you enable the Input.trigger? method almost as if you were creating a custom scene of your own.
How to Use
Create a loop and leave this script call inside.
Code:
loop_update
It must be the very first thing it processes there.
# This scriptlet lets you create an update method that will refresh everything
# on screen while forcing the player to trigger some button to break the loop.
module LoopUpdate
extend self
attr_accessor :spriteset
end
class Interpreter
def loop_update
Graphics.update
Input.update
$game_map.update
$game_system.update
$game_screen.update
LoopUpdate.spriteset.update
return true
end
end
class Spriteset_Map
alias :kyon_loop_up_cmd_sprtst_map_init :initialize
def initialize
LoopUpdate.spriteset = self
kyon_loop_up_cmd_sprtst_map_init
end
end
# This scriptlet lets you create an update method that will refresh everything
# on screen while forcing the player to trigger some button to break the loop.
module LoopUpdate
extend self
attr_accessor :spriteset
end
class Game_Interpreter
def loop_update
Graphics.update
Input.update
$game_map.update
$game_system.update
LoopUpdate.spriteset.update
return true
end
end
class Spriteset_Map
alias :kyon_loop_up_cmd_sprtst_map_init :initialize
def initialize
LoopUpdate.spriteset = self
kyon_loop_up_cmd_sprtst_map_init
end
end
# This scriptlet lets you create an update method that will refresh everything
# on screen while forcing the player to trigger some button to break the loop.
module LoopUpdate
extend self
attr_accessor :spriteset
end
class Game_Interpreter
def loop_update
Graphics.update
Input.update
$game_map.update
$game_timer.update
LoopUpdate.spriteset.update
return true
end
end
class Spriteset_Map
alias :kyon_loop_up_cmd_sprtst_map_init :initialize
def initialize
LoopUpdate.spriteset = self
kyon_loop_up_cmd_sprtst_map_init
end
end
Welcome dear readers to the latest issue of the Weekly Gazette! Here in the Gazette, we give you the news in brief of what occurred in the past week as well as provide any news happening in Save-Point itself
Official Area
Occasions
When Junior5a showed up, he was worried that he'd get bitten for mentioning he also saw RPGMakerWeb. The resident werewolf suddenly appeared, but noted that users of older game engines don't get as much assistance. The reply cracked him up.
General Chat
Early this week, the U.S. Supreme Court's ruling that States cannot disqualify Trump hit the News of the World, this accellerating Trump's Presidential bid as Nikki Haley bails out of the race, and both Hungary and South Korea predicts his re-election. But on the attack, California's Adam Schiff suggests that the Intelligence Community should sabotage his briefings and Iran begins recruiting assassins to go after Trump officials. Illegal Aliens in the U.S. hit the news as the NYPD busts illegal immigrant shelters, cartels shoot down helicopters, and Arizona democrats veto bills to let police arrest Illegal aliens as crime soars. Consider that New York called the National Guard to protect subway commuters, and Montana saw a 20k percent rise in fentanyl seizures under Biden's watch. For U.S. President Biden, there certainly were moments within his State of the Union Address, criticized six times by the New York Times for accuracy, protested by pro-Palestine groups outside, refusing to call out China over their actions, and heckled by the gold-star father of a marine killed during Biden's Afghanistan withdrawl whom was later himself arrested. Conflict in the Middle East is still on the radar, the United Nations still refusing to call Hamas a terrorist group even after the UN finally confirms Hamas has indeed raped Israeli hostages. To those in Gaza, Israel sent more than 5000 Tons in aid, and found that the UNRWA has been using Hamas to make deliveries. And after the U.S. State department stated that they would ensure Gaza aid would not be stolen, reports circulated that an aid airdrop crashed in Gaza, killing five and wounding ten. Conflict between Ukraine and Russia too continues, reports appearing of Russia's high casualties. Despite the implications, the Vatican still suggests Ukraine negotiate for peace against their attackers. And more issues like with Russia, India finding that Russia responsible for redirecting airflights heading to UAE into Russia instead, and coercing citizens to fight against Ukraine. Some have died. Europe takes note, Sweden officially joining Nato while Poland suggests NATO's future involvement isn't out of the question. However, the U.K. slams Germany's claim of British troops appearing in Ukraine and suggests Berlin penetrated by Russian spies. Turbulence hit China as both record-low birthrates and a struggling economy was revealed. Connections to China also hit as Hunter Biden was hit with a $1Million reimbursement lawsuit from a Chinese Client. And Discovery Channel laments co-producing a travel program on behalf of the CCP that covered up the Uygar Genocide. And green energy hit the news as U.S.'s John Kerry confirmed it would cost trillions to reduce emissions, all while China and India not only refuse to abandon coal energy, but build more plants. And in Poland, tear gas was used against farmers struggling against EU's strangling green energy policies. Speculations of a Maduro regime killing in Chile, the U.S. Attorney General vowing to fight against Voter ID laws despite overwhelming support, the death of Akira Toriyama the creator of Dragon Ball, a 4000 man prison break and Haitian insurrection, and much, much more hit this week's news Reduced from 28K words to 516
Tech Talk
The world of AI reigns within the News of the Cyber World, with one of Microsoft's AI actively developing a God Complex, while Google's AI shows a very definite political slant. And just as the Actor's guild in Hollywood rallied against AI taking over their jobs, now the other Unions have given them fair warning. TicTok too hit this week's news as the U.S. Congress considers a national ban. But rather than eliminating the service, the owner of Shark Tank offers to purchase it away from China's control. For gaming enthusiasts, A gaming consultant that many large companies have used may be the cause of various games being lackluster in storytelling. The company attempted to have a Steam page that listed their works removed, but failed epically. Meanwhile, be mindful that Facebook will be deleting all Oculus acounts by this month's end. Theft of intellectual properties by China also hit this week's cybernews, Chinese nationals arrested for stealing Google AI tech and an Army Intelligence Analyst selling secrets to China. Golden Corral's data breach, the sharp increase in Instagram and Facebook accounts hacked, Sam Altman Returns to OpenAI, Apple's $2 Billion Anti-Competition fine, Terrorist Investigators in Germany looking into sabotage of a Tesla factory, the 24% iPhone sales crash, and more hit this week's cybernews.
Two weeks ago, it was revealed that a treasure trove of leaked espionage tools and hit lists originated from Chinese Hackers masquerading as a cybersecurity company known as I-Soon. This week, its been confirmed that the hackers worked to inviltrate NATO, India, South Korea and other foreign adversaries of China. And I-Soon had developed new hacking tools, including tools to break into Twitter/X accounts to steal phone numbers, email accounts and personal messages while bypassing its two-factor authentication process..
Games Development
Development Discussion
The dialogue that Was up with RMers this week was the release of RPGMaker WITH, an RPGMaker software for the Nintendo Switch. Melana was curious about it, noting it had some new run time graphics. But kyonides Steel Beast 6Beets and Remi-chan were of the same mind, believing that this incarnation of RPGMaker would be a failure and that the system would not be worth the money. Normally, Remi-chan has a deadline for the release of demos for her game, Fantasia. However she has working demos for Flight and a second demo for Junked, and released new artwork for Fantasia as well as some new optional content.
Material Development
Scripts Database
Early this week, kyonides decided to craft KFoesFly, a script that lets those using RPGMaker XP create enemies that were difficult to attack as they were airborne and could be out of the heroes' reach.
In the middle of the week, kyonides rebranded one of his scripts KDefense XP after updating the feature to increase defense, its previous name assuming it only lowered.
Near the end of the week, the FancyChoices set by kyonides has now been expanded, allowing 12 choices to be visible on the screen at the same time.
If you need more than one fog at a time, DerVVulfman updated Unlimited Fogs to fix an issue where the fog effects would vanish upon entering/exiting a menu. However, he notes the code that backs up and restores the fogs was courtesy of Heretic.
Creativity Section
Music and Audio
For those making games with science fiction themes, the past couple of months have been excellent for those visiting Eric Matyas's collection of Original Music and Sound Effects. Following a trend, he composed "Across the Martian Desert", a synth piece that would fit well with other works such as Janurary's release, Ancient Mars.
Art and Design
Unlike other times one walks throug the halls of Remi-chan's Neato Art Thread Thing, you will not be caught by colors and lighting mezmerizing and fierce. Instead, it was a time for illustrations and sketches, pencilwork an line art yet to be finished.
Well, that's it for this week.
"People say that nothing is impossible. But I do nothing every day." - A.A. Milne
PROSPECTIVE GAZETEERS!
If you are the creator of a thread in Save-Point, you have the option of sending/writing your own entry into the Gazette. The Gazette accepts write-in announcements (which will be doublechecked). Likewise, the Gazette would welcome other content such as a comic-strip series, ongoing story arc, or the like.
Just PM DerVVulfman with the submissions. Submissions must be in by 10pm EST.
Define certain foes as flying battlers to make them a lot harder to hit by your poor heroes!
The script does not really alter the GUI at all, except for displaying a 0 as a failure.
Required Steps
1. You need to have set a Bird or Avian Element in the System Tab. 2. The value of the BIRD_ELEMENT constant should be equal to that element ID. 3. Set a percentage to the EVASION_CORRECTION_CHANCE constant. No % symbol needed. 4. Set Hit Reduction chances and Damage Reduction percentage for specific heroes and some default values as well. 5. Playtest your game!
Welcome dear readers to the latest issue of the Weekly Gazette! Here in the Gazette, we give you the news in brief of what occurred in the past week as well as provide any news happening in Save-Point itself
Official Area
General Chat
For the U.S. backlash over Laken Riley's murder by an Illegal Alien hit the News of the Word[/Highlght], President Biden refusing to speak of her at his visit to the Southern Border while vowing to use her death for gun bans despite her death not gun related. The Biden name appears to be hitting more hot water, $40K oc Chinese funds going to President Biden through his brother James, former Hunter associates confirming phone calls with Russian Oligarchs, and Biden's son claiming the inability to remember questions of text messages and eMails during his closed-door deposition this week. Towards former Preident Trump, the appeal against the New York Civil Case was filed, legal scholars calling the $355 Million fine extreme and abusive. And while news comes out about the Georgia AG going after Trump and her staff, and that Illinois filed to ban Trump as a candidate, the Supreme Court stated it would make a ruling if Trump was Immune for prosecution. In other elecoral news, Mexico's President Andres Manuel Lopez Obrador gets slammed for Doxxing rival candidates, admitting he didn't care if laws were even broken. Hundreds die and thousands become violently ill in Indonesia from stress related medical conditions working the 2024 elections. And the Ayatollas vow to eliminate elections in Iran for national security. The Iran-backed Houthis stepped up their game, actively sabotaging and cutting vital underwater communication cables and sinking a cargo ship in the Red Sea, celebrating their ability to disrupt the seas. But that is one factor in the world-wide issues with terrorists, Hamas calling for Terror during Ramadan. While Arab states apparently want Hamas and Hizbulla destroyed, and as reports of a shootout occuring in Russia with ISIS terrorists, US President Biden plans aid relief drops in Gaza in which a New York Times admits would likely be stolen by Hamas alone. Towards Ukraine and its war against invading Russia, President Zelensky made claim that Ukraine received only 30% of the munitions recently promised. And after references of French, UK and German Troops in Ukraine, Moscow hinted to war with Nato and the use of nukes. Documents proving China illegally arming criminals in the US with machine pistols and illegal Chinese Fishing Fleets stripping South American resoures,Politico blasted for calling Christians believing in god-given rights 'Extremists',China-Led BRICS Coalition crumbling under expectations of a second Trump Presidency,the UK's loss of farming land and 'Food Security' to Green Energy policies,South Korea seeks criminal charges against nearly 9000 doctors on strike, Argentina's war against woke changes to the language, and another historic record snowfall in California hit this week's news. Reduced from 30.6K words to 438
Tech Talk
Issues with Artificial Intelligence continued to hit the [Highlight]News of the Cyber World[/Highlght], with more flak hitting Google over its AI's apparent bias and its team leader Jack Krawczyk 's predisposition. Worse yet, Gemini AI could not even criticize offences such as pedophelia. But recently, it was found that Meta's own AI has its own issues with AI Image generator. Despite this, the The British Broadcasting Corporation (BBC) plans to use AI to form news headlines, and the UK use AI to eliminate 66,000 Civil Servant jobs. And while nations such as the U.S. have considered the use of China-Owned TikTok as a national security threat, China is citing that US President Biden's use of the platform reflects a double standard. Lawsuits against OpenAI over its abandonment of its non-profit mission, and news organizations lawsuit over OpenAI and ChatGPT's use of copyrighted content without renumerations, and more hit this week's cybernews.
Games Development
Development Discussion
The inability to release the upcoming demo for Fantasia was [Highlight]What's up with the RMer[/Highlght] known as Remi-chan. However, she made mention the upcoming release of a new Junked demo, Junked being one of her earlier ventures. And she stated that Flight would too be receiving some new game content.
Material Development
Scripts Database
For those wanting enhanced flexibility with the fog system, DerVVulfman presented the [Highlight]Unlimited Fogs[/Highlght] script for RPGMaker XP. Originally by game_guy, this script lets one add additional fogs to the system while the original fog system remains intact. He added some protective features, mainly preventing the system crashing if fog textures are missing and allowing the main feature that adds fogs function in parallel processes with no issues.
Venturing back to 2019, kyonides looked into his [Highlight]KScenario XP & Gosu[/Highlght] scriptset, mainly reworking constants for RPGMaker XP usage and the inclusion of graphic resources. He later returned after adding lighting and face-image options and repaired directory errors.
A while ago, kyonides released [Highlight]KPrankster XP[/Highlght], a script that lets enemies prank the heroes in battle by stealing/swapping out the heroes items. Now, enemies may now inflict a random state upon their targets.
Over a year ago, kyondes wrote a script that could deliver repercussions if a hero used a skill in combat too powerful to maintain. But now, [Highlight]KBackFire[/Highlght] now allows the player to wear special gear to protect the user if their skills go out of control.
The recent updates that kyonides made to [Highlight]FancyChoices[/Highlght] allows one to have up to 8 choices shown on the screen, first for RPGMaker XP and then for RPGMaker VX.
Creativity Section
Music and Audio
For those working on world-spanning games and have need of music to play within island vistas, then you will love that Eric Matyas continues [Highlight]Sharing His Original Music[/Highlght]. His latest piece, "Windle Pixel's Seaside Adventure", is a lively piece for music along the beach shore.
Art and Design
For ten years, Eric Matyas had crafted his SoundImage website. And as a celebration, his [Highlight]Massive Library of Free Images[/Highlght] now boasts two new wood textures of a light tan grain within his Tileable wood texture page. And while he still shares his music in MP3 format for free, he released a Gumroad Audio link for his paid Ogg music.
Literature Section
While other demos are in the works, [Therad=8405][Highlight]Remi-chan's Writing Snippets[/Thread] reveals a heart-to-heart with the once-feared architect and the three heroic systers fighting for their imperfect future. Though fated to fight and not hold back, the demon with triangle eyes admits to herself and the three her doubts, her feelings and her life.
Filmography
Though Fantasia isn't being released on March 14th this year, Remi-chan's Cinematic Theatre presents battles within the game, both new and already present. After that, some artwork of characters within the game had followed as well as an apology for not making the 3/14 deadline for which she strives to always reach.
Well, that's it for this week.
"This music won't do. There's not enough sarcasm in it." - Samuel Goldwyn (1882-1974)
PROSPECTIVE GAZETEERS!
If you are the creator of a thread in Save-Point, you have the option of sending/writing your own entry into the Gazette. The Gazette accepts write-in announcements (which will be doublechecked). Likewise, the Gazette would welcome other content such as a comic-strip series, ongoing story arc, or the like.
Just PM DerVVulfman with the submissions. Submissions must be in by 10pm EST.
Unlimited Fogs Version: 1.5
Based on version 1.2 by game_guy
Introduction
Ever need more than one fog for a map? Maybe more than two fogs? With this unique script, you can have unlimited fogs on one map! And with a few easy script calls, you can customize every aspect of a fog at anytime!
Do be aware, the fogs applied with this script only appear after the field map(s) have been entered. As fast as it may be, only those fogs that are attached to tileets are created simultaneously. Fortunately,this script is only a supplement, able to work in tandem with the default system.
Features
Unlimited Fogs on Any Map
Change Fog's properties at any time
Easy to use script calls
Does not replace the existing fog system
Fog addition system functional with parallel processes (new v 1.4)
Missing fog files no longer crash the game (new v 1.3)
Fogs restore when exiting menu or loading saves (new v 1.5)
Script
Enjoy
Code:
#==============================================================================
# Unlimited Fogs
# -------------------------------------------------------------------------
# by DerVVulfman (February 26, 2024)
# Version 1.5
# Based on Unlimited Maps v 1.2 by game_guy
# RGSS / RPGMaker XP
#==============================================================================
#
# INTRODUCTION:
# =============
#
# Ever need more than one fog for a map? Maybe more than two fogs? With this
# unique script, you can have unlimited fogs on one map! And with a few easy
# script calls, you can customize every aspect of a fog at anytime!
#
# Do be aware, the fogs applied with this script only appear after the field
# map(s) have been entered. As fast as it may be, only those fogs that are
# attached to tileets are created simultaneously. Fortunately,this script is
# only a supplement, able to work in tandem with the default system.
#
#
#------------------------------------------------------------------------------
#
# FEATURES:
# =========
#
# * Unlimited Fogs on Any Map
# * Change Fog's properties at any time
# * Easy to use script calls
# * Does not replace the existing fog system
# * Fog addition system functional with parallel processes (new v 1.4)
# * Missing fog files no longer crash the game (new v 1.3)
# * Fogs restore when exiting menu or loading saves (new v 1.5)
#
#
#------------------------------------------------------------------------------
#
# INSTRUCTIONS:
# =============
# Paste below Scene_Debug and above main. If used with any other script that
# alters the environment, place Unlimited Maps below them in order to take
# advantage of its custom script calls.
#
# As there isn't anything to configure, let's get onto the script calls!
#
#
#------------------------------------------------------------------------------
#
# SCRIPT CALLS:
# =============
#
# Adding a fog:
# -------------
# This command adds a fog, defining its graphic and inserting it into the
# fogs array. Speed, depth and other factors are optional. This does not
# add or set default RPGMaker XP fog settings, but only that from this
# script.
#
# syntax: add_fog( index, file, [,z [,scroll_x [,scroll_y [,opacity
# [,zoom [,blend [,hue]]]]]]] )
#
# * index - The index/ID of the fog in the array, used to keep track of the
# fogs on screen (more on this later)
# * file - The filename for the fog read from your Graphics\Fogs folder
# * z - (Optional) The z-Depth of the defined fog. This is used for
# layering/overlapping. (Default: 3000)
# * scroll_x - (Optional) The fog's Horizontal scrolling speed. (Default: 0)
# * scroll_y - (Optional) The fog's Vertical scrolling speed. (Default: 0)
# * opacity - (Optional) Opacity of the fog in a 0-255 range. (Default: 64)
# * zoom - (Optional) Zoom level for the fog. (Default: 1.0)
# * blend - (Optional) The fog's blending mode in a 0-2 range:
# (0: Normal, 1: Add, 2: Subtract). (Default: 0)
# * hue - (Optional) Hue for the fog in a 0-360 range. (Default: 0)
#
#
# Note: When using this script call, the parameters with default values don't
# need to be set when calling it.
# e.g. add_fox(1, "001-Fog01") - Works because all parameters after
# has a default value.
#
# This script call simply adds a fog with the set parameters.
#
# NOTE: Safeguards were put in place to ensure that this call may be
# used within a parallel process. Its execution is delayed until
# the current field map generated and actively displayed.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# * * *
#
# Removing a fog:
# ---------------
# This script call simply removes a fog defined by this script. It does not
# erase/remove fogs defined by the default RPGMaker XP fog system.
#
# syntax: remove_fog( index )
#
# * index - The index/ID of the fog in the array, used to keep track of the
# fogs on screen. This is the index for the fog defined within
# the 'add_fog' command (above).
#
# ALERT: The field map must already be generated before use. Do not use
# within a parallel process unless adequate time has passed to
# generate/display the current map.
#
# ALERT: Deleting fogs may be based on index, but may also have a cascading
# effect. By that, deleting fog 1 may also delete fog 2, 3, 4...*
# However, deleting fog 4 will not delete fogs 1, 2, 3. Consider
# that when designing fogs that delete on cue.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# * * *
#
# Retrieve a fog:
# ---------------
# This script returns the actual fog data so you can edit the fog's individual
# properties.
#
# syntax: returned = fogs( index )
#
# * returned - The actual fog data retrieved
# * index - The index/ID of the fog in the array, used to keep track of the
# fogs on screen. This is the index for the fog defined within
# the 'add_fog' command (above).
#
# Example: fog = fogs(1)
# fog.scroll_x = 2
# fog.scroll_y = 2
#
# The above example acquires the fog at index "1", and sets the scroll
# speeds for x and y directions to '2'.
#
# ALERT: The field map must already be generated before use. Do not use
# within a parallel process unless adequate time has passed to
# generate/display the current map.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# * * *
#
# Test Fog Existence:
# -------------------
# This script returns whether a fog exists in the array based upon the index
# position specified.
#
# syntax: returned = fogs?( index )
#
# * returned - If the fog exists (true/false)
# * index - The index/ID of the fog in the array, used to keep track of the
# fogs on screen. This is the index for the fog defined within
# the 'add_fog' command (above).
#
# Example: is_valid = fogs?(3)
# fog.scroll_x = 2
# fog.scroll_y = 2
#
# The above example acquires the fog at index "3", and stores the result
# into a variable named 'is_valid'. This value of this ariable will thus
# be either be true or false as a result.
#
# ALERT: The field map must already be generated before use. Do not use
# within a parallel process unless adequate time has passed to
# generate/display the current map.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#
#------------------------------------------------------------------------------
#
# FOG PROPERTIES:
# ===============
#
# These are the following properties and methods you can use when editing the
# individual fogs.
#
# * visible - Whether fog is visible or not (true/false)
# * opacity - Opacity of the fog. (0 to 255)
# * z - Z index or altitude of the fog.
# * scroll_x - Horizontal scroll speed.
# * scroll_y - Vertical scroll speed.
# * zoom_x - Horizontal zoom factor.
# * zoom_y - Vertical zoom factor.
# * blend_type - Blend mode for fog: (0: Normal, 1: Add, 2: Subtract).
# * filename - Filename of the fog: (new_file [, hue])
# + new_file = New fog file. (the .png extension not needed)
# + hue = Hue for new fog. (Default: 0 in 0-360 range)
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# The z-Depth property is the altitude level of the fog. The lower the value,
# the lower the altitude of the fog. And with that, you can set some fogs to
# overlap one another. But not only that, these fogs may apppear above and/or
# below certain graphic layers. Below are noted z-Depth settings:
#
# z-Depth Result
# -------------- ------
# -1001 or lower Any depth from here or below are drawn below even the tile-
# set's panorama layer. Technically, they would only be visi-
# sible if the panorama graphic had some transparencies.
#
# -1000 to -1 These depths draw the fog below the ground level, but above
# the tileset's panorama.
#
# 0 to 32 Fogs with Z-Depths in this range will draw over all tileset
# objects that have no priority level (the numbered stars).
# The Player sprite & map events that are not meant as ground
# effects (pits, trap tiles, etc) are not covered by the fogs.
#
# 564 on up Fogs with Z-depths from 560 on up will draw over all tileset
# objects, the player and most nominally sized events. Events
# that have individual frame heights beyond 64px would appear
# uncovered by fog when near the bottom of the screen. So its
# advised to have a larger setting.
#
# 999 or lower Fogs with z-Depths here or lower will appear below normally
# defined weather effects made with RPGMaker XP.
#
# 1000 or above Fogs with z-Depths from here on up will appear over weather
# effects created with RPGMaker XP.
#
# 2999 or lower Fogs with z-Depths from here or below appear below the de-
# default RPGMaker XP fog layer.
#
# 3000 or above Fogs with z-Depths from here on up appear over the default
# RPGMaker XP fog layer.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Fogs cannot be drawn over 'Pictures' as pictures are placed within a separate
# viewport than tiles, sprites, fogs... etc.
#
#
#------------------------------------------------------------------------------
#
# PARALLEL PROCESSES:
# ===================
#
# As this system does not perform direct edits to the Spriteset_Map class, all
# custom fogs and their subsequent properties can only be applied after the
# field map is already generated. However, parallel processes may operate so
# quickly that the script calls from Multiple Fogs may not function, and could
# generate errors.
#
# Of the commands built within, only the 'add_fog' command has a built-in pro-
# tection feature, allowing it to work within parallel processes without worry
# of system crash. It does so by pausing the actual actions from executing un-
# til the field map is generated
#
# The other commands however do not gain this protection. Of these commands,
# the fogs(index) command is the most affected. This because the name of the
# command was identical to the name of the fogs array this script attaches to
# the Spriteset_Map class.
#
# However unprotected, these script calls may be employed within those events
# set as a parallel process that executes immediately. One need only place a
# simple 1-frame wait command be placed and executed before the script calls.
#
# Example:
# List of Event Commands:
# ┌───────────────────────────────────────────
# │ @>Script: add_fog(1, "001-Fog01", 3200)
# │ @>Wait: 1 frame(s)
# │ @>Script: fogs(1).opacity = 240
# │ : : fogs(1).hue = 60
# │ @>Erase Event
# │ @>
# │
#
# The above example functions safely, even if it is a parallel process that is
# executed at the very start of a map. The 'add_fog' command protected by its
# built-in safeguards, and the following 'fogs' entries only performed after a
# wait command that need only give a 1-frame delay.
#
#
#------------------------------------------------------------------------------
#
# FINAL NOTES:
# ============
#
# That's about it. This script does not replace the default fog system built
# into the default scripts, but creates a secondary fog system that may be
# used in tandem.
#
# Due take warning that the more fogs you add, the more lag you'll probable
# run into. Adding an extra two or three shouldn't hurt too much though. ;)
#
#
#==============================================================================
#
# VERSION HISTORY:
# ================
#
# Ver MM/DD/YYYY - Changes
# --- ---------- --------------------
# 1.0 - 04/09/2012 - Original Release
# 1.1 - 04/09/2012 - Corrected a typo in the script
# 1.2 - 10/12/2013 - Rewrite & new params for Heretic's Cloud Altitude support
# 1.3 - 02/25/2024 - Update to prevent crashing and allow parallel process use
# 1.4 - 02/26/2024 - Update for key commands incapable of protections
# 1.5 - 03/08/2024 - Included Heretic's fog-retention code
#
#
#==============================================================================
#
# COMPATABILITY:
# ==============
#
# Designed for RPGMaker XP. Compatible with the default scripts and scripts
# that do not adversely alter the fog system.
#
#
#==============================================================================
#
# CREDITS AND TERMS:
# ==================
#
# Initial version by game_guy
# LiTTleDRAgo for the original idea
# Heretic for stand-alone fog retention code. Restores fogs when exiting menus
# DerVVulfman for rewriting comments, fixing system to permit parallel process
# functionality and updating the Fog Cache system to prevent crashes if no file
# exists.
#
# Free for use, even in commercial scripts. Due credit to all involved is
# the only requirement.
#
#
#==============================================================================
#==============================================================================
# ** RPG::Cache
#------------------------------------------------------------------------------
# The module that loads each of RPGXP's graphic formats, creates a Bitmap
# object, and retains it.
#==============================================================================
module RPG::Cache
#------------------------------------------------------------------------
# * Fogs
# filename : filename of the cached bitmap
# hue : hue of the cached bitmap
#------------------------------------------------------------------------
def self.fog(filename, hue=0)
begin
self.load_bitmap("Graphics/Fogs/", filename, hue)
rescue
self.load_bitmap("Graphics/Fogs/", "", hue)
end
end
end
#==============================================================================
# ** UFogs_Structure
#------------------------------------------------------------------------------
# This is the data class that defines the structure for unlimited fogs.
#==============================================================================
class UFogs_Structure
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :file # Fog filename
attr_accessor :index # Index of individual fog
attr_accessor :z # Z-Depth / Altitude of fog
attr_accessor :scroll_x # Horizontal scrolling
attr_accessor :scroll_y # Vertical scrolling
attr_accessor :opacity # Fog opacity
attr_accessor :zoom # Fog magnification
attr_accessor :blend # Fog blend style
attr_accessor :hue # Fog hue
end
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
# This class handles data surrounding the system. Backround music, etc.
# is managed here as well. Refer to "$game_system" for the instance of
# this class.
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :fogs_settings # Holds settings for Unlimited Fogs
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias gg_fogs_init_game_system_lat initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
#
# Perform the original method
gg_fogs_init_game_system_lat
#
# Create an array for the unlimited fog settings
# Permites their ability to be recorded in game saves
@fogs_settings = []
#
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles the map. It includes scrolling and passable determining
# functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias gg_fogs_setup_game_map_lat setup
#--------------------------------------------------------------------------
# * Setup
# map_id : map ID
#--------------------------------------------------------------------------
def setup(map_id)
#
# Perform the original method
gg_fogs_setup_game_map_lat(map_id)
#
# Clears the unlimited fog settings on each new map
$game_system.fogs_settings = []
#
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc.
# It's used within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias gg_fogs_init_spriteset_map_lat initialize
alias gg_fogs_update_spriteset_map_lat update
alias gg_fogs_dispose_spriteset_map_lat dispose
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
#
# Create the multiple fogs array
@fogs = []
#
# Perform the original method
gg_fogs_init_spriteset_map_lat
#
# Check each Fogs to make sure they all exist
for fog in $game_system.fogs_settings
#
# Skip if not a valid 'unlimited' fog
next unless (fog and not @fogs[fog.index])
#
# Duplicate the fog structure
cfg = fog.clone
#
# Retrieve content about selected fog
index = cfg.index
file = cfg.file
z = cfg.z
scroll_x = cfg.scroll_x
scroll_y = cfg.scroll_y
opacity = cfg.opacity
zoom = cfg.zoom
blend = cfg.blend
hue = cfg.hue
#
# Reload the fog with the retrieved fog data
add_fog(index, file, z, scroll_x, scroll_y, opacity, zoom, blend, hue)
#
end
#
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
#
# Cycle through and update all fogs
@fogs.each {|fog| fog.update if fog != nil }
#
# Perform the original method
gg_fogs_update_spriteset_map_lat
#
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
#
# Cycle through and dispose all fogs
@fogs.each {|fog| fog.dispose if fog != nil }
#
# Perform the original method
gg_fogs_dispose_spriteset_map_lat
#
end
#--------------------------------------------------------------------------
# * Get fog by index
# index : index of fog
#--------------------------------------------------------------------------
def fogs(index)
#
# Set the fog to an empty plane if no fog exists for the index position
@fogs[index] = ScrollPlane.new(@viewport1, index) if @fogs[index].nil?
#
# Return the fog at the index position
return @fogs[index]
#
end
#--------------------------------------------------------------------------
# * Determine if fog exists
# index : index of fog
#--------------------------------------------------------------------------
def fogs?(index)
#
# Return false if no fog exists at the index position
return false if @fogs[index].nil?
#
# Return true
return true
#
end
#--------------------------------------------------------------------------
# * Add Fog
# index : index of defined fog
# file : fog file name
# z : fog z-depth
# ox : fog graphic x-origin
# oy : fog graphic y-origin
# opacity : fog opacity level (0-255)
# zoom : fog zoom rate
# blend : fog blending method
# hue : fog hue (0 to 360)
#--------------------------------------------------------------------------
def add_fog(index, file, z = 3000, scroll_x = 0, scroll_y = 0, opacity = 64,
zoom = 1.0, blend = 0, hue = 0)
#
# Erase previous fog at index
remove_fog(index)
#
# Create the new fog object from ScrollPlane
fog = ScrollPlane.new(@viewport1, index)
#
# Set the individual settings to the fog object
fog.bitmap = RPG::Cache.fog(file, hue)
fog.z = z
fog.blend_type = blend
fog.opacity = opacity
fog.zoom = zoom
fog.scroll_x = scroll_x
fog.scroll_y = scroll_y
@fogs[index] = fog
#
# Obtain the structure data object for ths current fog
cfg = $game_system.fogs_settings[index]
#
# Set the settings within the current fog's data object
cfg.file = file
cfg.z = z
cfg.scroll_x = scroll_x
cfg.scroll_y = scroll_y
cfg.opacity = opacity
cfg.zoom = zoom
cfg.blend = blend
cfg.hue = hue
#
end
#--------------------------------------------------------------------------
# * Remove Fog
# index : index of fog
#--------------------------------------------------------------------------
def remove_fog(index)
#
# Exit if no fog at index position
return if @fogs[index].nil?
#
# Dispose of fog
@fogs[index].dispose
@fogs[index] = nil
#
# Remove from Stored Settings
$game_system.fogs_settings.delete_at(index)
#
end
end
#==============================================================================
# ** ScrollPlane
#------------------------------------------------------------------------------
# This creates a specialized scrolling plane class. Inheriting from the Plane
# class itself, it generates special sprites that tile bitmap patterns across
# the entire screen, and are used to display panoramas and fogs.
#==============================================================================
class ScrollPlane < Plane
#--------------------------------------------------------------------------
# * Object Initialization
# viewport : viewport
#--------------------------------------------------------------------------
def initialize(viewport = nil, index = nil)
#
# Inherit from the Plane Superclass
super(viewport)
#
# Establish startup values
@scroll_x = 0
@scroll_y = 0
@real_ox = 0
@real_oy = 0
@index = index
#
# Create Struct to store in Game System for each Fog
cfg = UFogs_Structure.new
#
# Save each Setting in Struct
cfg.index = @index
#
# Put Struct into Game Settings by Index
$game_system.fogs_settings[@index] = cfg
#
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
#
# Manage fog scrolling
@real_ox -= @scroll_x / 8.0
@real_oy -= @scroll_y / 8.0
#
# Update fog plane
self.ox = $game_map.display_x / 4 + @real_ox
self.oy = $game_map.display_y / 4 + @real_oy
#
#
end
#--------------------------------------------------------------------------
# * Get current spriteset for map
#--------------------------------------------------------------------------
def spriteset
#
# Get current spriteset if in the field map
return $scene.spriteset if $scene.is_a?(Scene_Map)
#
# Return non-existence
return nil
#
end
#------------------------------------------------------------------------
# * Fog Filename
# filename : filename of the fog bitmap
# hue : hue of the fog bitmap
#------------------------------------------------------------------------
def filename(filename, hue = 0)
#
self.bitmap = RPG::Cache.fog(filename, hue)
#
end
#------------------------------------------------------------------------
# * Set Filename
# value : filename of the fog bitmap
#------------------------------------------------------------------------
def file=(value)
#
# Acquire hue from fog settings
hue = $game_system.fogs_settings[@index].hue
#
# Apply filename value to fog settings
$game_system.fogs_settings[@index].file = value
#
# Reload the fog with the supplied name and loaded hue settings
self.bitmap = RPG::Cache.fog(value, hue)
#
end
#------------------------------------------------------------------------
# * Set z-Depth
# value : z-Depth of fog
#------------------------------------------------------------------------
def z=(value)
#
# Apply z-depth value to fog settings
$game_system.fogs_settings[@index].z = value
#
# Pass the value into the the Superclass's z-Depth method
super(value)
#
end
#------------------------------------------------------------------------
# * Set Horizontal Scroll
# value : degree of scroll
#------------------------------------------------------------------------
def scroll_x=(value)
#
# Apply horizontal scrolling value to fog settings
$game_system.fogs_settings[@index].scroll_x = value
#
# Update the current horizontal scroll value
@scroll_x = value
#
end
#------------------------------------------------------------------------
# * Set Vertical Scroll
# value : degree of scroll
#------------------------------------------------------------------------
def scroll_y=(value)
#
# Apply vertical scrolling value to fog settings
$game_system.fogs_settings[@index].scroll_y = value
#
# Update the current vertical scroll value
@scroll_y = value
#
end
#------------------------------------------------------------------------
# * Set Opacity
# value : opacity level of fog
#------------------------------------------------------------------------
def opacity=(value)
#
# Apply opacity value to fog settings
$game_system.fogs_settings[@index].opacity = value
#
# Pass the value into the the Superclass's opacity method
super(value)
#
end
#------------------------------------------------------------------------
# * Set Zoom
# value : degree of zoom
#------------------------------------------------------------------------
def zoom=(value)
#
# Apply magnification value to fog settings
$game_system.fogs_settings[@index].zoom = value
#
# Update the zoom magnification
self.zoom_x = value
self.zoom_y = value
#
end
#------------------------------------------------------------------------
# * Set Opacity
# value : opacity level of fog
#------------------------------------------------------------------------
def blend=(value)
#
# Apply blend style value to fog settings
$game_system.fogs_settings[@index].blend = value
#
# Update image blend style
self.blend_type = value
#
end
#------------------------------------------------------------------------
# * Set Hue
# value : hue shift of the fog bitmap
#------------------------------------------------------------------------
def hue=(value)
#
# Acquire filename from fog settings
file = $game_system.fogs_settings[@index].file
#
# Apply hue shift value to fog settings
$game_system.fogs_settings[@index].hue = value
#
# Reload the fog with the loaded name and supplied hue settings
self.bitmap = RPG::Cache.fog(file, value)
#
end
end
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
# This interpreter runs event commands. This class is used within the
# Game_System class and the Game_Event class.
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# * Class Variables
#--------------------------------------------------------------------------
@@fog_cmd = []
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias dvv_parallel_process_permitting_update update
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
#
# Perform execution of spriteset command
execute_spriteset
#
# Perform the original method
dvv_parallel_process_permitting_update
#
end
#--------------------------------------------------------------------------
# * Perform execution of spriteset command
#--------------------------------------------------------------------------
def execute_spriteset
#
# Exit if no spriteset and/or no fog command
return if spriteset.nil?
return if @@fog_cmd == []
#
# Execute spriteset command with stored value
spriteset.add_fog(@@fog_cmd[0], @@fog_cmd[1], @@fog_cmd[2], @@fog_cmd[3],
@@fog_cmd[4],@@fog_cmd[5], @@fog_cmd[6],@@fog_cmd[7], @@fog_cmd[8])
#
# Clear fog command class variable
@@fog_cmd = []
#
end
#--------------------------------------------------------------------------
# * Get current spriteset for map
#--------------------------------------------------------------------------
def spriteset
#
# Get current spriteset if in the field map
return $scene.spriteset if $scene.is_a?(Scene_Map)
#
# Return non-existence
return nil
#
end
#--------------------------------------------------------------------------
# * Add Fog
# index : index of defined fog
# file : fog file name
# z : fog z-depth
# ox : fog graphic x-origin
# oy : fog graphic y-origin
# opacity : fog opacity level (0-255)
# zoom : fog zoom rate
# blend : fog blending method
# hue : fog hue (0 to 360)
#--------------------------------------------------------------------------
def add_fog(index, file, z = 3000, ox = 0, oy = 0, opacity = 64, zoom = 1.0,
blend = 0, hue = 0)
#
# Store contents of command into class variable for execution
@@fog_cmd = [ index, file, z, ox, oy, opacity, zoom, blend, hue ]
#
end
#--------------------------------------------------------------------------
# * Remove Fog
# index : index of fog
#--------------------------------------------------------------------------
def remove_fog(index)
#
# Immediately remove defined fog from spriteset
spriteset.remove_fog(index)
#
end
#--------------------------------------------------------------------------
# * Get fog by index
# index : index of fog
#--------------------------------------------------------------------------
def fogs(index)
#
# Immediately fog parameters into spriteset
return spriteset.fogs(index)
#
end
#--------------------------------------------------------------------------
# * Determine if fog exists
# index : index of fog
#--------------------------------------------------------------------------
def fogs?(index)
#
# Immediately execute test for fog in current spriteset
return spriteset.fogs?(index)
#
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs map screen processing.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :spriteset # spriteset
end
Instructions
Paste below Scene_Debug and above main. If used with any other script that alters the environment, place Unlimited Maps below them in order to take advantage of its custom script calls.
As there isn't anything to configure, let's get onto the script calls!
Compatibility
Designed for RPGMaker XP. Compatible with the default scripts and scripts that do not adversely alter the fog system.
Credits and Thanks
Initial version by game_guy
LiTTleDRAgo for the original idea
Heretic for the Fog-Backup system
Terms and Conditions
Free for use, even in commercial scripts. Due credit to all involved is the only requirement.