{
    "sugarcube-2": {
        "macros": {
            "act": {
                "container": true,
                "description": "Creates an action for the user to use. Parameter 1: The caption of the link. Parameter 2: Only show in passage-body (1), only in action-bar (-1) in both (0) or default (undefined). Paramter 3: Additional settings-object",
                "parameters": [
					"text |+ '-1'|'0'|'1'|undefined |+ var"
				]
            },
            "actCLA": {
                "container": true,
                "description": "Creates an action for the user to use. Parameter 1: The caption of the link. Parameter 2: Only show in passage-body (1), only in action-bar (-1) in both (0) or default (undefined). Paramter 3: Additional settings-object",
                "parameters": [
					"text |+ '-1'|'0'|'1'|undefined |+ var"
				]
            },
			"actionsRefresh":{
				"description":"Refreshes the actions in the action-bar."
			},
			"cla":{
				"container": true,
				"description":"Clears the current passage and replace it with the widgets contents."
			},
            "gs": {
				"description": "Includes the passage indicated by Parameter 1. The following up to 10 Parameters are optional arguments which are passed to the passage and can there be retrieved by $location_var[$here][_n] with n being the number of the Parameter -2 (meaning Parameter 2 has index 0)",
				"parameters": [
					"passage |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number"
				]
			},
            "gt": {
				"description": "Goes to the passage indicated by Parameter 1. CAUTION: you can't rely on the rest of the current passage bein not executed. The following up to 10 Parameters are optional arguments which are passed to the passage and can there be retrieved by $location_var[$here][_n] with n being the number of the Parameter -2 (meaning Parameter 2 has index 0)",
				"parameters": [
					"passage |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number"
				]
			},
			"refresh":{"description":"Reloads the current passage. Should be used with care, since the passage will reexecute all its code."},
			"regt":{},"ret":{"description":"Creates an action that, if clicked, takes the player back to the last location. Shorthand for <<act 'Return'>><<gt $location>><</act>>. Arg[0] can be specified for a custom label of the button (e.g. <<ret 'Close'>>)."},
			"xgt":{
				"description":"Variant version of gt. Currently there is no reason not to use gt instead, so that's what's advised.",
				"parameters": [
					"passage |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number |+ var|text|number"
				]
			},
            "pt":{
				"description": "Indicates a passage-type. You should use passageType instead",
				"deprecated":true,
				"deprecatedSuggestions":["passageType"]
			},
			"passageType":{
				"description": "Indicates a passage-type.",
				"parameters": [
					"'outside'|'o'|'indoors'|'i'|'quest'|'q'|'menu'|'m' |+ text |+ text |+ text |+ text |+ text |+ text |+ text |+ text"
				]
			},

            "image": {
                "description":"Creates an image in place. Parameter 1 is the relative path to the image. Specify Parameter 2 and 3 to select a random image. Every # in the path is then replaced with a random number in this range.",
				"parameters": [
					"text |+ number &+ number"
				]
            },
			"imageDayNight":{
				"description":"Uses an image depending on whether it's day (daystage 1,2,3) or night (daystage 4,5,6). Parameter 2 replace every # in Parameter 1 (relative path) if it's day. Otherwise Parameter 3 is used.",
				"parameters": [
					"text &+ text &+ text"
				]
			},
			"imageWithTooltip":{
				"container":true
			},
			"linkedImage":{
				"container":true,
				"description":"Image with relative path in Parameter 1 and code to be executed when clicked in body.",
				"parameters": [
					"text"
				]
			},
			"menuLinkedImage":{
				"container":true
			},
			"linkWithImage":{
				"container":true,
				"description":"Image with relative path in Parameter 1, a text to be displayed in Parameter 2, an optional style class in Parameter 3 and code to be executed when clicked in body.",
				"parameters": [
					"text &+ text |+ text |+ text"
				]
			},
			"linkWithTooltip":{
				"container":true,
				"description":"P1: Link Text\n\nP2:Tooltip contents",
				"parameters": [
					"text &+ text"
				]
			},
			"multiselect":{
				"container":true
			},
			"padStart":{
				"description":"Fills the string with the char arg[1] to a length of arg[2]",
				"parameters": [
					"text |+ text |+ number"
				]
			},
            "video": {},
            "msg": {},"msgPresent":{"description":"Low level-presents a message. For internal use by msg-widget."},
            "setinit": {
				"skipArgs": true
			},"setn":{
				"skipArgs": true
			},"setinitpush":{
				"skipArgs": true
			},
			"sets":{
				"skipArgs": true,
				"description": "Like set, but initializes the string first if it doesn't exist. Useful for += operator."
			},

            "either":{
                "container":true,
                "children":["or"],
				"skipArgs": true,
				"description":"Executes either the code in this body or in any or-body. Optionally set a number as first Parameter to indicate the likelyhoods.\n\nUsage:\n\n```\n<<either 1>>\n5% chance\n<<or 2>>10% chance\n<<or 17>>85% chance\n<</either>>```"
            },
			"or":{
				"skipArgs": true,
                "parents":["either"]
            },
			"succession":{
				"container":true,
				"children":["then"],
				"skipArgs": true,
				"description":""
			},
			"then":{
				"skipArgs": true,
				"parents":["succession"]
			},

            "log": {"description":"Writes a string to the log-console","parameters": ["text"]},
			"info": {"description":"Writes a string to the info-console","parameters": ["text"]},
			"warn": {"description":"Writes a string to the warn-console","parameters": ["text"]},
			"error": {"description":"CAUTION: My hold execution of some code in subpassages and widgets. Only use this for severe errors. Also writes a string to the error-console","parameters": ["text"]},
			"debug": {"container": true},"todo": {"container": true},
			"debugVar": {
				"description":"Prints the requested variables (e.g. '$pc' in Debug-mode",
				"parameters": [
					"text"
				]
			},
			"notice":{"container": true},
			"addTimeLink":{},
			"datingNPCsShow":{},
            "npc": {
                "container": true,
				"description":"NPCID, Flags, displayname"
            },
            "npcDecription":{},
			"say":{
				"description":"Use this when a character says something. Parameter 1 is the ID of the PC speaking (e.g. 'A29' for mum). Omit if player character is speaking.",
				"parameters": [
					"text |+ text"
				]
			},
			"npcList":{},
			"npcPronoun":{},
			"npcReaction":{
				"description":"Let's a NPC make comments about the main characters appearance. Parameter 1 is the ID of the NPC. Parameter 2 are additional settings: {pronoun:false}. Set pronoun to true if you want the output text not to lead with the name of the NPC (e.g. 'He says' instead of 'Artem says')."
			},
			"npcLoad":{
				"container":true
			},
			"npcDetails":{},
			"g":{
				"description":"Prints a genderized word for the currently loaded NPC (enclose with npcLoad)."
			},

			"negative":{"container":true,"parameters": ["|+ '0'|'1'|'2'"],"description":"Format the enclosed string to indicate that there is something negative happen. Set Parameter 1 to 1 if it is very negative or 2 if it is extremely negative."},
			"positive":{"container":true,"parameters": ["|+ '0'|'1'|'2'"],"description":"Format the enclosed string to indicate that there is something positive happen. Set Parameter 1 to 1 if it is very positive or 2 if it is extremely positive."},

			"money":{"description":"Renders a number as an amount of money."},

            "datingStart": {},"dateStart": {},"dateAdd": {},
			"proposeDateTime":{},
			"phoneMain":{
				"description":"Opens the main menu of the phone."
			},
			"phoneRing":{},
			"phoneCoversationOption":{"container":true},
			"phoneConversationEnd":{},
			"phoneOverlayAdd":{
				"container":true,
				"description":"Adds the phone-overlay. The phone will stay dark unless you add content, such as <<phoneMainMenu>>."
			},
			"phoneOverlayRemove":{
				"description":"Removes the phone from view"
			},
			"phoneMainMenu":{
				"description":"The markup for the main menu of the phone."
			},
			"phoneConversation":{
				"description":"The markup for the start of a conversation between NPC Parameter 1 and Topic Parameter 2.",
				"parameters": [
					"text &+ text"
				]
			},
			"phoneReceivePendingCall":{},
			"phoneSMSMenu":{
				"description":"The markup for the sms menu of the phone."
			},
			"smsSend":{
				"description":"Sends a message from NPC Parameter 1 at time Parameter 2 (most likely $time.now) with content-passage Parameter 3.",
				"parameters": [
					"text &+ var &+ text"
				]
			},
			"smsShow":{
				"description":"Markup for the SMS from the npc indicated by Parameter 1.",
				"parameters": [
					"text"
				]
			},
			"leaveVehicle":{},
			"useVehicle":{
				"parameters": [
					"text"
				]
			},

			"randomSeed":{
				"container":true,
				"description":"Everything inside the body will not use the default random generator but one seeded with Parameter 1 instead. Use this if random results should stay the same.",
				"parameters": [
					"text|number"
				]
			},

			"addtime":{
				"description": "Shorthand for $time.minutes += n",
				"parameters": [
					"number"
				]
			},
            "time_current": {},
            "time_print": {},
            "weekday": {},
            "date": {},
			"datetime_current":{"description":"Prints the current daytime (e.g. 06:19 Friday 26.08.2016)"},
			"datetime":{},
			"currentDayEventsList":{},
			"duration":{
				"description": "Translates a number of minutes to a string that's supposed to be intuitive for humans. E.g., 5 becomes '5 minutes', 2000 becomes '33 hours'",
				"parameters": [
					"number"
				]
			},

            "ESC":{},
			"event":{
				"container":true,
				"description":"Defines an event that could get executed in the event-system. Argument: Priority, Weight",
				"parameters":["|+ number |+ number"]
			},
			"eventFired":{
				"description":"Tells the event-system that no other events should get executed."
			},
			"eventExecute":{
				"description": "Executes an event",
				"parameters":["text |+ number"]
			},
			"brushHairActions":{
			},
			"mirrorAction":{},
            "shower":{},
            "tampon":{},
	        "quickwash":{},
	        "basin":{},
	        "publicpan":{},

			"drinkWaterAction":{
				"description": "Adds a 'Drink Water'-Action"
			},
			"concatAnd":{},
            "plural":{
				"description": "Prints Parameter 2 if Parameter 1 is 1, otherwise prints Parameter 3. Example: <<plural _n 'egg' 'eggs'>>",
				"parameters": [
					"number &+ text &+ text"
				]
			},
			"textWithTooltip":{
				"container": true,
				"parameters": [
					"text |+ text"
				]
			},
            "ConnectedLocation":{
				"description": "Creates a link to another passage which is shown in the connected-locations-bar. Parameter 1: Label, Parameter 2: Destination Passage, Parameter 3: Passage Arguments, Parameter 4: Image, Parameter 5: Duration in Minutes, Parameter 6: Additional Settings-Object",
				"parameters": [
					"text &+ passage &+ text &+ text |+ number |+ var"
				]
			},
			"ConnectedLocationCode":{
				"container": true,
				"description": "Creates a link which is shown in the connected-locations-bar. Parameter 1: Label, Parameter 2: Image, Parameter 3: Duration in Minutes, Parameter 4: Additional Settings-Object",
				"parameters": [
					"text &+ text |+ number|undefined |+ var"
				]
			},
			"Connection":{
				"description": "From- / To- Passage",
				"parameters":[
					"text &+ text"
				]
			},
			"ConnectionExecute":{
				"description": "CAUTION: For internatl use of the Connection-logic only. Executes the code of a connection-object.",
				"parameters": [
					"var"
				]
			},
			"ConnectedLocationDom":{
				"description": "CAUTION: For internatl use of the Connection-logic only."
			},
			"subpassage":{
				"container":true,
				"description":"Only renders the enclosed code. The other code might get executed nevertheless."
			},

			"itemsOverview":{},
			"itemDescription":{},
			"clothingDescription":{},
			"shop":{},
			"shopItemList":{"container":true},
			"stockItem":{
				"parameters": [
				 	"var"
				]
			},"buyButton":{"container":true},

			"eventReturn":{
				"description":"Sends the player back to the passage that's attached to the current event. Use gt to go to another passage."
			},

			"gt_start_location":{},

			"school_class":{
				"description":"Includes complete markup for a school class. Parameters: Name of class, Variable-Name, Teacher-ID, Return-Passage, Return-Argument, Additional flags",
				"parameters": [
					"text &+ text &+ text &+ text &+ text |+ var"
				]
			},
			"wardrobeFiltersReset":{},
			"strip":{
				"description":"Removes one layer of clothing from the PC: 'all', 'bra','clothes','coat','panties' or 'shoes'",
				"parameters":[
					"text"
				]
			},
			"arouse":{
				"description":"Increases the arouseal of the PC\n\nP1: Act (string, as defined in ```setup.arousal```)\n\nP2: Duration (int, minutes the arousal lasts, negative numbers don't add this time to ```$time```)\n\nP3: Fetishes (array of string)\n\nP4: NPCID (optional string)\n\nP5: Flags",
				"parameters":[
					"text |+ number |+ var |+ text |+ var"
				]
			},
			"arousal":{
				"parameters":[
					"text |+ var"
				]

			},
			"fetishSetting":{},
			"sex":{"container":true},"bound":{"container":true},"noncon":{"container":true},
			"sexStart":{},"sexEnd":{},
			"anal":{},"anal_fist":{},"bj":{},"fuck":{},"vaginal_fist":{},
			"insertion":{},"orgasm":{},
			"cum":{
				"description":"Makes a NPC cum\n\nP1:Bodypart (e.g. 'mouth' or 'vagina')\n\nP2:NPCId,\n\nP3:0(default:random NPC),1(knows NPC and is aware of act),2(knows NPC, isn't aware of act)\n\nP4:Contraception\n\nP5:Potency",
				"parameters":[
					"text &+ text |+ number |+ number |+ number |+ number"
				]
			},
			"pain":{
				"description":"Increases the pain of bodypart arg[0] by arg[1]",
				"parameters": [
					"text &+ number"
				]
			},
			"hypnoNotice":{},
			"therapistUndressVideo":{"description":"Presents a video of an undressing woman. Takes the currently worn clothes into account."},
			"trainTicketValidityLeft":{},
			"body_desc":{
				"parameters": [
					"text |+ text"
				]
			},
			"Achievement":{
				"parameters": [
					"text"
				]
			},
			"cheatMenu":{},

			"code":{"container":true},

			"skillHistoryDiagram":{},

			"version":{},

			"tagAdd":{
				"description": "Temporarily adds a tag to the currently rendered passage."
			},
			"genderedWord":{},"he":{},"He":{},
			"consume":{
				"description": "Called when the PC consumes food and/or drinks.\n\nParameter 0(string) : Beverage ID\n\nParameter 1(optional number) : Percentage to consume. Defaults to 'Eat til full' for meals and to 100% for drinks and snacks.",
				"parameters": [
					"text |+ number"
				]
			},
			"onceADay":{
				"description": "Executes code that is identified by the first parameter only if it hasn't already been executed today.",
				"container":true,
				"parameters": [
					"text"
				]
			},
			"cooldown":{
				"description": "Executes code that is identified by the first parameter only if it hasn't already been executed within the last parameter 2 minutes.\n\nUse `setup.isOnCooldown(string id)` to check for the specified cooldown in other script parts.",
				"container":true,
				"parameters": [
					"text |+ number"
				]
			},
			"socialGroupMemberList":{},
			"socialGroupName":{},
			"socialGroupStanding":{},
			"socialGroupOutfitRating":{},
			"piercingImage":{},"tattooImage":{},
			"npcInfoContainerAdd":{},
			"npcInfoContainerRemove":{}, 
			"characterSelect":{"description":"Adds options to select a starting character. P0: top category, P1: final passage","parameter":"text &+ passage"},
			"dynamicHousing":{},
			"weatherImage":{},
			"hairCutOption":{"container":true},"hairDyeOption":{"container":true},
			"mood":{"description":"Activates a moodlet.","parameters": [
					"text |+ number"
				]},
			"fame":{"description":"Increases Fame [Location,Type,Value (int|string)].","parameters": [
					"text &+ text &+ number|string"
				]},
			"relationship":{"description":"Increases Relationship [NPCID,Type,Value (int|string)].","parameters": [
					"text &+ number|string"
				]},
			"quest":{
				"description":"[Quest Id, Stage]\n\nSets the stage of a given quest, if it isn't already at or past this point. Displays an information-widget.",
				"parameters": [
					"text &+ number"
				]
			}
        }
    }
}
