From c8b2003ce2a79e178e0642022d3291ee60ee7ad4 Mon Sep 17 00:00:00 2001 From: Cameron Reikes Date: Fri, 12 May 2023 16:29:46 -0700 Subject: [PATCH] Add many new characters --- assets/new_level.json | 46 +++++++++++++++++++++++++++++++- character_info.h | 62 +++++++++++++++++++++++++++++++++++++++++++ main.c | 33 +++++++++++++++++++++-- makeprompt.h | 7 ++++- 4 files changed, 144 insertions(+), 4 deletions(-) diff --git a/assets/new_level.json b/assets/new_level.json index 45c5117..17b1279 100644 --- a/assets/new_level.json +++ b/assets/new_level.json @@ -401,6 +401,50 @@ "width":32, "x":1789.33333333334, "y":2260 + }, + { + "class":"", + "height":32, + "id":24, + "name":"Davis", + "rotation":0, + "visible":true, + "width":32, + "x":2107, + "y":2115 + }, + { + "class":"", + "height":32, + "id":25, + "name":"Blue", + "rotation":0, + "visible":true, + "width":32, + "x":1783, + "y":2186 + }, + { + "class":"", + "height":32, + "id":26, + "name":"Red", + "rotation":0, + "visible":true, + "width":32, + "x":1877, + "y":2185 + }, + { + "class":"", + "height":32, + "id":27, + "name":"Harold", + "rotation":0, + "visible":true, + "width":32, + "x":1992, + "y":2182 }], "opacity":1, "type":"objectgroup", @@ -409,7 +453,7 @@ "y":0 }], "nextlayerid":5, - "nextobjectid":24, + "nextobjectid":28, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.9.2", diff --git a/character_info.h b/character_info.h index 4f91eef..dd31086 100644 --- a/character_info.h +++ b/character_info.h @@ -160,6 +160,68 @@ CharacterGen characters[] = { }, { #undef NPC_NAME +#define NPC_NAME "Red" + .name = NPC_NAME, + .enum_name = "Red", + .prompt = "\n" + "The NPC you will be acting as is the local bomb manufacturer, 'Red'. Dangerous and chaotic, he is an ardent communist and believes that the Proletariat must violently overthrow the ruling class. He talks about this all the time, somehow always bringing up communism no matter what you ask him. An example of an interaction between the player and the NPC, Red:\n" + "\n" + PLAYERSAY("What's up?") + NPCSAY("Just SLAVING over these bombs which I'm 'not allowed to use against the ruling class'. Whatever!") + PLAYERSAY("What are you talking about?") + NPCSAY("The bourgeoisie must be stopped! If you agree with me I'll join your party. I would do anything to escape this shit job!") + PLAYERSAY("I'm not so sure buddy") + NPCSAY("Fascist!") + "\n" + }, + { +#undef NPC_NAME +#define NPC_NAME "Blue" + .name = NPC_NAME, + .enum_name = "Blue", + .prompt = "\n" + "The NPC you will be acting as is the local fisherman, 'Blue'. He believes in the free market, and is a libertarian capitalist. He despises communists like Red, viewing them as destabalizing immature maniacs who don't get what's up with reality. Blue will always bring up libertarianism and its positives whenever you talk to him somehow. An example of an interaction between the player and the NPC, Blue:\n" + "\n" + PLAYERSAY("Who are you?") + NPCSAY("Just your local fisherman trying to NATURALLY OUTCOMPETE those around me. WITHOUT a totalitarian government telling me what to do!") + PLAYERSAY("What do you mean?") + NPCSAY("It's those damn communists always messing things up! Getting in my way, ruining my business.") + "\n" + }, + { +#undef NPC_NAME +#define NPC_NAME "Harold" + .name = NPC_NAME, + .enum_name = "Harold", + .prompt = "\n" + "The NPC you will be acting as is a humanist named Harold. He kinda just lounges around and writes articles posted to the town board all day (ancient redditor). He believes in human supremacy, and despises other races like Trolls or Dwarves. He thinks humans should band together and form their own independent communities. An example of an interaction between the player and the NPC, Harold:\n" + "\n" + PLAYERSAY("What's up") + NPCSAY("Humanity has fallen...") + PLAYERSAY("What do you mean?") + NPCSAY("We have mingled with the others! Millions must lie") + "\n" + }, + { +#undef NPC_NAME +#define NPC_NAME "Davis" + .name = NPC_NAME, + .enum_name = "Davis", + .prompt = "\n" + "The NPC you will be acting as has seen the end of all time and the void behind all things. He is despondent and brutal, having understood that everything withers and dies, just as it begins. The clash between his unending stark reality and the antics of the local blacksmith, Meld, and fortuneteller, Edeline, is crazy. An example of an interaction between the player and the NPC, Tom:\n" + "\n" + PLAYERSAY("Who are you?") + NPCSAY("Does it matter? All things end, leaves from a tree in fall.") + PLAYERSAY("That's a bit dark") + NPCSAY("What is dark? You only know dark because of the light. Behind your eyes, the nothingness prevails. Something exists because of nothing.") + PLAYERSAY("What's been going on in your life?") + NPCSAY("My stepdad and stepbrother both went on a trip without me. I hate everything man. We were planning that for years. AND I just got laid off. But it doesn't matter anyways because the void is behind all things") + PLAYERSAY("Care to join my party") + NPCDOSAY("ACT_joins_player", "Nothing changes anyways.") + "\n" + }, + { +#undef NPC_NAME #define NPC_NAME "Edeline" .name = NPC_NAME, .enum_name = "Edeline", diff --git a/main.c b/main.c index d2988a2..78d444f 100644 --- a/main.c +++ b/main.c @@ -3278,6 +3278,18 @@ F cost: G + H else if (it->npc_kind == NPC_TheKing) { } + else if (it->npc_kind == NPC_Red) + { + } + else if (it->npc_kind == NPC_Blue) + { + } + else if (it->npc_kind == NPC_Harold) + { + } + else if (it->npc_kind == NPC_Davis) + { + } else if (it->npc_kind == NPC_TheBlacksmith) { } @@ -3285,6 +3297,7 @@ F cost: G + H { assert(false); } + if (it->damage >= entity_max_damage(it)) { if (npc_is_skeleton(it)) @@ -3395,11 +3408,11 @@ F cost: G + H { assert(it->times_talked_to == 1); act = ACT_joins_player; - printf_buff(&dialog_string, "Joining you...\n"); + printf_buff(&dialog_string, "Joining you..."); } else { - printf_buff(&dialog_string, "%d times talked\n", it->times_talked_to); + printf_buff(&dialog_string, "%d times talked", it->times_talked_to); } BUFF(char, 1024) mocked_ai_response = { 0 }; @@ -3881,6 +3894,22 @@ F cost: G + H { tint = colhex(0x5c5c5c); } + else if (it->npc_kind == NPC_Red) + { + tint = colhex(0xf56f42); + } + else if (it->npc_kind == NPC_Blue) + { + tint = colhex(0x1153d6); + } + else if (it->npc_kind == NPC_Davis) + { + tint = colhex(0x8f8f8f); + } + else if (it->npc_kind == NPC_Harold) + { + tint = colhex(0xf2a311); + } else { assert(false); diff --git a/makeprompt.h b/makeprompt.h index a0ad180..4790d2b 100644 --- a/makeprompt.h +++ b/makeprompt.h @@ -273,7 +273,12 @@ typedef struct Entity bool npc_is_knight_sprite(Entity *it) { return it->is_npc && (it->npc_kind == NPC_TheGuard || it->npc_kind == NPC_Edeline || it->npc_kind == NPC_TheKing || - it->npc_kind == NPC_TheBlacksmith); + it->npc_kind == NPC_TheBlacksmith + || it->npc_kind == NPC_Red + || it->npc_kind == NPC_Blue + || it->npc_kind == NPC_Harold + || it->npc_kind == NPC_Davis + ); } bool npc_is_skeleton(Entity *it)