Putting the 'role' back in role-playing games since 2002.
Donate to Codex
Good Old Games
  • Welcome to rpgcodex.net, a site dedicated to discussing computer based role-playing games in a free and open fashion. We're less strict than other forums, but please refer to the rules.

    "This message is awaiting moderator approval": All new users must pass through our moderation queue before they will be able to post normally. Until your account has "passed" your posts will only be visible to yourself (and moderators) until they are approved. Give us a week to get around to approving / deleting / ignoring your mundane opinion on crap before hassling us about it. Once you have passed the moderation period (think of it as a test), you will be able to post normally, just like all the other retards.

Pillars of Eternity Coding/Hacking Thread

J_C

One Bit Studio
Patron
Developer
Joined
Dec 28, 2010
Messages
16,947
Location
Pannonia
Project: Eternity Wasteland 2 Shadorwun: Hong Kong Divinity: Original Sin 2 Steve gets a Kidney but I don't even get a tag. Pathfinder: Wrath
Fortunately, wife woke up and helped me out. Circles are now light blue.
You have a pretty cool wife. :)
 

Sensuki

Arcane
Joined
Oct 26, 2012
Messages
9,859
Location
New North Korea
Codex 2014 Serpent in the Staglands Shadorwun: Hong Kong A Beautifully Desolate Campaign
I'm probably going to make a post on the OE about Selection Circle uniformity or something. Comparing how they worked in the IE games and PE.

Probably something that hardly anyone cares about but me, but whatever.

In the new patch I think the lighter blue will be fine with the thinner circles.
 

Sensuki

Arcane
Joined
Oct 26, 2012
Messages
9,859
Location
New North Korea
Codex 2014 Serpent in the Staglands Shadorwun: Hong Kong A Beautifully Desolate Campaign
Bester

For the Unit Highlighting Option, code would need to be added to the GameOption class

Code:
// Decompiled with JetBrains decompiler
// Type: GameOption
// Assembly: Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: DF4C6C3A-AD7F-49DB-A385-AF294186A2A2
// Assembly location: D:\20-10-14\Desktop\PE LOGS\333bb.dll

using System;
using UnityEngine;

[Serializable]
public class GameOption
{
  private bool[] BoolOptions = new bool[23];
  public float MasterVolume = 1f;
  public float MusicVolume = 1f;
  public float SoundVolume = 1f;
  public float TooltipDelay = 1f;
  public string LanguageName = string.Empty;
  public float ScrollSpeed = 1f;
  private float m_FontScale = 1f;
  public float MinZoom = 1f;
  public float MaxZoom = 1.5f;
  private AutoPauseOptions m_autopause = new AutoPauseOptions();
  public UIDropdownResolution.MyResolution Resolution;
  public GameOption.FontScaleChangedDelegate OnFontScaleChanged;

  public bool DeveloperCommentary
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DEVELOPER_COMMENTARY);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DEVELOPER_COMMENTARY, value);
    }
  }

  public bool DeathIsPermanent
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DEATH_IS_PERMANENT);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DEATH_IS_PERMANENT, value);
    }
  }

  public bool AoeHighlighting
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.AOE_HIGHLIGHTING);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.AOE_HIGHLIGHTING, value);
    }
  }

  public bool DisplayUnqualifiedInteractions
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DISPLAY_UNQUALIFIED_INTERACTIONS);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DISPLAY_UNQUALIFIED_INTERACTIONS, value);
    }
  }

  public bool DisplayInteractionQualifier
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DISPLAY_INTERACTION_QUALIFIER);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DISPLAY_INTERACTION_QUALIFIER, value);
    }
  }

  public bool DisplayPersonalityReputationIndicators
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DISPLAY_PERSONALITY_REPUTATION_INDICATORS);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DISPLAY_PERSONALITY_REPUTATION_INDICATORS, value);
    }
  }

  public bool DisplayRelativeDefenses
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DISPLAY_RELATIVE_DEFENSES);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DISPLAY_RELATIVE_DEFENSES, value);
    }
  }

  public bool DisplayQuestObjectiveTitles
  {
    get
    {
      return this.GetOption(GameOption.BoolOption.DISPLAY_QUEST_OBJECTIVE_TITLES);
    }
    set
    {
      this.SetOption(GameOption.BoolOption.DISPLAY_QUEST_OBJECTIVE_TITLES, value);
    }
  }

  public float FontScale
  {
    get
    {
      return this.m_FontScale;
    }
    set
    {
      if ((double) this.m_FontScale == (double) value)
        return;
      this.m_FontScale = value;
      if (this.OnFontScaleChanged == null)
        return;
      this.OnFontScaleChanged(value);
    }
  }

  public AutoPauseOptions AutoPause
  {
    get
    {
      return this.m_autopause;
    }
    set
    {
      this.m_autopause = value;
    }
  }

  public bool GetOption(GameOption.BoolOption option)
  {
    return this.BoolOptions[(int) option];
  }

  public void SetOption(GameOption.BoolOption option, bool setting)
  {
    this.BoolOptions[(int) option] = setting;
  }

  public void CopyFrom(GameOption other)
  {
    other.BoolOptions.CopyTo((Array) this.BoolOptions, 0);
    this.MasterVolume = other.MasterVolume;
    this.MusicVolume = other.MusicVolume;
    this.SoundVolume = other.SoundVolume;
    this.TooltipDelay = other.TooltipDelay;
    this.FontScale = other.FontScale;
    this.ScrollSpeed = other.ScrollSpeed;
    this.LanguageName = other.LanguageName;
    this.MinZoom = other.MinZoom;
    this.MaxZoom = other.MaxZoom;
    this.Resolution = new UIDropdownResolution.MyResolution(other.Resolution);
    this.AutoPause.CopyFrom(other.AutoPause);
  }

  public bool Matches(GameOption other)
  {
    for (int index = 0; index < this.BoolOptions.Length; ++index)
    {
      if (this.BoolOptions[index] != other.BoolOptions[index])
        return false;
    }
    if ((double) other.MasterVolume == (double) this.MasterVolume && (double) other.MusicVolume == (double) this.MusicVolume && ((double) other.SoundVolume == (double) this.SoundVolume && (double) other.TooltipDelay == (double) this.TooltipDelay) && ((double) other.FontScale == (double) this.FontScale && (double) other.ScrollSpeed == (double) this.ScrollSpeed && (other.LanguageName.Equals(this.LanguageName) && (double) other.MinZoom == (double) this.MinZoom)) && ((double) other.MaxZoom == (double) this.MaxZoom && other.Resolution.Equals((object) this.Resolution)))
      return this.AutoPause.Matches(other.AutoPause);
    else
      return false;
  }

  public static bool BoolOptionDefault(GameOption.BoolOption c)
  {
    if (c != GameOption.BoolOption.COMBAT_TOOLTIPS_UI && c != GameOption.BoolOption.QUEST_UPDATES_UI && (c != GameOption.BoolOption.COLORBLIND_MODE && c != GameOption.BoolOption.GIBS) && (c != GameOption.BoolOption.SCREEN_EDGE_SCROLLING && c != GameOption.BoolOption.VSYNC && (c < GameOption.BoolOption.AOE_HIGHLIGHTING || c > GameOption.BoolOption.DISPLAY_QUEST_OBJECTIVE_TITLES)))
      return c == GameOption.BoolOption.DONT_RESTRICT_STASH;
    else
      return true;
  }

  public void LoadFromPrefs()
  {
    for (int index = 0; index < 23; ++index)
    {
      bool flag = GameOption.BoolOptionDefault((GameOption.BoolOption) index);
      bool setting = PlayerPrefs.GetInt(((GameOption.BoolOption) index).ToString(), !flag ? 0 : 1) > 0;
      this.SetOption((GameOption.BoolOption) index, setting);
    }
    this.MasterVolume = PlayerPrefs.GetFloat("MasterVolume", 1f);
    this.MusicVolume = PlayerPrefs.GetFloat("MusicVolume", 1f);
    this.SoundVolume = PlayerPrefs.GetFloat("SoundVolume", 1f);
    this.TooltipDelay = PlayerPrefs.GetFloat("TooltipDelay", 1f);
    this.ScrollSpeed = PlayerPrefs.GetFloat("ScrollSpeed", 1f);
    this.FontScale = PlayerPrefs.GetFloat("FontScale", 1f);
    this.MinZoom = PlayerPrefs.GetFloat("MinZoom", 1f);
    this.MaxZoom = PlayerPrefs.GetFloat("MaxZoom", 1.5f);
    this.LanguageName = PlayerPrefs.GetString("LanguageName", StringTableManager.CurrentLanguage.Name);
    string str1 = "Resolution";
    int width1 = Screen.get_width();
    int height1 = Screen.get_height();
    Resolution currentResolution1 = Screen.get_currentResolution();
    // ISSUE: explicit reference operation
    int refreshRate1 = ((Resolution) @currentResolution1).get_refreshRate();
    string str2 = new UIDropdownResolution.MyResolution(width1, height1, refreshRate1).SerialString();
    this.Resolution = new UIDropdownResolution.MyResolution(PlayerPrefs.GetString(str1, str2));
    this.AutoPause.Initialize();
    BigHeads.Enabled = GameState.Option.GetOption(GameOption.BoolOption.BIG_HEADS);
    int num1 = GameState.Option.Resolution.width;
    Resolution currentResolution2 = Screen.get_currentResolution();
    // ISSUE: explicit reference operation
    int width2 = ((Resolution) @currentResolution2).get_width();
    if (num1 == width2)
    {
      int num2 = GameState.Option.Resolution.height;
      Resolution currentResolution3 = Screen.get_currentResolution();
      // ISSUE: explicit reference operation
      int height2 = ((Resolution) @currentResolution3).get_height();
      if (num2 == height2)
      {
        int num3 = GameState.Option.Resolution.refreshRate;
        Resolution currentResolution4 = Screen.get_currentResolution();
        // ISSUE: explicit reference operation
        int refreshRate2 = ((Resolution) @currentResolution4).get_refreshRate();
        if (num3 == refreshRate2)
          goto label_7;
      }
    }
    Screen.SetResolution(GameState.Option.Resolution.width, GameState.Option.Resolution.height, Screen.get_fullScreen(), GameState.Option.Resolution.refreshRate);
label_7:
    if (StringTableManager.CurrentLanguage.Name != GameState.Option.LanguageName)
      StringTableManager.SetCurrentLanguageByName(GameState.Option.LanguageName);
    if (GameState.OnDifficultyChanged != null)
      GameState.OnDifficultyChanged(GameState.Mode.Difficulty);
    QualitySettings.set_vSyncCount(!this.GetOption(GameOption.BoolOption.VSYNC) ? 0 : 1);
    UICamera.tooltipDelay = this.TooltipDelay;
    WinCursor.Clip(true);
  }

  public void SaveToPrefs()
  {
    for (int index = 0; index < 23; ++index)
      PlayerPrefs.SetInt(((GameOption.BoolOption) index).ToString(), !this.GetOption((GameOption.BoolOption) index) ? 0 : 1);
    PlayerPrefs.SetFloat("MasterVolume", this.MasterVolume);
    PlayerPrefs.SetFloat("MusicVolume", this.MusicVolume);
    PlayerPrefs.SetFloat("SoundVolume", this.SoundVolume);
    PlayerPrefs.SetFloat("TooltipDelay", this.TooltipDelay);
    PlayerPrefs.SetFloat("FontScale", this.FontScale);
    PlayerPrefs.SetFloat("MinZoom", this.MinZoom);
    PlayerPrefs.SetFloat("MaxZoom", this.MaxZoom);
    PlayerPrefs.SetFloat("ScrollSpeed", this.ScrollSpeed);
    PlayerPrefs.SetString("LanguageName", this.LanguageName);
    PlayerPrefs.SetString("Resolution", this.Resolution.SerialString());
    this.AutoPause.SaveOptions();
    PlayerPrefs.Save();
  }

  public enum BoolOption
  {
    DEATH_IS_PERMANENT,
    AOE_HIGHLIGHTING,
    DISPLAY_UNQUALIFIED_INTERACTIONS,
    DISPLAY_INTERACTION_QUALIFIER,
    DISPLAY_PERSONALITY_REPUTATION_INDICATORS,
    DISPLAY_RELATIVE_DEFENSES,
    DISPLAY_QUEST_OBJECTIVE_TITLES,
    BIG_HEADS,
    HIDE_CIRCLES,
    HIDE_OFFSCREEN_POINTERS,
    ALWAYS_SAVE_OPTIONS,
    LIGATURES,
    DEVELOPER_COMMENTARY,
    COMBAT_TOOLTIPS_UI,
    QUEST_UPDATES_UI,
    COLORBLIND_MODE,
    SOLID_HUD,
    GIBS,
    SCREEN_EDGE_SCROLLING,
    DONT_WARN_STORE_TOO_POOR,
    VSYNC,
    CLIP_CURSOR,
    DONT_RESTRICT_STASH,
    COUNT,
  }

  public delegate void FontScaleChangedDelegate(float newscale);
}

A new enum, what the default value is, and probably something else (getter, setter, maybe persistence stuff?). Then in the CharacterHighlight or whatever class, a check would need to be made for the option, such as

Code:
!GameState.Mode.Option.GetOption(GameOption.BoolOption.HIGHLIGHT)
in the line where the Alpha value for the Highlighting is, for values of 1 and 0

That should speed you up a bit there, I gotta go to bed
 
Last edited:

set

Arcane
Joined
Oct 21, 2013
Messages
944
Does C# have the same reflection vulnerability as Java? I know in Java you can make any private member public via reflection.
 
Vatnik
Joined
Sep 28, 2014
Messages
12,296
Location
USSR
Sensuki maybe you can ask your c# guy something, cause I've run into a dead end while trying to modify PoE's Options UI window for that highlight checkbox thing. Whenever I need to recompile a method that references enums outside of the method itself, there's a problem. Those enums don't appear in the code that you see when you hit "replace all with code", so it's like they don't exist in that class at all. And if I manually add them in outside the scope of the method I'm modifying, then it recompiles ok, but probably with bad references, cause I can't reopen that method after saving. And POE can't deal with that dll either.

To be more precise, can't recompile UIOptionsManager's constructor because this._mValidOptionPages is an enum and Reflector doesn't provide a definition for it in the "replace all with code" window.

Also, can you ask him if there is a way to hook up a custom .dll to PoE in order to override/extend classes from the original assembly and force the game to use them instead of the original ones? If yes, how?
Cause I don't know exactly what c#'s reflection can do, but everyone keeps talking about...
 
Last edited:
Vatnik
Joined
Sep 28, 2014
Messages
12,296
Location
USSR
Finished writing a Unity Editor extension which allows Unity to work with .unity3d and .assetbundle files. Can't extract things out yet (but you can do that with Disunity). You can import stuff in though, so you're all set.

I didn't test it thoroughly, but I tested it on 1 item, 1 spell and 1 creature, and it worked every time, so I'm releasing it. (yeah, Obsidian style)
It's supposed to allow you to edit/replace values, meshes, sounds, textures, particles, shaders, animations, and maybe something else, but I only edited values and replaced a texture once. Should work fine, though.

To use it, you need Unity 4.5.1 and it has to be Pro in order to save your changes. You can get a 30 days trial if you're a moralfag, and you can renew it by simply creating a new account every time (no credit card required I've been told). If you can't get a Pro, you should still be able to view stuff (if the compiler complains about a certain line - comment it out, cause you're a moralfag with no pro).

Here's a fancy screenshot:

AssetEditor.jpg


And here it is in form of Unity project: https://dl.dropboxusercontent.com/u/62420848/Test2.zip

Oh, and there is some weird memory leak, so if you load giant files a lot, you're gonna have to restart Unity from time to time. Ah, who am I kidding, you're gonna have to restart it every other 3-4 giant files (the ones that are 50-80 MB).
 

Immortal

Arcane
In My Safe Space
Joined
Sep 13, 2014
Messages
5,070
Location
Safe Space - Don't Bulli
Also, can you ask him if there is a way to hook up a custom .dll to PoE in order to override/extend classes from the original assembly and force the game to use them instead of the original ones? If yes, how?
Cause I don't know exactly what c#'s reflection can do, but everyone keeps talking about...

Reflection is being thrown around here a lot without anyone actually understanding what it means.

Here you Go:
http://www.mono-project.com/docs/tools+libraries/libraries/Mono.Cecil/

If your having trouble, ask your wife for help. :smug:
 
Vatnik
Joined
Sep 28, 2014
Messages
12,296
Location
USSR
you guys should investigate those fugly door/transition icons next :D


Well what about them? It's possible to remove them from the doors, yeah, but what about the outdoor area transitions? If the outdoor area transitions have no icons, then at least the clickable area should be large enough for you to notice it by hovering your mouse over it. Right now, the outdoor clickable area for transition is so tiny, you wouldn't find it without the icon, at least unless you know it's there. And it's not possible to change the size of it without editing every scene, which we can't even do at this point. (well it's possible to just stretch it programmatically, but that would give unexpected behavior in lots of cases, so that's not even an option)

So removing it would force people to pixel hunt for outdoor area transitions.


Thanks.
 
Last edited:

SymbolicFrank

Magister
Joined
Mar 24, 2010
Messages
1,674
At what point do you guys get into C&D territory with this? Is there a "reverse engineering clause" in any kind of license agreement for the beta?
Depends on where you live. In the USA you face serious jail time, if enforced.
 

Ninjerk

Arcane
Joined
Jul 10, 2013
Messages
14,323
At what point do you guys get into C&D territory with this? Is there a "reverse engineering clause" in any kind of license agreement for the beta?
Depends on where you live. In the USA you face serious jail time, if enforced.
I meant specifically with regards to PoE EULA. Doesn't the license typically just get revoked as long as you haven't been profiting by it?
 

set

Arcane
Joined
Oct 21, 2013
Messages
944
At what point do you guys get into C&D territory with this? Is there a "reverse engineering clause" in any kind of license agreement for the beta?
Depends on where you live. In the USA you face serious jail time, if enforced.

The "if enforced" is the big one. I'm pretty sure Obsidian wants us to mod the heck out of their game - it tends to correlate with higher sales.
 

agris

Arcane
Patron
Joined
Apr 16, 2004
Messages
6,937
you guys should investigate those fugly door/transition icons next :D


Well what about them? It's possible to remove them from the doors, yeah, but what about the outdoor area transitions? If the outdoor area transitions have no icons, then at least the clickable area should be large enough for you to notice it by hovering your mouse over it. Right now, the outdoor clickable area for transition is so tiny, you wouldn't find it without the icon, at least unless you know it's there. And it's not possible to change the size of it without editing every scene, which we can't even do at this point. (well it's possible to just stretch it programmatically, but that would give unexpected behavior in lots of cases, so that's not even an option)

So removing it would force people to pixel hunt for outdoor area transitions.
Ok, so remove it from everything but scene transitions. That would still be a large aesthetic improvement.
 

Immortal

Arcane
In My Safe Space
Joined
Sep 13, 2014
Messages
5,070
Location
Safe Space - Don't Bulli
At what point do you guys get into C&D territory with this? Is there a "reverse engineering clause" in any kind of license agreement for the beta?
Depends on where you live. In the USA you face serious jail time, if enforced.

I'm calling bullshit.. even in the most extreme cases the worst has been large fines for perceived damages. We aren't talking about corporate espionage. We are talking about binary modification. I can't think of anything more prolific or ground setting then Blizzard chasing after pirate WoW servers or Glider / Inner Space and Ceiling Fan Software ..

Blizzard only attacks these bot makers and spammers because it's more effective to take them to court then to invest money in software that stops them. Blizzard can't run Warden on WoW servers indefinitely any more, it causes too many latency issues. Their Blowfish encryption has largely been RE'd and keeping up with bot makers is hard because they are fighting a losing battle. The more packet transforming and monitoring they do, the more server load they create.

I seriously can't think of a single court ruling or case that involved modding or modifying binary files or reverse engineering them that didn't end up exclusively with a monetary fine.

Prove me wrong if you have evidence of jail time.. I am not a US Citizen so I am ready to be surprised by how even more disappointing your law system is. :lol:
 

SymbolicFrank

Magister
Joined
Mar 24, 2010
Messages
1,674
At what point do you guys get into C&D territory with this? Is there a "reverse engineering clause" in any kind of license agreement for the beta?
Depends on where you live. In the USA you face serious jail time, if enforced.

I'm calling bullshit.. even in the most extreme cases the worst has been large fines for perceived damages. We aren't talking about corporate espionage. We are talking about binary modification. I can't think of anything more prolific or ground setting then Blizzard chasing after pirate WoW servers or Glider / Inner Space and Ceiling Fan Software ..

Blizzard only attacks these bot makers and spammers because it's more effective to take them to court then to invest money in software that stops them. Blizzard can't run Warden on WoW servers indefinitely any more, it causes too many latency issues. Their Blowfish encryption has largely been RE'd and keeping up with bot makers is hard because they are fighting a losing battle. The more packet transforming and monitoring they do, the more server load they create.

I seriously can't think of a single court ruling or case that involved modding or modifying binary files or reverse engineering them that didn't end up exclusively with a monetary fine.

Prove me wrong if you have evidence of jail time.. I am not a US Citizen so I am ready to be surprised by how even more disappointing your law system is. :lol:
There are two different problems: unlicensed copying of Intellectual Property / copyrighted works, and circumventing copy protection. For both of those offenses people have been sent to jail for 10+ years in the USA. Like the housewife who downloaded some MP3s.

As set said: it's the "if enforced" that is the important part. If they want to fuck you, they can. It's not hard.
 

Immortal

Arcane
In My Safe Space
Joined
Sep 13, 2014
Messages
5,070
Location
Safe Space - Don't Bulli
At what point do you guys get into C&D territory with this? Is there a "reverse engineering clause" in any kind of license agreement for the beta?
Depends on where you live. In the USA you face serious jail time, if enforced.

I'm calling bullshit.. even in the most extreme cases the worst has been large fines for perceived damages. We aren't talking about corporate espionage. We are talking about binary modification. I can't think of anything more prolific or ground setting then Blizzard chasing after pirate WoW servers or Glider / Inner Space and Ceiling Fan Software ..

Blizzard only attacks these bot makers and spammers because it's more effective to take them to court then to invest money in software that stops them. Blizzard can't run Warden on WoW servers indefinitely any more, it causes too many latency issues. Their Blowfish encryption has largely been RE'd and keeping up with bot makers is hard because they are fighting a losing battle. The more packet transforming and monitoring they do, the more server load they create.

I seriously can't think of a single court ruling or case that involved modding or modifying binary files or reverse engineering them that didn't end up exclusively with a monetary fine.

Prove me wrong if you have evidence of jail time.. I am not a US Citizen so I am ready to be surprised by how even more disappointing your law system is. :lol:
There are two different problems: unlicensed copying of Intellectual Property / copyrighted works, and circumventing copy protection. For both of those offenses people have been sent to jail for 10+ years in the USA. Like the housewife who downloaded some MP3s.

As set said: it's the "if enforced" that is the important part. If they want to fuck you, they can. It's not hard.

It's pretty hard actually..
 
Vatnik
Joined
Sep 28, 2014
Messages
12,296
Location
USSR
A little update on the modding situation. I figured out Cecil to some degree and built a somewhat stable modding framework, which I'm hoping to release soon and hopefully people will mod using that from then on. Good things about it:
- You can now code stuff easily in a familiar IDE and inject normal c# code directly into the assembly. What used to take 10 minutes to do with Reflexil before, only takes 1 click now (rebuild & run).
- Standardization. If everyone builds their mods using this framework, there aren't gonna be any conflicts between mods and you're not limited to just one guy's mod. Although, I'm not extremely worried about it, since there are no other tools, and using Reflexil is inadequate.
- User will be able to choose which mods they want to install, like with Weidu.

Now that the framework reached some level of stability, I'm trying to familiarize myself with PoE's UI system (mostly what seems to be NGUI 2.5).
So far I'm only capable of creating buttons and dynamically dragging certain elements of existing UI around (dragged portraits). When I'm capable of doing more, I'll write a starting guide, so people don't have to waste days trying to climb out of pitfalls I encountered myself.

While digging around, I found what appears to be some old code that apparently used to serve as an in-game model viewer. I adapted it into a mod. It allows you to iterate through all models of armor and helmets. The good thing about it is that you're not limited to the items that can be found in assetbundles - it gets you access to all models that aren't even necessarily attached to in-game items. There's not many of them (a few dozen), but if you want to see some new stuff, give it a try.
The console command to activate it is "ModelViewer". Zoom in on your main character, cause this is where the changes are going to happen.

Here's a screenshot:

2014-11-29_00004.jpg

(oh, modifying hands and feet doesn't work, forgot to cut it out)

I'm not going to release the mod in form of a patcher, yet, cause it's not ready. I'm gonna have to add some basic functionality (like backups) and user interface, so maybe next time. This time, the mod comes in form of a dll that contains the following changes and you can't choose what to install. It's all installed:
- Level cap moved to 12
- Intro movie skippable by hitting: LMB, RMB, Enter, Escape, Space
- Blue circles for neutral NPCs
- Cheat console commands unlocked
- ModelViewer added

Here it is: https://dl.dropboxusercontent.com/u/62420848/mod_0.2.zip
Installation: put the .dll into Pillars of Eternity - Public Beta\PillarsOfEternity_Data\Managed

If you want to contribute, know old NGUI, Cecil, general C# or anything that might help - contact me, this shit is really hard.
 

Abu Antar

Turn-based Poster
Patron
Joined
Jan 19, 2014
Messages
14,296
Enjoy the Revolution! Another revolution around the sun that is. Shadorwun: Hong Kong Divinity: Original Sin 2 Pillars of Eternity 2: Deadfire Pathfinder: Wrath I'm very into cock and ball torture I helped put crap in Monomyth
Adam posts.

Hey everyone,

We don't mind if you look through this stuff on your own machine. I would like to ask if you could please not post any screenshots of content not in the BB until the game ships. Do not post screens here or anywhere else - they tend to get circulated on google and we don't want to spoil anything that we don't want to show yet such as Armor, Weapons, Load Screens, Maps, Strings, Creatures, etc.

Thank you!

I like what you guys are doing, but I can understand why he wishes that no screenshots get posted. (Spoilers and all that.)
 

Sensuki

Arcane
Joined
Oct 26, 2012
Messages
9,859
Location
New North Korea
Codex 2014 Serpent in the Staglands Shadorwun: Hong Kong A Beautifully Desolate Campaign
Thought that was the reason they removed cheats from the game. It was the build after I posted some of their unique armors on the forums.
 

As an Amazon Associate, rpgcodex.net earns from qualifying purchases.
Back
Top Bottom