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.
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
This week, MrsDebauchery joined the forum as she's been on the search for RPGMaker XP scripts. Not unfamiliar with RPGMaker, she endeavors to work on an open-world styled game. She was greeted by DerVVulfman who let her know that not all RPGMaker XP scripts were old.
General Chat
The migrant crisis was one of many topics in this week's News of the World as violence from illegal migrants continues to erupt, attacking more NYC police officers and organized crime from illegal aliens surges in Pennsylvania. Along with this, its been revealed that un-vetted teens released by HHS (Health and Human Services) have violently attacked foster homes. Combating this, Texas's governor is now suing to shut down a non-profit group that is assisting in this illegal human trafficking practice. And the Mayorkas Impeachment may soon hit the U.S. Senate. But terrorism is abroad, as the migrant who performed a Chemical Attack in the U.K. on New Year's Eve had just been discovered, washed up in the Thames. And in Quebec, 100 officers have been deployed over a war over drugs between drug dealers and rival biker gangs. The judgment against former President Trump to pay half a billion before he can appeal has sparked criticism, a court case that many see criminalizes the every day practice of real estate valuations. And now revealed, the judge in the Fulton county case donated to AG Fani Willis, and Nathan Wade was revealed to have likely appointed WIllis as D.A. And despite rules of full disclosure, more filings by Jack Smith enrage Trump Lawyers who want to prepare for the trial. Photographs taken reveal that medicine meant for Israeli hostages taken by Hamas were never delivered, discovered in the Nasser Hospital at Khan Yunis. This after Hamas moved the hostages to Rafah. And despite the repeated counts of violence, the U.N. attempted to vote for a permanent ceasefire between Hamas and Israel. Despite China ignoring U.S.'s President Biden, Canada's Trudeau now pleads with China to ask Iran and the Houthis to cease activity. And as U.K's Prince william also pleads for the hostages to be freed and an end of hostilities, U.K's House Speaker had blamed terror threats to be at the heart of political threats to Parliament. The war between Russia and Ukraine continues, Russia jailing another U.S. citizen as a possible hostage while threatening nuclear attacks on the U.S. and U.K if they lose. This while the U.S. issues 500 more sanctions against Russia while Ukraine has now eliminated 21 naval ships, 102 aircraft, 2700 tanks, and more. Of course, the death of Putin's rival Alexei Navalny is still looked upon as suspicious, only China accepting the story of his sudden death. China is in a bit of economic peril now, their top diplomat claiming to pull out of China is a mistake. This as Volkswagon considers moving operations over the Uyghur slave labor, and 83 household products made have now been define as such. And North Koreans under slave wages occupied a Chinese Factory that produced clothing, food and medicines (Really? All three?) and beat the manager to death over unpaid wages. San Francisco police chief's refusal to charge Activists who assaulted Riley Gaines despite police witnesses, farm tractor protests in Spain and Greece over Green policies strangling farmer's livelihoods, recovered eMails showing Canada Officials deleted reports of dangerous COVID-19 vaccine impurities, more plagiarism scandals hit Harvard, and much more hit this week's news. Reduced from 25.6K words to 530
Tech Talk
Early this week, it was revealed within the News of the Cyber World just how biased Google's AI had become, its chatbox generating historically innacurate renders such as a female pope, black vikings and gender-swapped versions of famous paintings. Also in the middle of the week, Nvidia's revenue had soared as it has become a standout developer in GPUs capable of handling AI workloads. It isn't a good week for Electric Vehicles as Mercedes Benz now drops the EV initiative, and the US commerce secretary now warns against China's EV power. China's become a large global threat as they acquired US firewalls and routers in the early 2000s to see how to break through their protections. This, and more hit this week's cybernews.
A cache of recently leaked document found on GitHub by Chinese Hackers containing manuals, employee lists, and details about foreign infiltration. Said information from a Chinese cyber-security company known as I-Soon. A victim list is included in the leaked documents, showing that I-Soon has targeted telecommunications companies, hospitals, universities, organizations, and government entities from all around the world. And Senator Marco Rubio warned that the outage that affected AT&T on Feb. 22 would be much smaller in scope than what China could now accomplish.
Games Development
Development Discussion
If you wondered What's up among fellow RMers, Remi-chan decided to focus upon releasing a new demo for "Junked" on the 14th of March, an earlier side-view game under her belt since resources for Fantasia have not yet arrived. A new character, a working crafting system, and new enemies visible within a youtube video are present for viewing.
Material Development
Scripts Database
A new update to kyonides' KDirtyShop now allows you to now eliminate specific items, weapons and/or pieces of armor from the system that lets shopkeepers overcharge.
The KMustSurvive scirpt by kyonides allows you to try to keep some helpless targets alive while fighting enemies was now upgraded. And along with that, two more ports were made to it so all three Ruby-Script versions of RPGMaker are covered, and not just for RPGMaker XP.
The Choices Change Events scriptette created by kyondes allows map events to be immediately changed or updated as the player cycles through options within any Show Choice menu. It didn't take long before he made this system work for all three Ruby-script versions of the RPGMaker series.
For both RPGMaker XP and RPGMaker VXAce, kyonides crafted the Tileset ID Checker. This simple script allows you to acquire the ID of the tileset in which your heroes are currently wandering.
Creativity Section
Art and Design
Caution is highly advised when approaching Remi-chan's Neato Arty thread thing as she presents her latest work based upon one of her most malicious and brutal incarnations. However the pale-skinned of Remi-chan's subject is being depicted in a different art style than her norm, using bold lines and sharply defined and distinct solid colors rather than soft blends and lighting effects. After that, Remi-chan presented four renders of a character for a game she's had in the works with characters inspired by Cartoon Network's "Codename: Kids Next Door". This was then followed by photos of Remi-chan at an art exhibition which presents her in front of a display of some of her more recent works.
Literature Section
A terrifying glimps of the future awaits one of the three heroines within Remi-chan's Writing Snippets. Unable to wake up from a nightmare controlled by evil incarnate, the fifteen-year old sees her world being decimated, the lands upheaved my meteor showers as deathly black entities appear through tears in reality. And all the while, a lithesome form approaches radiating malice.
Filmography
While it is within Remi-chan's Cinematic Theatre, the recent posting is a youtube music video. Based upon the fantasy sci-fi universe of hers, the piece entitled "Be There for Me" is a duet as sung by two of her principle characters whom are both voiced by Remi-chan herself. However, Remi-chan could not give a full range of vocals as the microphone she is currently using doesn't have an adequate enough decible threshhold.
Well, that's it for this week.
“My fans have designated themselves the, uh, 'Pine Nuts.' They're a nutty bunch.” - Chris Pine
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.
Do you need to check if the current tileset is good for your heroes?
Or perhaps you need to make sure it is as dangerous as possible after the heroes messed up with some poor witches?
Well, now you can do that via a script call!
The Script
Code:
# * Tileset ID Checker XP & ACE * #
# Scripter : Kyonides Arkanthes
# 2024-02-21
You only need to paste my scriptlet in a new slot in the script editor, pick a game variable to hold the event ID.
For RMXP
Then the scriplet will look for the corresponding choice's Move Route and a Change Graphic command to retrieve the current character spritesheet.
For RMVX and ACE
The scriplet will use the current event page's graphic (a single character spritesheet) but with a different character index based on your current choice. It will be reset if you choose to cancel.
Warning: You have to set 1 Move Route and 1 Change Graphic commands per choice.
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
DerVVulfman made a report that The Year of the Spammers continues, new tools now put to use to confirm suspicious activity and altered security questions that he said could confuse AI bot services. In fact, most of those whom he found suspicious revealed themselves with off-site spam activity with hundreds of reported malicious activity. However, he added that a new influx of members includes those that discovered RPGMaker XP available on steam for free.
Occasions
Having now acquired RPGMaker XP for free on Steam this week entered Canvance. An aspiring game developer, he admits to be an amatuer in pixelwork, music and coding. However, he plans to persevere in making his first game. He thanked both kyonides and DerVVulfman for the scripts they had posted, later greeted by both scripters.
General Chat
Last week's News of the World was hit by the Special Council's revelation no charges would be levied against U.S. President Biden due to his age and failing memory. But now, it was released that Top Secret material vanished under Biden's care during a recent vacation. Democrats are very much worried about his age while Biden's lawyers push to have criticism of his age squashed. The recent death of Alexi Navaldi, jailed by Putin after having survived poisoning years earlier hit this week's news. Over 400 who attended a memorial for Navalny were arrested by Putin's forces, such may be why Ukraine President Zelensky suggests regime change in Russia is coming. And while U.S. Democrats use this to push spending aid to Ukraine, their Republican counterparts say that the U.S.'s own security must come first and blasted the proposed spending package for legislation designed to target Trump were he to win the next election. Of U.S. security, migrant crime hit the news with Meth and Fentanyl trafficking, sanctuary cities cutting funds to citizens, MS-13 joining Venezuelan gangs, and drug cartels placing landmines along the southern border. To combat this, Texas set up a military base to combat illegal human and drug trafficking. But despite this and the impeachment of DHS Mayorkas, U.S. President Biden has the DHS draft plans to release even more migrants. Turmoil in the Middle East continues as Houthis attack more ships in the Red Sea while Israel retaliates against Hezbollah rockets strikes. While China demands Israel to cease fire, support for Netanyahu rises with Netanyahu demanding the release of all hostages by Ramadan or they would attack Rafah. But Hezbollah, the Houthis and Hamas have one thing in common; Iran who is now claiming they are now fully capable to make a nuclear bomb. For former President Trump, bad news and good news. He was fined $354 Million by Judge Engoron and barred from NY business practices for 3 years, though he plans to appeal. But the Fulton AG prosecuting him in Georgia may very well be disqualified, hearing how she paid for her vacation time with her lover. And despite Trump's statements over 'delinquent' NATO members, the NATO Secretary General reiterated that the 2% dues are a minimum and Trump's actions have forced those nations to stop cutting back. Election rigging both in Michigan with graves of still-eligible dead voters and during protests in Pakistan, protests by farmers in Belgium over strangling EU Green regulations and farmers tear-gassed in India arrested over poverty from free trade deals, China's blacklisting of writers like Neil Gaimon from the 2023 Hugo Awards confusing the Sci-Fi community, and much more hit this week's news. Reduced from 25.5K words to 450
Tech Talk
China's work ethics hit the News of the Cyber World, such as the evidence of a test track meant for Volkswagon built by Uyghur slave labor, the lawmakers furious about loopholes China exploits to keep slave-labor products selling, and a China-owned fashion company involved in slave-labor practices seeking to be put on the stock exchange. In southern France, a warehouse filled with 900 Tons of recycled lithium car batteries exploded. Cisco plans to lay off 4000 employees to concentrate on AI, the refunds of Apple's VisionPro headsets, the U.K. successfully tested a high-powered laser weapon, and more hit this week's cybernews. A U.K. Lazer cannon?
Recent reports from Microsoft show that Chinese Hackers are now using AI to increase their effectiveness in cyberattacks, such state-sponsored groups from china including Salmon Typhoon, Chromium, as well as state-sanctioned agents from other countries like Forest Blizzard from Russia.
Games Development
Development Discussion
If you're curious What's up among your fellow RMers, kyonides discovered that one is now able to acquire RPGMaker XP for free on Steam. But something caught Melana's eye, a screenshot from Degica's RPGMaker XP advert examples that used graphics not a part of XP's own Run Time Package. A picture around for a while, DerVVulfman thought it might have been part of a separate DLC. And nothing within his recent upload of salvaged tileset resources did Melana find anything that matched. After that, Remi-chan released the 4th track of music from one of her games, and revealed teh second pose of her pigtailed, knife-using demoness.
Complete Projects
During the 2024 RPGMaker Festival, you can now find Starmage's Rave Heart available at Steam for half-price!
Material Development
Scripts Database
This week, kyonides crafted KTroopStates for all three Ruby-Script editions of RPGMaker, allowing you to apply status effects upon enemies when combat begins.
The FancyChoices just received an update, now receiving an RPGMaker VX port. And simultaneously, an RPGMaker VXAce port of ACE HP or SP Recovery Rate was added.
Maintenance was performed by kyonides upon demo for RPGMaker XP port of Falkoner, and upon the RPGMaker XP and VX ports for RealEkuipment. The demos should now operate properly.
An update was made to the RandomSkillKost script, kyonides now preventing a player exploint. Before, you could exit back to the initial Party Command stage and return to combat to reset and generate new random SP costs. But now, that exploit has been removed.
And just before the week expired (and the gazette posted), kyonides released KMustSurvive a script for RPGMaker XP for those that set up battles where the player had to consider some fighting against the party were unwilling combatants, and able to make judgements in relation.
Creativity Section
Music and Audio
For those needing music for their game, do remember that Eric Matyas is Sharing His Original Music and Sound. Early this week, he was able to find time to craft a piece entitled "Cybertropolis" which would be fine for those scenes when one is entering a city of technological marvels. And near the end of the week, a lighter tune entitled "Of Legends and Fables 3" would do well for a game filled with woodland mysteries and magicks.
Now at long last, the Jake Gamelin Suite now includes "Glitch of Shadows", a track for Remi-chan's game Fantasia that features vocals by Emily Goemon.
Art and Design
Just in time for the week of Valentine's, Remi-chan's Neato Arty thread thingy now includes a full color render of the two most evil entities in her game universe spending time together arm in arm. But not only that, but Remi-chan also presented its speed-draw video, the 143rd speed draw she's made over the years.
Literature Section
Before it is even available, you will now find within Remi-chan's Writing Snippets the meeting of the three heroic sisters from Fantasia put to the test of combat against the universe's most enigmatic and devious entities.
Filmography
The latest video available within Remi-chan's Cinematic Theatre is a little dated, made as an invitation to an art exhibition days ago. Forced within a McDonald's parking lot, she is made to answer her own Ego about her ambitious work ethic.
Well, that's it for this week.
"He’s always asking: ‘Is that new? I haven’t seen that before.’ It’s like, Why don’t you mind your own business? Solve world hunger. Get out of my closet." - Michelle Obama
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.
When I played Breath of Fire II back in the days, I noticed that there was a village where fights were a bit different. There you had to rescue the villagers by not killing them but just the scorpions that controlled them. You were still able to kill the people but it was not recommended.
This scriptlet would let the battle script judge the end result of the battle without any external interference. This means that you will not be in a dire need to keep checking your enemies' current HP every single turn via event commands!
# This scriptlet allows you to set any enemy as some sort of victim that should
# be rescued during battle by NOT KILLING the victim!
# No event command will be needed during battle!
# This is a very simplistic approach to a feature in Breath of Fire II where
# you were supposed to kill the scorpion but not the villager.
# * Script Call * #
# - Warning: Both HP% parameters should be Integers.
# If no maximum percent is entered, it will be equal to 100%
# $game_troop.must_survive(EnemyIndex, MinimumHP%)
# $game_troop.must_survive(EnemyIndex, MinimumHP%, MaximumHP%)
class Game_Actor
def alive?
@hp > 0
end
end
class Game_Enemy
def alive?
@hp > 0
end
end
class Game_Party
def alive?
@actors.any? {|a| a.alive? }
end
end
class Game_Troop
alias :kyon_must_survive_gm_trp_init :initialize
attr_reader :survivors
def initialize
kyon_must_survive_gm_trp_init
@survivors = {}
end
def enemies_alive
@enemies.select {|e| e.alive? }
end
def few_survivors?
enemies_alive.size < @survivors.size
end
def only_survivors?
list = enemies_alive.map {|e| e.index }
list.sort == @survivors.keys.sort
end
def survivors_with_enough_hp?
enemies_alive.each do |e|
percent = e.hp * 100 / e.maxhp
return false unless percent.between?(*@survivors[e.index])
end
true
end
end
class Scene_Battle
alias :kyon_must_survive_scn_btl_judge :judge
def judge
if $game_troop.survivors.empty?
kyon_must_survive_scn_btl_judge
else
judge_enemy_survivors
end
end
def lose_scenario
if $game_temp.battle_can_lose
$game_system.bgm_play($game_temp.map_bgm)
battle_end(2)
return
end
$game_temp.gameover = true
end
def judge_enemy_survivors
if $game_party.alive?
if $game_troop.few_survivors?
lose_scenario
return true
end
return false unless $game_troop.only_survivors?
if $game_troop.survivors_with_enough_hp?
start_phase5
return true
end
return false
else
lose_scenario
end
end
end
# This scriptlet allows you to set any enemy as some sort of victim that should
# be rescued during battle by NOT KILLING the victim!
# No event command will be needed during battle!
# This is a very simplistic approach to a feature in Breath of Fire II where
# you were supposed to kill the scorpion but not the villager.
# * Script Call * #
# - Warning: Both HP% parameters should be Integers.
# If no maximum percent is entered, it will be equal to 100%
# $game_troop.must_survive(EnemyIndex, MinimumHP%)
# $game_troop.must_survive(EnemyIndex, MinimumHP%, MaximumHP%)
class Game_Actor
def alive?
@hp > 0
end
end
class Game_Enemy
def alive?
@hp > 0
end
end
class Game_Party
def alive?
members.any? {|m| m.alive? }
end
end
class Game_Troop
alias :kyon_must_survive_gm_trp_init :initialize
attr_reader :survivors
def initialize
kyon_must_survive_gm_trp_init
@survivors = {}
end
def enemies_alive
@enemies.select {|e| e.alive? }
end
def few_survivors?
enemies_alive.size < @survivors.size
end
def only_survivors?
list = enemies_alive.map {|e| e.index }
list.sort == @survivors.keys.sort
end
def survivors_with_enough_hp?
enemies_alive.each do |e|
percent = e.hp * 100 / e.maxhp
return false unless percent.between?(*@survivors[e.index])
end
true
end
end
class Scene_Battle
alias :kyon_must_survive_scn_btl_judge :judge_win_loss
def judge_win_loss
if $game_troop.survivors.empty?
kyon_must_survive_scn_btl_judge
else
judge_enemy_survivors
end
end
def judge_enemy_survivors
return true unless $game_temp.in_battle
if $game_party.alive?
if $game_troop.few_survivors?
process_defeat
return true
end
return false unless $game_troop.only_survivors?
if $game_troop.survivors_with_enough_hp?
process_victory
return true
end
return false
else
process_defeat
return true
end
end
end
# This scriptlet allows you to set any enemy as some sort of victim that should
# be rescued during battle by NOT KILLING the victim!
# No event command will be needed during battle!
# This is a very simplistic approach to a feature in Breath of Fire II where
# you were supposed to kill the scorpion but not the villager.
# * Script Call * #
# - Warning: Both HP% parameters should be Integers.
# If no maximum percent is entered, it will be equal to 100%
# $game_troop.must_survive(EnemyIndex, MinimumHP%)
# $game_troop.must_survive(EnemyIndex, MinimumHP%, MaximumHP%)
class Game_Unit
def alive?
members.any? {|m| m.alive? }
end
end
class Game_Troop
alias :kyon_must_survive_gm_trp_init :initialize
attr_reader :survivors
def initialize
kyon_must_survive_gm_trp_init
@survivors = {}
end
def enemies_alive
@enemies.select {|e| e.alive? }
end
def few_survivors?
enemies_alive.size < @survivors.size
end
def only_survivors?
list = enemies_alive.map {|e| e.index }
list.sort == @survivors.keys.sort
end
def survivors_with_enough_hp?
enemies_alive.each do |e|
percent = e.hp * 100 / e.mhp
return false unless percent.between?(*@survivors[e.index])
end
true
end
end
class << BattleManager
alias :kyon_must_survive_btlman_judge :judge_win_loss
def judge_win_loss
if $game_troop.survivors.empty?
kyon_must_survive_btlman_judge
else
judge_enemy_survivors
end
end
def judge_enemy_survivors
return false unless @phase
return process_abort if $game_party.members.empty? or aborting?
return process_defeat if $game_party.all_dead?
return process_defeat if $game_troop.few_survivors?
return false unless $game_troop.only_survivors?
if $game_troop.survivors_with_enough_hp?
return process_victory
else
return process_defeat
end
end
end
Free for use in ANY game.
Due credit is mandatory.
Please include the URL of the website or forum where you found this script in your credits file.
That's it!
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
This week, DerVVulfman followed up his annoucement about it being the Year of the Spammer, noting how a number of accounts have been entering with clean IPs and eMails. However, he also noted that they are being regularly checked to see whether their status changes. And he asked that if any untoward PMs are received that he be informed.
General Chat
The Middle East is still one of the main focuses within the News of the World, with the Houthis Terrorists threatening global internet as well as shipping in the Red Sea, U.S. drone strikes killing three top Hezbollah leaders, evidence of Iran's direct payments to Hamas, and the discovery of Hamas tunnels directly under the UNRWA HQ in Gaza. When a Special Council's report over U.S. President Biden's handling of classified documents came out, Biden initially praised it for saying he wasn't to face charges. But the report was damning as it referenced his senility. Since the report this week, he also confused the President of Mexico for Egypts, and confused talks with Germany's Angela Merkel with the late Helmut Kohl. Since then, Biden has snapped at reporters. And former President Trump questioned how one could be mentally fit to serve if not mentally fit to stand trial. When you read, you may wonder why last week's report of a knife wielding man specifically targeting French citizens was not called a terrorist act. Let alone, the tale of an axe wielding Iranian on a Swiss subway train who took hostages was said not to be terror related. At least those who opened fired upon the police ast an Istanbul Court were defined as Left-Wing Terrorists. Issues with immigration still hits the U.S. with the failed impeachment of DHS Mayorkas, refusing to disclose full accounting of every illegal alien and claiming immigrant-caused crime shouldn't be politicized. And there is severe issues between the House and Senate with the recent Border bill, conservatives seeing it further enables unchecked crossings and funnels money to illegal immigrants. Within Venezuela, Maduro's opposition for the office of Presidency, María Corina Machado and her office was stoned and beaten. This even since Maduro cancelled any hope for free and fair elections. In Columbia, veterans found the pay in Ukraine far more lucrative and began signing up for the war. And despite the smell and taste of gasoline in Costa Rican water supplies, a probe was unable to find any suspects into the contamination. Unable to find the cause has sent shockwaves of distrust through the polulace. With the ongoing strike over green policies strangling Farmer's livelihoods, the E.U. scraps key elements of their Green Agenda. King Charles III has been diagnosed with Cancer, and is receiving out-patient treatments. Since then, estranged Prince Harry returns to Buckingham Palace upon hearing the news. And a Freedom of Information act busted the Canadian Trudeau Administration, revealing that it was the Trudeau administration that invited former Nazi Yaroslav Hunka to Parliamant and not the previous Rota adminitration. Revelations that the U.S. Treasury department and Biden Administration used banks to surveil Americans based on Private Transactions, Tucker Carlson's interview with Russia's Vladimir Putin causing shockwaves, China's Lunar New Year threat to Taiwan, the resignation of Hungary's President over a child predator's pardon, the U.S. Defense Secretary back in the hospital, and much more hit this week's news. Reduced from 25.K words to 499
Tech Talk
This week's News of the Cyber World detailed issues with AI fakery, whether it was the unauthorized use of musician's voices, or Facebook and Instagram's new policy to flag AI generated content. But AI has grown more insidious with a business losing millions over an AI generated interactive video deepfake over Zoom. But Disney has its own issues, losing millions for their 25% subscription hike and wrongful termination lawsuit filed by Mandaorian star Gina Carano. Politics hit the Cyberworld as Meta finally bans Supreme Leader Ali Khameni over his anti-semetic hate speech. Meanwhile, recent news is uncovering how the U.S. Biden Administration worked with Amazon to censor books, his Executive Order bypasses Congress to censor anything considered disinformation. And while Musk has issues with Driverless cars among Apple VisionPro users, Google's own Waymo car is having issues with cyclists this week. The fury over Tucker Carlson's interview with Putin, European Government backed hackers targeting Apple iPhones, the NYPD Subway Robot, and much more hit this week's cybernews.
The world has been constantly assailed by Chinese Hackers, such as the Netherlands now releasing reports of China's intrusion. And since the China-backed hacking group known as Volt Typhoon was busted by Microsoft and the FBI, and the Phillipines providing evidence of China attempted intrusions of government websites and accounts, China is now crying out that they were instead the victim. Of course, China's own Global Times refused to mention the incidents, preferring to release editorials of the American Hacking threat around the globe, and the vicitimization of China by the Phillipines..
Games Development
Development Discussion
If you're wondering What's up with some RMers, you'll be pleased to know that Remi-chan is once again active, reworking the graphics of her menus and displaying select images of her brochure pages for all to see. But on top of that, she's also presented the official art for one of her anti-heroes, a dangerous, green-eyed femme fatale donning what would not be generally permitted in public.
Within the Maps and screenshots thread this week, kyondides showed the development of his script that changes the appearance of the show choices window.
Upcoming Projects
At last released on steam is Heroes of the Seasons, the seasonal game worked on by Starmage. At a low price of $6.99 (USD), it can be yours. Or for the fruga, you can acquire a free short demo. But if unsure, you can check out the three recent Mercenary spotlights uploaded, showcasing bridal and avian sorcerers, demonic children, and nuclear wolves and sheep.
Material Development
Scripts Database
If you want your heroes to have a little uncertainty when it comes to combat, kyonides created the RandomSkillKost collection for the Ruby-based engines of RPGMaker. With these scripts, the cost of skill use may now vary from turn to turn during combat.
For those who wish to step away from the traditional means to display a list of choices for the player, then perhaps you wish to add some flair with FancyChoices. An RPGMaker XP script by kyonides, it is a re-skinned Show Choices window .
If you wish to keep HP and SP recovery rates separate when using RPGMaker VXAce, kyonides's ACE HP or SP Recovery Rate may be what you need.
Creativity Section
Art and Design
There are many who are getting ready for Valentines day, including artists of all kinds. Even upon entering Remi-chan's Neato Arty thread thing, you will see that, even among the evil incarnate, that love is in the air. Three rough drafts had appeared, the first being the the wholesome side-by-side of the most unwholesome entities in Remi-s current game. The second a tough of affection between two friends and a simple headpat. And the third a duet between opposites who had found each other.
Well, that's it for this week.
"I am not the archetypal leading man. This is mainly for one reason: as you may have noticed, I have no hair" - Sir Patrick Stewart
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.
By default the VX ACE engine offers you 1 Sp-Parameter to alter the HP and the SP Recovery Rates.
This script lets you keep their increase rates separate!
Just read the embedded comments in the script below to learn how to use it.
The Script
Code:
# * ACE HP or MP Recovery Rates *
# Scripter : Kyonides Arkanthes
# v1.0.0 - 2024-02-13
# Just leave a Note Tag in the corresponding Note Box.
# Valid for Actors, Enemies or Items or Skills or States.
# For HP or MP Only. Normally, you would only need 1 of them!
# It is applied to damage calculation whenever a recovery item is being used.
# Use the REC Sp-Parameter for the other value instead.
# - Examples:
# <hp recover 1000>
# <mp recover 1000>
# <hp recover 0.5>
class Game_Battler
def states_hp_rec
states.inject(0.0) {|n, s| n + s.hp_recover }
end
def states_mp_rec
states.inject(0.0) {|n, s| n + s.mp_recover }
end
def item_effect_recover_hp(user, item, effect)
rec_rate = db_unit.hp_recover + item.hp_recover + states_hp_rec
rec_rate = rec if rec_rate == 0
value = (mhp * effect.value1 + effect.value2) * rec_rate
value *= user.pha if item.is_a?(RPG::Item)
value = value.to_i
@result.hp_damage -= value
@result.success = true
self.hp += value
end
def item_effect_recover_mp(user, item, effect)
rec_rate = db_unit.mp_recover + item.mp_recover + states_mp_rec
rec_rate = rec if rec_rate == 0
value = (mmp * effect.value1 + effect.value2) * rec_rate
value *= user.pha if item.is_a?(RPG::Item)
value = value.to_i
@result.mp_damage -= value
@result.success = value != 0
self.mp += value
end
def apply_recovery_rate(value, item)
rate = 0
rate += db_unit.hp_recover + item.hp_recover if item.damage.to_hp?
rate += db_unit.mp_recover + item.mp_recover if item.damage.to_mp?
value *= rec + rate
end
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value *= item_element_rate(user, item)
value *= pdr if item.physical?
value *= mdr if item.magical?
value = apply_recovery_rate(value, item) if item.damage.recover?
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
@result.make_damage(value.to_i, item)
end
end
class Game_Actor
alias :db_unit :actor
end
class Game_Enemy
alias :db_unit :enemy
end
Terms & Conditions
Free for use in ANY game.
Due credit is mandatory.
That's it!