Status
Not open for further replies.

Yanfly

Veteran
Joined
Mar 15, 2012
Messages
1,763
Reaction score
2,661
Damage Core >> Armor Scaling

Features and How to Use




Scale defensive stats relative to a universal scale and gives your players a way to increase and decrease damage without having to provide pure stats. Adds new gameplay mechanics such as Armor Penetration and Armor Reduction into your game!

 

This plugin requires Damage Core: http://yanfly.moe/2015/11/07/yep-25-damage-core/

 

Get the Plugin Here: http://yanfly.moe/2015/11/28/yep-33-armor-scaling/

 

Instructions


Introduction

This plugin requires YEP_DamageCore. Make sure this plugin is located under YEP_DamageCore in the plugin list.

This plugin serves as a damage balancing plugin to make numbers across the battlefield more universal for both actors and enemies alike and gets past the flaws that ATK – DEF formulas have.

Armor Scaling

Armor Scaling allows the damage formula to be rid of “b.def * 2” and similar calculations in favor of scaling the damage relative to the armor values that the attack target has. The following is the armor scaling formula for both positive and negative armor values:

Positive Armor
Rate = 100 / (100 + Armor)

Negative Armor
Rate = 2 – (100 / [100 – Armor])

To get an idea of how armor scaling will affect damage, here’s a table on how 1,000 base damage is affected.

ArmorScaling16.jpg


Using the default base armor formula of 2 defense points is equal to 1 armor, this means at 200 defense, a battler will take only 50% damage. At 999 defense, the battler will take a little bit more than 16.67% damage. At those values without armor scaling, damage can be entirely undone for that very matter. This goes to show how effective armor scaling can be to maintain long-term balancing.

Armor Reduction and Armor Penetration

There are various modifiers that can alter the armor level before the armor scaling rate is applied to damage. Armor goes through four main steps and they are as follows.

1. Armor Reduction, Flat
2. Armor Reduction, Percentage
3. Armor Penetration, Percentage
4. Armor Penetration, Flat

In step 1 (Armor Reduction, Flat), the target’s armor is reduced by a value. Flat armor reduction stacks additively. Flat armor reduction can reduce a target’s armor below zero. For example, if an enemy with 10 armor has their armor reduced by 25, the enemy will have -15 armor. Armor reduction values are provided by target and not the attacker.

In step 2 (Armor Reduction, Percentage), the target’s armor is multiplied by a percentage (100% – the listed value). Percentage armor reduction stacks multiplicatively and is ignored if the target’s armor is 0 or less. Percentage armor reduction makes a bigger difference on targets with higher armor. For instance, with 40% armor reduction, a target with 200 armor will lose 80 while a target with only 50 armor will lose 20. Armor reduction values are provided by the target and not the attacker.

In step 3 (Armor Penetration, Percentage), the target’s armor is multiplied by a percentage (100% – the listed value). Percentage armor penetration stacks multiplicatively and is ignored if the target’s armor is 0 or less. Percentage armor penetration makes a bigger difference on targets with higher armor. For instance, with 40% armor penetration, a target with 200 armor will be considered as having 80 less while a target with only 50 armor will be considered as having 20 less. Armor penetration values are provided by the attacker and not the target.

In step 4 (Armor Penetration, Flat), the target’s armor is treated as being reduced by an amount for purposes of damage calculation, but cannot be reduced below 0. Flat armor penetration stacks additively. Armor penetration values are provided by the attacker and not the target.

Notetags

You may use these notetags to adjust various factors for armor scaling rates and calculations.

Skill and Item Notetags:

<Armor Reduction: x>
Causes the skill/item to reduce the target’s armor level by x. This is calculated first above everything else.

<Armor Reduction: x%>
Causes the skill/item to reduce the target’s armor level by x%. This is calculated second but is ignored if the armor level is less than 0.

<Armor Penetration: x%>
Causes the skill/item to reduce the target’s armor level by x% (but will not go past 0). This is calculated third.

<Armor Penetration: x>
Causes the skill/item to reduce the target’s armor level by x (but will not go past 0). This is calculated last.

Actor, Class, Enemy, Weapon, Armor, State Notetags:

<Physical Armor Reduction: x>
Causes this actor to lose x armor when targeted by physical skills/items. This is calculated first.

<Magical Armor Reduction: x>
Causes this actor to lose x armor when targeted by magical skills/items. This is calculated first.

<Certain Armor Reduction: x>
Causes this actor to lose x armor when targeted by certain skills/items. This is calculated first.

<Physical Armor Reduction: x%>
Causes this actor to lose x% armor when targeted by physical skills/items. This is calculated second.

<Magical Armor Reduction: x%>
Causes this actor to lose x% armor when targeted by magical skills/items. This is calculated second.

<Certain Armor Reduction: x%>
Causes this actor to lose x% armor when targeted by certain skills/items. This is calculated second.

<Physical Armor Penetration: x%>
Causes this actor to cause the target to lose x% armor when using a physical skills/items. This is calculated third.

<Magical Armor Penetration: x%>
Causes this actor to cause the target to lose x% armor when using a magical skills/items. This is calculated third.

<Certain Armor Penetration: x%>
Causes this actor to cause the target to lose x% armor when using a physical skills/items. This is calculated third.

<Physical Armor Penetration: x>
Causes this actor to cause the target to lose x armor but not drop below 0 armor when using a physical skills/items. This is calculated last.

<Magical Armor Penetration: x>
Causes this actor to cause the target to lose x armor but not drop below 0 armor when using a magical skills/items. This is calculated last.

<Certain Armor Penetration: x>
Causes this actor to cause the target to lose x armor but not drop below 0 armor when using a certain skills/items. This is calculated last.

Lunatic Mode – Custom Armor Scaling

For those with some JavaScript experience, you can make use of Lunatic Mode to calculate the way you want armor scaling done for particular skills and items right within the notebox!

<Positive Armor Rate>
value *= 100;
value /= 100 + armor;
</Positive Armor Rate>
This enables you to set a custom positive armor calculation rate for the skill/item instead of using the default positive armor rate.

<Negative Armor Rate>
value *= 2 – (100 / (100 – armor));
value *= 1.5;
</Negative Armor Rate>
This enables you to set a custom negative armor calculation rate for the skill/item instead of using the default positive armor rate.

<Base Armor>
armor = target.def;
armor -= user.atk / 4;
</Base Armor>
This enables you to set a custom way for the skill/item to calculate the base armor value used for armor scaling.

Yanfly Engine Plugins – Battle Engine Extension – Action Sequence Commands

If you have YEP_BattleEngineCore.js installed with this plugin located underneath it in the Plugin Manager, you can make use of these extra armor scaling related action sequences.

ARMOR PENETRATION: X
ARMOR PENETRATION: X%
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Causes the skill to have a global armor pentration property of either x or x% rate. This property is reset at the end of the action sequence.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Usage Example: armor penetration: 20
armor penetration: 30%

ARMOR REDUCTION: X
ARMOR REDUCTION: X%
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Causes the skill to have a global armor reduction property of either x or x% rate. This property is reset at the end of the action sequence.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Usage Example: armor reduction: 20
armor reduction: 30%

RESET ARMOR PENETRATION
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Resets global set armor penetration properties.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Usage Example: reset armor penetration

RESET ARMOR REDUCTION
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Resets global set armor reduction properties.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Usage Example: reset armor reduction

Happy RPG Making!
 
Last edited by a moderator:

??????

Diabolical Codemaster
Veteran
Joined
May 11, 2012
Messages
6,548
Reaction score
3,302
First Language
Binary
Primarily Uses
RMMZ
@Archiea - is this topic not for discussing yanfly plugins? cause like, the notetags we are discussing are specific to yanfly plugins... so...
 

Yanfly

Veteran
Joined
Mar 15, 2012
Messages
1,763
Reaction score
2,661
I had a huge long post there, ready to send, and I decided...

Yes, its known that the notetag reading functionality is utter crap, but yes, there is also logic behind it. Weather you, me, and other script writers agree with that logic, that is another matter entirely. I mean, I think its safe to say the majority of people using yanfly plugins, are NOT able to write their own, and thus, have to go with what they feel is best for their project, and I dont think they will care much about how things are being done - as long as they are being done.

Also - It seems that there is no way we are going to be able to change the logic we consider to be poor. Not with hints, suggestions, or even working examples. So whats the point in wasting your energy trying when its clearly being disregarded? :)

I mean - in reality, all that would have to be done, is a single function being overwritten to accommodate a notetag parsing function. Its not hard. But that is obviously not something yanfly is willing to do for whatever reasons...
Who's disregarding what? Show me where I'm disregarding a suggestion without a valid reason.

And if you're so sure on knowing that solution, please post it here in code. I'm not asking for you to do my work for me. But if all you have are "suggestions" without substance, I won't heed. I have yet to see Galenmereth provide a valid solution that does not get around my listed problems. If it's going to remain that way with both you and him, I'm going to ask you both take it out of my thread until you find a proper solution instead of mere speculation on what would fix the issue.
 

Archeia

Level 99 Demi-fiend
Staff member
Developer
Joined
Mar 1, 2012
Messages
15,235
Reaction score
15,646
First Language
Filipino
Primarily Uses
RMMZ
@Archiea - is this topic not for discussing yanfly plugins? cause like, the notetags we are discussing are specific to yanfly plugins... so...
This is about Yanfly's Plugin releases and REPORTING BUGs and such issues. If you're discussing about programming practices this is NOT the place since everyone has a different take in logic. If you really want to discuss it so bad then put it somewhere else. Otherwise this thread is going to be clogged up with disagreements.
 
Last edited by a moderator:

Fox536

Veteran
Veteran
Joined
Nov 5, 2015
Messages
173
Reaction score
61
Primarily Uses
The Party Change Window seems to get cut off on the default screen resolution, because of the change to gauges in the YEP_CoreEngine.js it makes them super wide for some reason, I tested with only YEP_CoreEngine.js and its the one causing gauges to become to wide.

The issue only shows up while both YEP_CoreEngine.js and YEP_PartySystem.js are active, but line:1297 in YEP_CoreEngine.js seems to be causing the problem. I'm not sure why Math.max is being used there, so I'm not sure what fix would be the best. I would of thought it'd be min, but any info, or fix would be appreciated.

Changing the 200 on said line, to 180 seems to show everything correctly at least on the default resolution.
 
Last edited by a moderator:

Yanfly

Veteran
Joined
Mar 15, 2012
Messages
1,763
Reaction score
2,661
The Party Change Window seems to get cut off on the default screen resolution, because of the change to gauges in the YEP_CoreEngine.js it makes them super wide for some reason, I tested with only YEP_CoreEngine.js and its the one causing gauges to become to wide.

The issue only shows up while both YEP_CoreEngine.js and YEP_PartySystem.js are active, but line:1297 in YEP_CoreEngine.js seems to be causing the problem. I'm not sure why Math.max is being used there, so I'm not sure what fix would be the best. I would of thought it'd be min, but any info, or fix would be appreciated.

Changing the 200 on said line, to 180 seems to show everything correctly at least on the default resolution.
Thanks, I'll get that changed.
 

Galenmereth

Retired
Veteran
Joined
May 15, 2013
Messages
2,248
Reaction score
2,160
First Language
English
Primarily Uses
N/A
Last edited by a moderator:

Fox536

Veteran
Veteran
Joined
Nov 5, 2015
Messages
173
Reaction score
61
Primarily Uses
Hey I'm writing a patch that adds JP Levels for use as class requirements and skill requirements. Would you want me to post it, so you could implement it in the actual plugins?
 

SamBargeron

TV Moon Horse
Veteran
Joined
Nov 5, 2012
Messages
39
Reaction score
13
First Language
English
Hey, would you guys mind checking my code here. I'm trying to use the stat upgrade method displayed in the Tips & Tricks video but I'm getting an odd error.

I have a skill in position 0007 called "Upgrade MaxHP" with skill type "Passive" and use "Never". The following is in the notes:

<Learn Cost: 25 JP>

<Learn Cost Eval>

user._paramPlus[0] += 1;

user.forgetSkill(7);

user.refresh();

</Learn Cost Eval>

I start a new game in my project and attempt to learn the skill. As soon as I select the skill I get the following error:

ReferenceError

change is not defined

This is the second error I've had trying to reproduce this method. The first was due to a typo.

Is there perhaps a mistake I'm failing to see?
 

Fox536

Veteran
Veteran
Joined
Nov 5, 2015
Messages
173
Reaction score
61
Primarily Uses
open the console F8 and copy what it gives you and I can try and help, as far as i can see change isn't anywhere in the skillLearn plugin
 
Last edited by a moderator:

Yanfly

Veteran
Joined
Mar 15, 2012
Messages
1,763
Reaction score
2,661
Hey I'm writing a patch that adds JP Levels for use as class requirements and skill requirements. Would you want me to post it, so you could implement it in the actual plugins?
Sure, that'd be nice! :D Although, you can probably give it more publicity if you release it as an extension plugin, have you considered that? :)

Hey, would you guys mind checking my code here. I'm trying to use the stat upgrade method displayed in the Tips & Tricks video but I'm getting an odd error.

I have a skill in position 0007 called "Upgrade MaxHP" with skill type "Passive" and use "Never". The following is in the notes:

<Learn Cost: 25 JP>

<Learn Cost Eval>

user._paramPlus[0] += 1;

user.forgetSkill(7);

user.refresh();

</Learn Cost Eval>

I start a new game in my project and attempt to learn the skill. As soon as I select the skill I get the following error:

ReferenceError

change is not defined

This is the second error I've had trying to reproduce this method. The first was due to a typo.

Is there perhaps a mistake I'm failing to see?
That's odd? I don't have anything defined as change. When you get the error, can you press F8 to open up the debug console.

From there, click the Console tab.

Then, can you copy and paste all the error messages you see here?
 

SamBargeron

TV Moon Horse
Veteran
Joined
Nov 5, 2012
Messages
39
Reaction score
13
First Language
English
That's odd? I don't have anything defined as change. When you get the error, can you press F8 to open up the debug console.
From there, click the Console tab.

Then, can you copy and paste all the error messages you see here?
ReferenceError: change is not defined

    at Scene_LearnSkill.refreshStatus (/C:/Users/SamBargeron/Documents/Games/Legends/js/plugins/YEP_SkillLearnSystem.js:1554)

    at Scene_LearnSkill.processLearnSkill (/C:/Users/SamBargeron/Documents/Games/Legends/js/plugins/YEP_SkillLearnSystem.js:1572)

    at Scene_LearnSkill.onLearnOk (/C:/Users/SamBargeron/Documents/Games/Legends/js/plugins/YEP_SkillLearnSystem.js:1541)

    at Window_SkillLearn.Window_Selectable.callHandler (rpg_windows.js:896)

    at Window_SkillLearn.Window_Selectable.callOkHandler (rpg_windows.js:1165)

    at Window_SkillLearn.Window_Selectable.processOk (rpg_windows.js:1150)

    at Window_SkillLearn.Window_Selectable.processHandling (rpg_windows.js:1021)

    at Window_SkillLearn.Window_Selectable.update (rpg_windows.js:978)

    at Window_SkillLearn.update (/C:/Users/SamBargeron/Documents/Games/Legends/js/plugins/YEP_SkillLearnSystem.js:816)

    at rpg_core.js:5734
 

Fox536

Veteran
Veteran
Joined
Nov 5, 2015
Messages
173
Reaction score
61
Primarily Uses
I'm not sure what that conditional is supposed to do there, it might be a typo, or bug or something. It just doesn't look like it belongs there, and change definitely isn't defined there at all, so either the definition for change is missing or the line should be 

actor.changeClass(classId);You might try changing line 1554 to what i posted above and see if it works then

Edit: Wow that was fast lol

 


Sure, that'd be nice!  :D  Although, you can probably give it more publicity if you release it as an extension plugin, have you considered that?  :)
Well I could, the only thing is I'm having to edit a few methods, and you might change them later, so compatibility might get iffy.
 
Last edited by a moderator:

JumbocactuarX27

Veteran
Veteran
Joined
Jan 11, 2013
Messages
86
Reaction score
39
First Language
English
Sure, that'd be nice! :D Although, you can probably give it more publicity if you release it as an extension plugin, have you considered that? :)
I posted a few days ago about adding a custom JP cost eval notetag. I formalized it into an extension plugin and have been updating it, but I sure wouldn't complain if I didn't have to keep up with that. I'll post the code below.

Key points:

  • I added a function to the skill object which returns the JP cost, using the eval notetag if available.
  • I moved the Learn Cost Eval's processing to after the JP cost is deducted so that I could use the Learn Cost Eval tag to update any variables I was using to calculate JP cost in the eval notetag. Maybe this deserves a seperate "After Learning Eval" or something?
Code:
//=============================================================================// Yanfly Engine Plugins - Skill Learn Extension - Custom JP Cost Eval Tag// YEP_X_SkillLearnSystem_CustomJPCostEval.js//=============================================================================Yanfly.SLS.Extension = Yanfly.SLS.Extension || {}; //=============================================================================/*:* @plugindesc v1.01 Allows an eval notetag to determine how much JP a skill costs.* @author JumbocactuarX27/Wiggle* * @help* Use the notetag <JP Learn Cost Eval> in a skill's note box and put * javascript inside to determine how much JP a skill should cost.** E.g. $gameVariables.value(19) would set the JP cost to the value of game variable 19.* * Also of note, the <Learn Cost Eval> notetag is evaluated after the JP is deducted from the actor now.* ============================================================================* Changelog* ============================================================================** Version 1.01:* - Compatible with YEP SkillLearnSystem v1.03.** Version 1.00:* - Converted modifications to an extension plugin! * - Compatible with YEP SkillLearnSystem v1.02.*/Yanfly.SLS.Extension.DataManager_processSLSNotetags2 = DataManager.processSLSNotetags2;DataManager.processSLSNotetags2 = function(group) {	Yanfly.SLS.Extension.DataManager_processSLSNotetags2(group);		var jpLearnEvalNote = /<(?:JP LEARN COST EVAL)>/i;	var jpLearnEvalNoteEnd = /<\/(?:JP LEARN COST EVAL)>/i;		for (var n = 1; n < group.length; n++) {		var obj = group[n];		var notedata = obj.note.split(/[\r\n]+/);		var mode = 'none';		obj.learnJpCostEval = '';		obj.getJpCost = function() {			if(this.learnJpCostEval !== '') {				return eval(this.learnJpCostEval);			}			return this.learnCostJp;		};				for (var i = 0; i < notedata.length; i++) {			var line = notedata[i];			if (line.match(jpLearnEvalNote)) {				mode = 'learnJpCostEval';			} else if (line.match(jpLearnEvalNoteEnd)) {				mode = 'none';			} else if (mode === 'learnJpCostEval') {				obj.learnJpCostEval = obj.learnJpCostEval + line + '\n';  			}		}	}};Game_Actor.prototype.sufficientJpLearnSkill = function(skill, classId) {  if (!skill) return false;  if (!Imported.YEP_JobPoints) return true;  var jpCost = skill.getJpCost();  if (this.currentClass().learnSkills.contains(skill.id)) {    if (this.jp(classId) >= jpCost) return true;  }  if (Imported.YEP_ClassChangeCore && eval(Yanfly.Param.SLSIntegrate)) {    for (var i = 0; i < this.unlockedClasses().length; ++i) {      classId = this.unlockedClasses()[i];      if (!$dataClasses[classId]) continue;      if (!$dataClasses[classId].learnSkills.contains(skill.id)) continue;      if (this.jp(classId) >= jpCost) return true;    }} else if (Imported.YEP_ClassChangeCore && $dataClasses[classId]) {    if ($dataClasses[classId].learnSkills.contains(skill.id)) {      if (this.jp(classId) >= jpCost) return true;    }  }  return false;};Window_SkillLearnClass.prototype.isEnabled = function(classId) {    if (!this._skill) return false;    var item = $dataClasses[classId];    if (!item) return false;    var jpCost = this._skill.getJpCost();    if (jpCost > this._actor.jp(item.id)) return false;    return Window_ClassList.prototype.isEnabled.call(this, classId);};Window_SkillLearnData.prototype.hasLearnCost = function() {    if (this._skill.learnCostGold > 0) return true;    if (Imported.YEP_JobPoints && this._skill.getJpCost() > 0) return true;    if (this._skill.learnCost.length > 0) return true;    return false;};Window_SkillLearnData.prototype.drawJpCosts = function(wy) {    if (!Imported.YEP_JobPoints) return wy;    if (this._skill.getJpCost() <= 0) return wy;    var text = '';    if (Yanfly.Icon.Jp > 0) text = '\\i[' + Yanfly.Icon.Jp + ']';    text += Yanfly.Param.Jp;    var wx = this.drawTextEx(text, 0, wy);    var ww = this.contents.width - wx - 4;    var costText = Yanfly.Util.toGroup(this._skill.getJpCost());    this.contents.fontSize = Yanfly.Param.SLSCostSize;    if (this._actor.sufficientJpLearnSkill(this._skill, this._classId)) {      this.changeTextColor(this.powerUpColor());    } else {      this.changeTextColor(this.powerDownColor());    }    this.drawText(costText, wx, wy, ww, 'right');    this.resetFontSettings();    this.resetTextColor();    wy += this.lineHeight();    return wy;};Window_SkillLearnData.prototype.drawOtherCosts = function(wy) {    if (this._skill.learnCost.length <= 0) return wy;    for (var i = 0; i < this._skill.learnCost.length; ++i) {      if (wy + this.lineHeight() > this.contents.height) break;      this.resetFontSettings();      this.resetTextColor();      var ww = this.contents.width;      var line = this._skill.learnCost[i];      var obj = null;      var value = 0;      if (line.match(/ITEM[ ](\d+):[ ](\d+)/i)) {        obj = $dataItems[parseInt(RegExp.$1)];        value = parseInt(RegExp.$2);      } else if (line.match(/WEAPON[ ](\d+):[ ](\d+)/i)) {        obj = $dataWeapons[parseInt(RegExp.$1)];        value = parseInt(RegExp.$2);      } else if (line.match(/ARMOR[ ](\d+):[ ](\d+)/i)) {        obj = $dataArmors[parseInt(RegExp.$1)];        value = parseInt(RegExp.$2);      }      if (!obj) continue;      this.drawItemName(obj, 0, wy, ww);      this.contents.fontSize = Yanfly.Param.SLSCostSize;      var text = '/' + Yanfly.Util.toGroup(value);      this.drawText(text, 0, wy, ww - 4, 'right');      if ($gameParty.numItems(obj) >= value) {        this.changeTextColor(this.powerUpColor());      } else {        this.changeTextColor(this.powerDownColor());      }      ww -= this.textWidth(text);      var held = Yanfly.Util.toGroup($gameParty.numItems(obj))      this.drawText(held, 0, wy, ww - 4, 'right');      this.resetFontSettings();      this.resetTextColor();      wy += this.lineHeight();    }    return wy;};Scene_LearnSkill.prototype.processLearnSkill = function(skill, classId) {  this._skillLearnWindow.activate();  this.actor().learnSkill(skill.id);  SoundManager.playUseSkill();  $gameParty.loseGold(skill.learnCostGold);  $gameParty.processLearnSkillCost(skill);  if (Imported.YEP_JobPoints) this.actor().loseJp(skill.getJpCost(), classId);  this.processLearnCostEval(skill, classId);  this.actor().refresh();  this._skillLearnWindow.refresh();  this.refreshStatus();  if (this._goldWindow) this._goldWindow.refresh();  if (this._classListWindow) this._classListWindow.refresh();  this._skillLearnDataWindow.refresh();  this._commandWindow.refresh();}; 
 

Ilan14

Veteran
Veteran
Joined
Nov 28, 2015
Messages
220
Reaction score
69
First Language
Spanish
Hey Yanfly, I think the plugin you posted for the Battle A.I. Core is in Portuguese, not in English. Just so you know.
 
Status
Not open for further replies.

Latest Threads

Latest Posts

Latest Profile Posts

Finding synonyms for 'Crystal' is a bit awkward, because the thesaurus occasionally thinks I'm talking about drugs.
"Today I will totally open up RPG Maker and work on my game. I have lots of ideas!"

End of day spoiler: It didn't happen.
years later and I still couldn't get over the fact that Konami killed P.T. and Silent Hills. Oh so much potential for a new modern classic horror.
Finished reworking the design of my Itch.io page <3 Back to making plugins.
I kind of want make a map that's just giant version of the player that's they're running around on. Either by stringing together multiple maps or just by shrinking the player sprite for those maps. Actually that might make a fun reveal... The player's on a normal looking map, but then as realization dawns on them it zooms out to show a much larger map that's a giant version of the player. :LZSexcite:

Forum statistics

Threads
109,134
Messages
1,042,437
Members
141,635
Latest member
RegularTester005
Top