Merchant inventory


#21

Someone who knows the code well enough should really put a quick-builder thread, with details on how to relatively quickly add new stuff. Something like:

If you want to add a new mission:

  • Add new mission title in
  • Add new mission dialogue in
  • add new mission goal in
  • etc.

If you want to add a new building:

  • create file in
  • set spawn details in
  • etc.

Would help new people get into helping the project if there was an instruction list for the simpler stuff.


#22

Missions are defined in data/json/npcs/missiondef.json and data/json/npcs/npcs.json.
There’s a bunch of hard-coded parsing behind the scenes, but I’m pretty sure you can add a new quests without adding new code.

Each type of NPC in npcs.json can have a “mission_offered” string, like

"mission_offered" : "MISSION_OLD_GUARD_REP_1"

Each mission is defined in missiondef.json, like so:

  {
    "id": "MISSION_OLD_GUARD_REP_1",
    "type": "mission_definition",
    "name": "Kill Bandits",
    "goal": "MGOAL_ASSASSINATE",
    "dialogue": {
      "describe": "We need help...",
      "offer": "I don't like sending untested men into the field but if you have stayed alive so far you might have some skills.  There are at least a pair of bandits squatting in a local cabin, anyone who preys upon civilians meets a quick end... execute both of them for their crimes.  Complete this and the Old Guard will consider you an asset in the region.",
      "accepted": "Contractor, I welcome you aboard.",
      "rejected": "The States will remain a wasteland unless good men choose to save it.",
      "advice": "They might suspect you are coming, keep an eye out for traps.",
      "inquire": "Have you completed your mission?",
      "success": "The Old Guard thanks you for eliminating the criminals.  You won't be forgotten.",
      "success_lie": "What good does this do us?",
      "failure": "It was a lost cause anyways..."
    }
  }

The important bits here are the “name”, which is what is displayed in your Missions list, the dialogue, which I think is more or less self-explanatory, and the goal. Goals are semi-harded from this list:
MGOAL_FIND_ANY_ITEM, MGOAL_FIND_ITEM - find some item or items
MGOAL_GO_TO_TYPE - move to a specific type of location
MGOAL_KILL_MONSTER - kill a specific monster
MGOAL_ASSASSINATE - kill a specific NPC
MGOAL_KILL_MONSTER_SPEC - kill a bunch of monsters

I don’t think you can currently implement anything but MGOAL_GO_TO_TYPE or MGOAL_FIND_ITEM without some C++ support for the “start” function. I’m working to fix that, but stuff takes time.

However, you can implement fetch quests! This is the scavenger quest from the Tacoma Commune:

  {
    "id": "MISSION_RANCH_SCAVENGER_4",
    "type": "mission_definition",
    "name": "Make 12 Molotov Cocktails",
    "goal": "MGOAL_FIND_ITEM",
    "difficulty": 5,
    "value": 50000,
    "item": "molotov",
    "count": 12,
    "dialogue": { blah blah blah }
  }

there’s technically a start function, but all it does it build up the Tacoma Commune - it’s not strictly relevant to the quest.

I think you can also implement MGOAL_GO_TO_TYPE but you’d have to experiment.

I’m pretty sure the dialogue bits are just standard dynamic lines for npcs, which are heavily documented in doc/NPCs.md.

I’ll try to add a “how to contribute” doc/thread, though it’d would mostly be pointers to other, existing documentation.


#23

Thanks for the breakdown! Maybe my next dialogue step then will be to set up some new overmap terrain types and associated NPC quests to go there.


#24

6 posts were split to a new topic: Setting timers for game events


#29

First pass (general overview, setup, and recipes) here:

I’ll add more as I have time.