Granite walls do not generate with stats specified in ObjectBlueprints.xml

Issue #6207 invalid
N N created an issue

So, unlike any of the other walls I’ve looked at, granite walls are not generating properly in-game. It seems to me as if something is overriding their stats as specified in the ObjectBlueprints.xml file.

In ObjectBlueprints, they are specified at 26000 health, and 40 AV, and no resistances. Every granite wall that generates in game, as far as I can tell, generates instead with 100 health, 5 AV, and 50 cold resistance and 50 heat resistance (I also don’t think that they have the same colors as specified, but I’m unsure of this one).

I’ve experimented with changing the granite wall stats and then generating a new game, and they still don’t take on any of the specified stats. I have, alternatively, experimented with other wall types, and gotten the expected behavior. For example, tarnished chrome walls generate with the stats specified in ObjectBlueprints. If I change a parameter, such as health, and then make a new world, the tarnished chrome walls reflect the change, as expected.

Attached is a save that is in a town with both granite walls and tarnished chrome walls. The character has a structure scanning bracer on, so you can see the wall stats. The character also has nano-neuro animator cables, as well as proselytize, beguile, and dominate. You can see, using this setup, that the granite walls have the wrong stats, either through viewing them while wearing the bracer, or by animating and recruiting/dominating the granite walls specifically.

Maybe I’m just looking in the wrong definitions file, and granite walls are being specified elsewhere in the filesystem, and thus override the ObjectBlueprints setup, or some other silly mistake, but I think I’m seeing this all correctly.

Comments (6)

  1. Noelle Lavenza

    The mismatch is because you’re looking at the stats for Granite, but the blueprint that actually spawns is BaseGraniteWall. Granite is a currently-unused blueprint.

  2. N N reporter

    Are you sure about that, Jade Bishop? The population tables specify this, for villages:

      <population Name="Village_VillageWallStyle_*Default">
        <group Name="Options" Style="pickone">
          <object Blueprint="planks" />
          <object Blueprint="bone" />
          <object Blueprint="canvas" />
          <object Blueprint="stone" />
          <object Blueprint="brick" />
          <object Blueprint="cyber" />
          <object Blueprint="fluted" />
          <object Blueprint="granite" />
          <object Blueprint="marble" />
          <object Blueprint="metal" />
          <object Blueprint="dirt" />
          <object Blueprint="rock" />
          <object Blueprint="secure" />
        </group>
      </population>
    

    I definitely am not good at this, and so you may be able to explain what I’m misinterpreting. But to me, that looks like it will take any of the specified materials for village wall generation.

    When it does, it generates things like the tarnished chrome walls, specific to the objects shown in the ObjectBlueprints. There are two entries in ObjectBlueprints for most walls; one is a a basewall object entry (in this case called “BaseWallGranite”) and the second is an object entry that inherits the wall type (in this case named “Granite”), and specifies its stats as a wall. These both exist for granite, in the same way that they do for all other walls.

    Would the issue, then, be in the xml snippet above, that came out of the PopulationTables.xml? Incidentally, that snippet was the only place that the object type “granite” existed when I searched.

    Probably this is all neither here nor there I suppose, since I’m sure the devs will know pretty quickly what the issue really is here, and whether or not it’s intended behavior.

  3. Noelle Lavenza

    Those don’t correspond to spawning actual objects, and even if they did, I believe blueprints are case-sensitive.. Instead, getAVillageWall() does a string lookup. For granite, it does this:

                    case "granite":
                        villageWallPrototype = GameObjectFactory.Factory.CreateObject("BaseWallGranite");
                        villageWallPrototype.pRender.DisplayName = "granite wall";
                        villageWallPrototype.pRender.ColorString = "&y^r";
                        villageWallPrototype.pRender.TileColor = "&y";
                        villageWallPrototype.pRender.DetailColor = "r";
                        villageWallPrototype.GetPart<Description>().Short = "A wall of solid granite.";
                        break;
    

  4. Log in to comment