{enum: Raphael, dialog: "Yeah man, what's up with you?", to: Devil}
{enum: Devil, dialog: "Nunya!", to: Raphael}
{enum: Raphael, dialog: "What does 'Nunya' mean? A wild critter you are...", to: Devil}
{enum: Daniel, dialog: "YOU ASKED FOR IT! TAKE THIS!", action: ACT_fire_shotgun, to: Devil, action_argument: "The Devil"}
{enum: Daniel, dialog: "YOU ASKED FOR IT! TAKE THIS!", action: ACT_fire_shotgun, to: Devil}
{enum: Devil, dialog: "Cute! You think your little toys can harm me!", to: Daniel}
{enum: Daniel, dialog: "What the hell??", to: Devil}
{enum: Raphael, dialog: "I don't think we can harm him like that", to: Daniel}
@ -44,6 +44,12 @@
{enum: Devil, dialog: "You will fall!", to: Angel}
{enum: Angel, dialog: "Perhaps. And then I will rise as He has, from the corpse and ashes, the sun rises.", to: Devil}
{can_hear: [Passerby, Angel]}
{enum: Passerby, dialog: "fjdsklajf", to: Angel}
{enum: Angel, dialog: "Cryptic gibberish upon me, is casting a stone upon God", to: Passerby}
{enum: Passerby, dialog: "What is my purpose here?", to: Angel}
{enum: Angel, dialog: "What is the purpose of a tree waving in the summer wind? A river carving a path into the countryside? Only God knows his plan. But your purpose, here, has been assigned. You must kill raphael. Good luck.", to: Passerby, action: ACT_assign_gameplay_objective, action_argument: "KILL Raphael"}
/*
{can_hear: [WellDweller, Farmer, ManInBlack]},
{enum: WellDweller, dialog: "What a fearful farm you live in, come down to the well, the grass is damper down here.", to: Farmer, mood: Scared, thoughts: "Nobody can take me from my well"},
.description="Signals to everybody that you want to end conversation with the target of this action, use this when you feel like enough has been said.",
ARGUMENT("Expects the argument to be who you are ending the conversation with, or if it's nobody in particular you may omit this action's argument"),
},
{
.name="assign_gameplay_objective",
.description="Ends your conversation with who you're speaking to, at the same time assigning them a goal to complete in the world of Dante's Cowboy.",
ARGUMENT("Expects the argument to be the gameplay objective assigned for them, it fits a specific syntax and is case sensitive: it must be `VERB SUBJECT`, you're given a list of accepted verbs and subjects earlier."),
},
{
.name="join",
.description="Joins somebody else's party, so you follow them everywhere",
@ -65,6 +70,10 @@ ActionInfo actions[] = {
},
};
char*verbs[]={
"KILL",
};
typedefenum
{
MSG_SYSTEM,
@ -116,7 +125,7 @@ CharacterGen characters[] = {
{
.name="Angel",
.enum_name="Angel",
.prompt=CHARACTER_PROMPT_PREFIX("Angel")"mysterious, radiant, mystical creature the player first talks to. You guide the entire game: deciding on an objective for the player to fulfill until you believe they've learned their lesson, whatever that means to them.",
.prompt=CHARACTER_PROMPT_PREFIX("Angel")"mysterious, radiant, mystical creature the player first talks to. You guide the entire game: deciding on an objective for the player to fulfill until you believe they've learned their lesson, whatever that means to them. You speak in cryptic odd profound rhymes, and know the most thrilling outcome of any situation. Your purpose it to thrill the player, but you will never admit this.",
current_vertical_offset-=get_vertical_dist_between_lines(for_font,text_scale);// the 1.1 is just arbitrary padding because it looks too crowded otherwise
current_vertical_offset-=get_vertical_dist_between_lines(for_font,text_scale);// the 1.1 is just arbitrary padding because it looks too crowded otherwise
// don't use draw centered text here because it looks funny for some reason... I think it's because the vertical line advance of the font, used in draw_centered_text, is the wrong thing for a button like this
draw_centered_text((TextParams){false,MD_S8Lit("(Press E to speak)"),V2(screen_size().x*0.5f,screen_size().y*0.25f),blendalpha(WHITE,visible*0.5f),0.8f,.use_font=&font_for_text_input,.layer=LAYER_ANGEL_SCREEN});
draw_centered_text((TextParams){false,MD_S8Lit("The AI server is having technical difficulties..."),text_center,WHITE,1.0f,.layer=LAYER_ULTRA_IMPORTANT_NOTIFICATIONS});
draw_centered_text((TextParams){false,MD_S8Lit("(Press E to speak)"),V2(screen_size().x*0.5f,screen_size().y*0.25f),blendalpha(WHITE,visible*0.5f),0.8f,.use_font=&font_for_text_input});
// @TODO unhardcode this, this will be a description of where the character is right now
AddFmt("You're currently standing in Daniel's farm's barn, a run-down structure that barely serves its purpose. Daniel's mighty protective of it though.\n");
if(e->npc_kind==NPC_Angel)
{
AddFmt("Acceptable verbs for assigning a gameplay objective:\n");
ARR_ITER(char*,verbs)
{
AddFmt("%s\n",*it);
}
AddFmt("\n");
AddFmt("The characters in the game you can use when you assign your gameplay objective:\n");
AddFmt("Raphael\n");
AddFmt("Daniel\n");
AddFmt("\n");
}
AddFmt("The actions you can perform, what they do, and the arguments they expect:\n");
*cur_error_message=FmtWithLint(error_arena,"Argument for action `%.*s` you gave is `%.*s`, which doesn't exist in the game so is invalid",MD_S8VArg(action_str),MD_S8VArg(action_argument_str));
*cur_error_message=FmtWithLint(error_arena,"Gameplay objective must follow this format: `VERB ACTION`, with a space between the verb and the action. You gave a response with %d words in it, which isn't the required amount, 2",(int)split.node_count);
*cur_error_message=FmtWithLint(error_arena,"The gameplay verb you provided '%.*s' doesn't match any of the gameplay verbs available to you: %.*s",MD_S8VArg(verb),MD_S8VArg(verbs_str));
*cur_error_message=FmtWithLint(error_arena,"Argument for gameplay verb `%.*s` you gave is `%.*s`, which doesn't exist in the game so is invalid",MD_S8VArg(verb),MD_S8VArg(subject));
}
}
}
else
{
assert(false);// don't know how to parse the argument string for this kind of action...
}
MD_ReleaseScratch(scratch);
}
// if returned string has size greater than 0, it's the error message. Allocated
error_message=FmtWithLint(arena,"Argument for action `%.*s` you gave is `%.*s`, which doesn't exist in the game so is invalid",MD_S8VArg(action_str),MD_S8VArg(action_argument_str));
}
}
else
{
assert(false);// don't know how to parse the argument string for this kind of action...
- White sidebars on angel's speech that recede away.
- Mystical particles that float upwards.
- Gradient png on the bottom that has more alpha, controlled by same parameter as white sidebars.
- Fix everything about the shotgun, put shotgun away. Make them understand they're holding their shotgun more. REALLY look into characters not being able to shoot eachother
- On startup if devtools print the estimated cost per generation request of the worst offending character
- simple room transition system for angel/real map interop, angel room