MARREND'S PROFILE

Marrend
Guardian of the Description Thread
21806
Life is a story. Which is the one that defines you?
Baclyae Revolution
A humble tribute to the Suikoden series!

Search

Filter

Sweet Middleground 5 ~the cave~

I'm maybe an hour into the game, and...


...I've found the "sword" and the "polearm". I've got a funny feeling that the piece of wood that blocks the next (last?) section of the dungeon can be removed via an "axe", but, I'm not sure what form that kinda of weapon might take in this kind of game.

Also...


...I'm finding some of the enemies quite tough. The "blue lips" enemy that respawn were pretty bad with their ranged attack. The clicker-bugs that I meet in the next section are nasty as hell, though. Like, I'm calling them "clicker-bugs" because of the sound taking damage makes in this game, and their rate of dealing damage seems pretty damned high. I can kinda manage them, but, they are certainly making the puzzle-solving in that area a bit more stressful than it probably should.


Like, I'm being the terrible player that's running this game through Ace to have access to the debug menu, and then used it to give myself +2 in each of the purchasable stats in an attempt to make things a bit easier on me. Not sure if it is!


*Edit: I just wanna add how cute and heartwarming the healing mechanic is. I certainly appreciate it more during less stressful moments. More than this, I will not say.

Let's work on your game descriptions!

If, by saying the game is a "loop game", you actually mean that the player plays the same in-day game over and over again until... whatever breaks the loop breaks it, and that this Groundhog Day effect is among the supernatural aspects that you'd rather not tell players about right off the bat? Still, even if that was the case, I think you could still write something like...

In this game, players will lead Ethan to question people and search locations for clues as to his father's murder. What ending you earn will depend on what items you uncover during the game.

...this. I could also suggest writing that not all discoveries will be related to the murder, or be obvious, but, I'm not sure how clues will be relayed in-game. Like, it's one thing to have searchable objects have a shine/outline to them, but, on the other hand, I'm not sure if you want to apply that kind of feature to only objects that grant a valid lead, given the type of game that it is.

*Edit: I would tend to agree with Frogge that if the game does repeat in-game days as a mechanic, it would not hurt to be forthcoming about it. You might be able to leave out the detail about the pendant, since the precise method/device of day-looping probably isn't important until people play the game? Borrowing/editing Frogge's suggestion for a bit...

Officer Ethan is returns to his home for the first time in a few years to attend a party. But when his father is unexpectedly murdered, it causes him to question his family's dark history. As inexplicable supernatural events begin to occur, he must try to uncover the secret his family is trying to hide. Can he find the one that killed his father? And who is the mystery person pulling the strings behind the scenes?

The game is split into 7 chapters, in which you will be repeating the same three days from different perspectives. You will explore, gather alibis, and discover clues. It is a mystery solving adventure game with multiple endings and a narrative focus.

This game contains sensitive content including domestic violence, murder, and sexual assault. Please play at your own discretion.

Hero's Realm: Heroic Edition

If only there was a place for fledgling designers. A place to NETWORK with other RPG MAKERS where one could post their ideas, get feedback on them, and perhaps even get better at things one is bad at...

[RMVX ACE] Pets and Summons v1.1a Script Bug

While I did post a few findings on Discord, I'll post here as well for anybody else that wants to look into this.

So, I put in some console commands in an attempt to output some data points. The first test was just to get the x-coordinates of the actors involved.

class Sprite_Popup < Sprite_Base
  def create_popup_bitmap
    rules_array = YEA::BATTLE::POPUP_RULES[@rules]
    bw = Graphics.width
    bw += 48 if @flags.include?("state")
    bh = Font.default_size * 3
    bitmap = Bitmap.new(bw, bh)
    bitmap.font.name = rules_array[8]
    size = @flags.include?("critical") ? rules_array[2] * 1.2 : rules_array[2]
    bitmap.font.size = size
    bitmap.font.bold = rules_array[3]
    bitmap.font.italic = rules_array[4]
    if flags.include?("critical")
      crit = YEA::BATTLE::POPUP_RULES["CRITICAL"]
      bitmap.font.out_color.set(crit[5], crit[6], crit[7], 255)
    else
      bitmap.font.out_color.set(0, 0, 0, 255)
    end
    dx = 0; dy = 0; dw = 0
    dx += 24 if @flags.include?("state")
    dw += 24 if @flags.include?("state")
    if @flags.include?("state") || @flags.include?("buff")
      c_width = bitmap.text_size(@value).width
      icon_bitmap = $game_temp.iconset
      icon_index = flag_state_icon
      rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
      bitmap.blt(dx+(bw-c_width)/2-36, (bh - 24)/2, icon_bitmap, rect, 255)
    end
    bitmap.font.color.set(rules_array[5], rules_array[6], rules_array[7])
    bitmap.draw_text(dx, dy, bw-dw, bh, @value, 1)
    self.bitmap = bitmap
    self.x = @battler.screen_x
    puts(@battler.name, @battler.screen_x) # <- This line of code, right here!
    self.x += rand(4) - rand(4) if @battler.sprite.popups.size >= 1
    self.x -= SceneManager.scene.spriteset.viewport1.ox
    self.y = @battler.screen_y - @battler.sprite.oy/2
    self.y -= @battler.sprite.oy/2 if @battler.actor?
    self.y -= SceneManager.scene.spriteset.viewport1.oy
    self.ox = bw/2; self.oy = bh/2
    self.zoom_x = self.zoom_y = rules_array[0]
    if @flags.include?("no zoom")
      self.zoom_x = self.zoom_y = rules_array[1]
    end
    @target_zoom = rules_array[1]
    @zoom_direction = (self.zoom_x > @target_zoom) ? "down" : "up"
    self.z = 500
  end
end


The end-result for that was...

Eric
115
Natalie
193
Terence
271
Alice
127


...as so. Didn't matter how many people were in the party, the summoned actor's `screen_x` was a constant value, 127. So, how is that value derived?

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # new method: screen_x
  #--------------------------------------------------------------------------
  def screen_x
    return 0 unless SceneManager.scene_is?(Scene_Battle)
    status_window = SceneManager.scene.status_window
    return 0 if status_window.nil?
    item_rect_width = (status_window.width-24) / $game_party.max_battle_members
    ext = SceneManager.scene.info_viewport.ox
    rect = SceneManager.scene.status_window.item_rect(self.index)
    constant = 128 + 12
    # Debugging lines start here
    puts(name, self.index)
    if self.index == $game_party.members.size - 1
      puts(name)
      puts(item_rect_width)
      puts(ext)
      puts(rect.x)
    end
    # Debugging lines end here
    return constant + rect.x + item_rect_width / 2 - ext
  end
end


At no point in the process do the `puts` methods print anything to the console after the summoned actor is added. Which feels wrong to me, because a value is obviously being generated, I just don't know how the hell it does so.

[RMMV] Save file description

The functions within the plugin would focus on only editing the contents of the save, and load screens. These functions would include DataManager.makeSavefileInfo(), Window_SaveInfo.drawItem() (or whatever object that exists that makes the window on the lower part of...



...this screen), among other functions.

At any rate, I'm not sure how much further assistance I can be. Like, I don't actually own/have RPG Maker MV to be able to test anything. What I've been doing so far is looking stuff up in a game made with MV that I happen to have on-hand, and using my knowledge from working with Ace and MZ.

Let's work on your game descriptions!

Given what is there, I can suggest the following:

After a few years away from home, Officer Ethan was called to attend a party. He soon learns his father was murdered. After a series of apparently supernatural events that he couldn't explain, Ethan begins to uncover his dark family's long-hidden secrets. Will he found out who killed his father? Is it the same person that's been manipulating the events of late? Does either of these two have anything to do with his family's secrets?

This game contains domestic violence, murder, sexual assault, and is NOT recommended for children. Play at your own pace and risk.

The game contains 7 chapters with multiple endings, and an engaging storyline.


I'll note, however, that, within my capacity as site moderator, I can see the denial message. It suggests to have a paragraph on the gameplay. That shouldn't provide too many opportunities for potential spoilers. For example, is this strictly a murder/mystery where the player is tasked to search objects, or talk to people to uncover clues/leads? Does the "apparently/supposedly supernatural events" possibly include combat with creatures, whither they are actually supernatural, or not? As a suggestion, you can probably include such statements below, or with, the sentence after the trigger/content warning. So, as a further example, you could write something like...

The game contains 7 chapters with multiple endings, and an engaging storyline. Lead Ethan through the town to uncover his family's secrets, the truth behind his father's death, and the truth behind the strange events happening in town!


...this, in the case the gameplay is more centered on the murder/mystery aspect.

[RMMV] Save file description

Like, how to make a plugin at all? You can use NotePad, WordPad, or like software. I've seen plugins that just plow right into the code, and no fluff. I've also seen plugins with headers (out of lack of a better term to use) that look something like...

/*
* @plugindesc Save File Description
* @author Marrend
* @help
* Makes save files relay more information when selected.
*/


...this. Writing a header might be useful to identify the plugin in your project's plugin manager, but, it might also depend on how many other plugins you have as well. If you do have a header, the code would be after it. If not, well, you just... write the code?

[RMMV] Save file description

I assume this is all in rpg_windows.js? is there any specific line it has to be under or do i just plop it anywhere?


Well, if I want to be honest, I'd suggest making a new JS file, and add the resulting file into the project with the plug-in manager. That way, the default programming still exists. In the worst-case scenario where you'd end up removing the snippet, you'd still have that original programming in case something goes amiss.

And to be fair, it's not a complete code, so a copy-paste shouldn't necessarily work to begin with, even if you did write it into rpg_windows.js.

Also, there's a total of 10 characters. I assume for that, I just need to repeat the code of each of them?


You could write a for loop based on the Actor ID? Off the top of my head, it might look like...

for (let i=0; i<$dataActors.length; i++) {
  actor = @dataActors[i+1]
  this.drawText(actor.name, 0, this.lineHeight()*i, this.contents().width);
};


...so. Though, writing that, I'm not 100% sure if the object `@dataActors` would contain the values that it should have at the point of the title screen. Anywhere else, absolutely.

Also, for the code...

this.drawText("Ranmaru:", 0, this.lineHeight(), this.contents().width);
this.drawText("Alice:", 0, this.lineHeight()*2, this.contents().width);


...is there only supposed to be one 0 followed by "this.lineHeight"?


Yes. The `drawText` function needs at least four parameters to be passed into it. The first parameter represents the text to write. The next two parameters are the initial x/y coordinates of where the text starts to write. The fourth parameter represents the maximum width that is utilized for the text. There is a fifth optional parameter that determines the alignment of the text. The default behavior is for the text to be left-aligned, but can be set to right-aligned (as per the example in my previous post) or centered.

[RMMV] Save file description

The function `Window_SavefileList.drawItem` creates the list of files to load/save. The information we want to display would probably go into an instance of `Window_Base`. I'm not entirely prepared to write out the entire thing, but...

DataManager.makeSavefileInfo = function() {
    var info = {};
    info.globalId   = this._globalId;
    info.title      = $dataSystem.gameTitle;
    info.characters = $gameParty.charactersForSavefile();
    info.faces      = $gameParty.facesForSavefile();
    info.playtime   = $gameSystem.playtimeText();
    info.timestamp  = Date.now();
    info.switches   = $gameSwitches;
    return info;
};

Window_SaveInfo.prototype.drawItem = function(index) {
  id = index + 1;
  info = DataManager.loadSavefileInfo(id);
  
  this.drawText("Anzu:", 0, 0, this.contents().width);
  this.drawText("Ranmaru:", 0, this.lineHeight(), this.contents().width);
  this.drawText("Alice:", 0, this.lineHeight()*2, this.contents().width);
  
  if (info.switches(36) {
    this.deathColor();
    this.drawText("Dead", 0, 0, this.contents().width, 'right');
  } else {
    this.normalColor();
    this.drawText("Alive", 0, 0, this.contents().width, 'right');
  };
  
  if (info.switches(37) {
    this.deathColor();
    this.drawText("Dead", 0, 0, this.contents().width, 'right');
  } else {
    this.normalColor();
    this.drawText("Alive", 0, 0, this.contents().width, 'right');
  };
  
  if (info.switches(38) {
    this.deathColor();
    this.drawText("Dead", 0, 0, this.contents().width, 'right');
  } else {
    this.normalColor();
    this.drawText("Alive", 0, 0, this.contents().width, 'right');
  };
};

...here's a basic idea of what I had in mind, based on what you wrote, and certain assumptions.

[RMMV] Save file description

I personally wouldn't edit `rpg_winsdows.js` directly. I'd put together a small plug-in, or put it into a plug-in collection.

Either way, the save-file description that includes time elapsed I think is part of the header? That's defined in `DataManager`, as defined in `rpg_managers.js`.

DataManager.makeSavefileInfo = function() {
    var info = {};
    info.globalId   = this._globalId;
    info.title      = $dataSystem.gameTitle;
    info.characters = $gameParty.charactersForSavefile();
    info.faces      = $gameParty.facesForSavefile();
    info.playtime   = $gameSystem.playtimeText();
    info.timestamp  = Date.now();
    return info;
};


The sub-thought in my head is that you could do something like...

DataManager.makeSavefileInfo = function() {
    var info = {};
    info.globalId   = this._globalId;
    info.title      = $dataSystem.gameTitle;
    info.characters = $gameParty.charactersForSavefile();
    info.faces      = $gameParty.facesForSavefile();
    info.playtime   = $gameSystem.playtimeText();
    info.timestamp  = Date.now();
    info.switches   = $gameSwitches;
    return info;
};


...to be able to refer to the save file's particular instance of `$gameSwitches`. `Window_SavefileList` uses the lines...

var id = index + 1;
var info = DataManager.loadSavefileInfo(id);


...to read the info that is does read, so, I image that whatever instance of `Window_Base` that you are using for the text box at the bottom of the screen would get that data in a similar fashion through `Scene_Load`.