I've been playing around the game's code, making changes here and there for my own enjoyment. Below is a list of a bunch of hacks I've made to the game. If you want to apply them to your game, open
Unholy Arts v0.X.html
in a text editor (I recommend VS Code) and follow my instructions for each one.
Restore back and forward arrows
- search and delete this line
JavaScript:
Config.history.maxStates = 1;
Add bar refill buttons on left panel (click to refill bar, display updates on next scene)
- search for
Character.prototype.getCharacterUIbarInfo
, replace the function with this code
JavaScript:
Character.prototype.getCharacterUIbarInfo = function() { // Returns a string that generates the character's basic info when displayed on Sugarcube 2
var string = "<div align='center'>\ " + generateTitledName(this.varName) + " (" + this.getCharScreenButton("Status") + ")\n";
if ( this.avatarL != null ) {
string += gCavatar(this.varName) + "\n";
}
string += "</div> \ ";
string += this.textBars() + "\n";
if ( this.varName == "chPlayerCharacter" ) {
string += this.getCharScreenCheatButton1("Refill Lust") + "\n";
string += this.getCharScreenCheatButton2("Refill Willpower") + "\n";
string += this.getCharScreenCheatButton3("Refill Energy") + "\n";
string += this.getCharScreenCheatButton4("Refill Social Drive") + "\n";
}
return string;
}
Character.prototype.getCharScreenCheatButton1 = function(handler) {
var text = '<<click "' + handler + '">>'
+ '<<' + 'script>>'
+ 'State.variables.chPlayerCharacter.lust.current = State.variables.chPlayerCharacter.lust.max;'
+ '<<' + '/script>>'
+ '<</click>>';
return text;
}
Character.prototype.getCharScreenCheatButton2 = function(handler) {
var text = '<<click "' + handler + '">>'
+ '<<' + 'script>>'
+ 'State.variables.chPlayerCharacter.willpower.current = State.variables.chPlayerCharacter.willpower.max; '
+ '<<' + '/script>>'
+ '<</click>>';
return text;
}
Character.prototype.getCharScreenCheatButton3 = function(handler) {
var text = '<<click "' + handler + '">>'
+ '<<' + 'script>>'
+ 'State.variables.chPlayerCharacter.energy.current = State.variables.chPlayerCharacter.energy.max; '
+ '<<' + '/script>>'
+ '<</click>>';
return text;
}
Character.prototype.getCharScreenCheatButton4 = function(handler) {
var text = '<<click "' + handler + '">>'
+ '<<' + 'script>>'
+ 'State.variables.chPlayerCharacter.socialdrive.current = State.variables.chPlayerCharacter.socialdrive.max; '
+ '<<' + '/script>>'
+ '<</click>>';
return text;
}
Custom starting stats and stat affinities
- search
window.applyPcStatBonusesWeaknesses
and replace the function with the code below. change values any way you like. on new game pick any boon, they don't do anything with this change
JavaScript:
window.applyPcStatBonusesWeaknesses = function() {
State.variables.chPlayerCharacter.physique.value += 4;
State.variables.chPlayerCharacter.physique.affinity += 10;
State.variables.chPlayerCharacter.agility.value += 4;
State.variables.chPlayerCharacter.agility.affinity += 10;
State.variables.chPlayerCharacter.resilience.value += 4;
State.variables.chPlayerCharacter.resilience.affinity += 10;
State.variables.chPlayerCharacter.will.value += 4;
State.variables.chPlayerCharacter.will.affinity += 10;
State.variables.chPlayerCharacter.intelligence.value += 4;
State.variables.chPlayerCharacter.intelligence.affinity += 10;
State.variables.chPlayerCharacter.perception.value += 4;
State.variables.chPlayerCharacter.perception.affinity += 10;
State.variables.chPlayerCharacter.empathy.value += 4;
State.variables.chPlayerCharacter.empathy.affinity += 10;
State.variables.chPlayerCharacter.charisma.value += 4;
State.variables.chPlayerCharacter.charisma.affinity += 10;
State.variables.chPlayerCharacter.luck.value += 4;
State.variables.chPlayerCharacter.luck.affinity += 10;
recalculateMaxBars("chPlayerCharacter");
// State.variables.chPlayerCharacter.recalculateMaxBars();
}
Learn all monster moves at start
- search for
//You learned Hypnotic Glance (Socialization, Sex, Battle)//
and replace the
charactersLearnSceneActions
line with the one below. pick the hypnosis choice at the start of the game
HTML:
charactersLearnSceneActions(["chPlayerCharacter"],["realHypnoticGlance","baHypnoticGlance","energyDrainingKiss","baDrainingKiss","baEnergyDrainingKiss","etherealChains","baEtherealChains"]);
Ultra Instinct (always hit and always dodge)
- search
return (new eva
and add this code above it. first line is always hit, second line is always dodge.
JavaScript:
if (attacker.toString() == "chPlayerCharacter") { hit = true; }
if (attacker.toString() != "chPlayerCharacter" && target.toString() == "chPlayerCharacter") { hit = false; }
Super social hypnotic glance
- search
// Hypnotic Glance
and change
socInt.weight =
to a high value, 100 or higher, to get it offered most of the time
- search
var mVector = new MoodVector(0,0,0,1,-1,3,0,-1);
and change the 3 to increase how much submission target receives
- search
var rVector = new RelationVector(0,0,0,0,3,0,-1);
and change the 3 to increase how much relation submission the target receives
Bottom's submission gain is multiplied by amount of top's orgasms
- search
gainedSubmission += gainedExtraSubmission
and delete these lines
JavaScript:
gainedSubmission += gainedExtraSubmission;
gainedSubmission *= effectsMultiplier * (1 + ((- gC(charKey).mood.dominant + gC(charKey).mood.submissive) / 100));
- add these lines below the 4
gc(charKey)
lines
JavaScript:
gainedSubmission += gainedExtraSubmission;
gainedSubmission = gainedSubmission * gC(charKey2).orgasmSceneCounter;
gainedSubmission *= effectsMultiplier * (1 + ((- gC(charKey).mood.dominant + gC(charKey).mood.submissive) / 100));