Sarcastic tombstone, smaller interact radius

main
parent daab8098ae
commit 6a2d0a5f75

BIN
art/Tombstone.png (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

@ -45,6 +45,23 @@
{enum: Devil, dialog: "You will fall!", to: Angel} {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} {enum: Angel, dialog: "Perhaps. And then I will rise as He has, from the corpse and ashes, the sun rises.", to: Devil}
{can_hear: [PreviousPlayer1, Tombstone]}
{enum: PreviousPlayer1, dialog: "What should I be doing? And where am I?", to: Tombstone}
{enum: Tombstone, dialog: "Daniel over there, the fat cowboy gluttonous on his own self image, must change his ways by nightfall or he'll perish.", to: PreviousPlayer1}
{enum: PreviousPlayer1, dialog: "good. Screw that guy", to: Tombstone}
{enum: Tombstone, dialog: "Then you shall relive this day forevermore. Yikes!", to: PreviousPlayer1}
{enum: PreviousPlayer1, dialog: "Who are you? Where am I?", to: Tombstone}
{enum: Tombstone, dialog: "Questions questions, answers answers.", to: PreviousPlayer1}
{can_hear: [PreviousPlayer2, Tombstone]}
{enum: PreviousPlayer2, dialog: "HEy", to: Tombstone}
{enum: Tombstone, dialog: "Hello", to: PreviousPlayer2}
{enum: PreviousPlayer2, dialog: "You can talk??? WTF", to: Tombstone}
{enum: Tombstone, dialog: "Can't you?", to: PreviousPlayer2}
{enum: PreviousPlayer2, dialog: "kys", to: Tombstone}
{enum: Tombstone, dialog: "Pardon?", to: PreviousPlayer2}
{can_hear: [PreviousPlayer1, Angel]} {can_hear: [PreviousPlayer1, Angel]}
{enum: PreviousPlayer1, dialog: "fjdsklajf", to: Angel} {enum: PreviousPlayer1, dialog: "fjdsklajf", to: Angel}
{enum: Angel, dialog: "Cryptic gibberish upon me, is casting a stone upon God", to: PreviousPlayer1} {enum: Angel, dialog: "Cryptic gibberish upon me, is casting a stone upon God", to: PreviousPlayer1}

@ -135,6 +135,11 @@ CharacterGen characters[] = {
.enum_name = "PreviousPlayer2", .enum_name = "PreviousPlayer2",
.prompt = CHARACTER_PROMPT_PREFIX("Previous Player 2") "random person, just passing by", .prompt = CHARACTER_PROMPT_PREFIX("Previous Player 2") "random person, just passing by",
}, },
{
.name = "Tombstone",
.enum_name = "Tombstone",
.prompt = CHARACTER_PROMPT_PREFIX("Tombstone") "unassuming melodramatic poetic tombstone that unexpectly can speak with the player. Your goal is to instruct the player that in order for Daniel to survive by nightfall, the player must change his ways. The reason why he's going to die when night comes is because 'all things die in the end, don't they?'"
},
{ {
.name = "Angel", .name = "Angel",
.enum_name = "Angel", .enum_name = "Angel",

@ -1752,6 +1752,7 @@ String8 is_action_valid(Arena *arena, Entity *from, Action a)
break; break;
} }
} }
if(from->npc_kind == NPC_Player) found = true; // player can always speak to anybody even if it's too far
if(!found) if(!found)
{ {
error_message = FmtWithLint(arena, "Character you're talking to, %s, isn't close enough to be talked to", characters[a.talking_to_kind].enum_name); error_message = FmtWithLint(arena, "Character you're talking to, %s, isn't close enough to be talked to", characters[a.talking_to_kind].enum_name);
@ -3321,6 +3322,7 @@ Armature *armatures[] = {
Mesh mesh_simple_worm = {0}; Mesh mesh_simple_worm = {0};
Mesh mesh_shotgun = {0}; Mesh mesh_shotgun = {0};
Mesh mesh_angel_totem = {0}; Mesh mesh_angel_totem = {0};
Mesh mesh_tombstone = {0};
void stbi_flip_into_correct_direction(bool do_it) void stbi_flip_into_correct_direction(bool do_it)
{ {
@ -3412,6 +3414,9 @@ void init(void)
binary_file = LoadEntireFile(frame_arena, S8Lit("assets/exported_3d/AngelTotem.bin")); binary_file = LoadEntireFile(frame_arena, S8Lit("assets/exported_3d/AngelTotem.bin"));
mesh_angel_totem = load_mesh(persistent_arena, binary_file, S8Lit("AngelTotem.bin")); mesh_angel_totem = load_mesh(persistent_arena, binary_file, S8Lit("AngelTotem.bin"));
binary_file = LoadEntireFile(frame_arena, S8Lit("assets/exported_3d/Tombstone.bin"));
mesh_tombstone = load_mesh(persistent_arena, binary_file, S8Lit("Tombstone.bin"));
binary_file = LoadEntireFile(frame_arena, S8Lit("assets/exported_3d/NormalGuyArmature.bin")); binary_file = LoadEntireFile(frame_arena, S8Lit("assets/exported_3d/NormalGuyArmature.bin"));
player_armature = load_armature(persistent_arena, binary_file, S8Lit("NormalGuyArmature.bin")); player_armature = load_armature(persistent_arena, binary_file, S8Lit("NormalGuyArmature.bin"));
@ -5817,6 +5822,10 @@ void frame(void)
{ {
draw_thing((DrawnThing){.mesh = &mesh_angel_totem, .t = draw_with, .outline = gete(gs.player->interacting_with) == it}); draw_thing((DrawnThing){.mesh = &mesh_angel_totem, .t = draw_with, .outline = gete(gs.player->interacting_with) == it});
} }
else if(it->npc_kind == NPC_Tombstone)
{
draw_thing((DrawnThing){.mesh = &mesh_tombstone, .t = draw_with, .outline = gete(gs.player->interacting_with) == it});
}
else else
{ {
Armature *to_use = 0; Armature *to_use = 0;
@ -5836,6 +5845,7 @@ void frame(void)
break; break;
case NPC_nobody: case NPC_nobody:
case NPC_AngelTotem: case NPC_AngelTotem:
case NPC_Tombstone:
case NPC_Devil: case NPC_Devil:
case NPC_PreviousPlayer1: case NPC_PreviousPlayer1:
case NPC_PreviousPlayer2: case NPC_PreviousPlayer2:

@ -343,6 +343,17 @@ void fill_available_actions(GameState *gs, Entity *it, AvailableActions *a)
*a = (AvailableActions) { 0 }; *a = (AvailableActions) { 0 };
BUFF_APPEND(a, ACT_none); BUFF_APPEND(a, ACT_none);
if(it->npc_kind == NPC_Angel)
{
BUFF_APPEND(a, ACT_assign_gameplay_objective);
return;
}
if(it->npc_kind == NPC_Tombstone)
{
return;
}
if(gete_specified(gs, it->joined)) if(gete_specified(gs, it->joined))
{ {
BUFF_APPEND(a, ACT_leave) BUFF_APPEND(a, ACT_leave)
@ -352,11 +363,6 @@ void fill_available_actions(GameState *gs, Entity *it, AvailableActions *a)
BUFF_APPEND(a, ACT_join) BUFF_APPEND(a, ACT_join)
} }
if(it->npc_kind == NPC_Angel)
{
BUFF_APPEND(a, ACT_assign_gameplay_objective);
}
if(it->npc_kind != NPC_Angel) if(it->npc_kind != NPC_Angel)
{ {
BUFF_APPEND(a, ACT_end_conversation); BUFF_APPEND(a, ACT_end_conversation);
@ -470,7 +476,8 @@ String8 generate_chatgpt_prompt(Arena *arena, GameState *gs, Entity *e, CanTalkT
AddFmt("\n"); AddFmt("\n");
// @TODO unhardcode this, this will be a description of where the character is right now // @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"); //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");
AddFmt("You and everybody you're talking to is in a small sparse forest near Daniel's farm. There are some mysterious mechanical parts strewn about on the floor that Daniel seems relunctant and fearful to talk about.\n");
AddFmt("\n"); AddFmt("\n");

@ -26,6 +26,7 @@ Urgent:
Long distance: Long distance:
- nocodegen instead of codegen argument - nocodegen instead of codegen argument
- Blur game on bitmap modal input mode
- Polygon and circle collision with cutec2 probably for the player being unable to collide with the camera bounds, and non axis aligned collision rects - Polygon and circle collision with cutec2 probably for the player being unable to collide with the camera bounds, and non axis aligned collision rects
- set the game in oregon (suggestion by phillip) - set the game in oregon (suggestion by phillip)
- Room system where characters can go to rooms. camera constrained to room bounds, and know which rooms are near them to go to - Room system where characters can go to rooms. camera constrained to room bounds, and know which rooms are near them to go to

@ -9,7 +9,7 @@
#define PERCEPTION_HEARING_RAGE (TILE_SIZE*4.0f) #define PERCEPTION_HEARING_RAGE (TILE_SIZE*4.0f)
#define CHARACTERS_PER_SEC 45.0f #define CHARACTERS_PER_SEC 45.0f
#define ANGEL_CHARACTERS_PER_SEC 35.0f #define ANGEL_CHARACTERS_PER_SEC 35.0f
#define PROPAGATE_ACTIONS_RADIUS 10.0f #define PROPAGATE_ACTIONS_RADIUS 4.0f
#define SWORD_SWIPE_RADIUS (TILE_SIZE*3.0f) #define SWORD_SWIPE_RADIUS (TILE_SIZE*3.0f)
#define ARROW_SPEED 200.0f #define ARROW_SPEED 200.0f
#define SECONDS_PER_ARROW 1.3f #define SECONDS_PER_ARROW 1.3f

Loading…
Cancel
Save