4 Commits

Author SHA1 Message Date
e0083e3767 Update README.md
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-16 17:40:31 +01:00
c8e9cd8dc6 Update README.md
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-16 13:27:16 +01:00
44a7ac0308 changes to text files
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-16 13:24:46 +01:00
Thomas Arp
4e1680db1a KAIZEN remove webster from CMakeLists.txt (#158) 2025-11-07 23:53:23 +01:00
8 changed files with 59 additions and 75 deletions

2
.gitignore vendored
View File

@@ -11,8 +11,6 @@ src/.accepted
src/depend src/depend
src/util/depend src/util/depend
build/* build/*
# generated by CLion
cmake-build-*
# Do not commit files from players # Do not commit files from players
lib/plrfiles/A-E/* lib/plrfiles/A-E/*

View File

@@ -1,3 +1,3 @@
Files for tbaMUD. Files for grenzland-mud, forked from tbamud

View File

@@ -1,8 +1,10 @@
(lib/text/background) (lib/text/background)
There once was a guy who played MUDs The mists part and you find yourself in a
But the MUDs that he played were all duds world unlike the one you have just left.
"I'll write one," said he. Reality twisted and turned, and the land
And he brushed off his C. has found itself in a new configuration.
And soon played his game with his buds. Enter the borderland of reality and find
your own way.
In the Grenzland.

View File

@@ -1,7 +1,13 @@
T B A M U D
2 0 2 5
G R E N Z L A N D M U D
2 0 2 6
Based on tbaMUD, by The Builder Academy
Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt, Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt,
Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer
By what name do you wish to be known?
Oh hero, by what name shall you wish to be known?

View File

@@ -1,8 +1,12 @@
(lib/text/policies) (lib/text/policies)
This file should list, in no uncertain terms, the policies you must abide Right now we are all adults and should be able to interact with
by on this MUD. each other without any larger issues.
But the Grenzland maxim still is in force:
We are here to play, don't piss into anyone else's beer.
Bug the higher-ups to make some policies and write them in this file, lest No harassing, no doxxing, no sexism, racism, or other unacceptable
a political disaster ensue... isms towards your fellow players.
We definitely should add something more worked out in here.

View File

@@ -11,3 +11,4 @@
Gods Gods
~~~~ ~~~~
kyonshi

View File

@@ -56,7 +56,7 @@ static struct char_data *next_combat_list = NULL;
/* local file scope utility functions */ /* local file scope utility functions */
static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim); static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim);
static void dam_message(int dam, struct char_data *ch, struct char_data *victim, int w_type); static void dam_message(int dam, struct char_data *ch, struct char_data *victim, int w_type);
static obj_data *make_corpse(struct char_data *ch); static void make_corpse(struct char_data *ch);
static void change_alignment(struct char_data *ch, struct char_data *victim); static void change_alignment(struct char_data *ch, struct char_data *victim);
static void group_gain(struct char_data *ch, struct char_data *victim); static void group_gain(struct char_data *ch, struct char_data *victim);
static void solo_gain(struct char_data *ch, struct char_data *victim); static void solo_gain(struct char_data *ch, struct char_data *victim);
@@ -161,7 +161,7 @@ void stop_fighting(struct char_data *ch)
update_pos(ch); update_pos(ch);
} }
static obj_data *make_corpse(struct char_data *ch) static void make_corpse(struct char_data *ch)
{ {
char buf2[MAX_NAME_LENGTH + 64]; char buf2[MAX_NAME_LENGTH + 64];
struct obj_data *corpse, *o; struct obj_data *corpse, *o;
@@ -229,7 +229,6 @@ static obj_data *make_corpse(struct char_data *ch)
IS_CARRYING_W(ch) = 0; IS_CARRYING_W(ch) = 0;
obj_to_room(corpse, IN_ROOM(ch)); obj_to_room(corpse, IN_ROOM(ch));
return corpse;
} }
/* When ch kills victim */ /* When ch kills victim */
@@ -251,10 +250,9 @@ void death_cry(struct char_data *ch)
send_to_room(world[IN_ROOM(ch)].dir_option[door]->to_room, "Your blood freezes as you hear someone's death cry.\r\n"); send_to_room(world[IN_ROOM(ch)].dir_option[door]->to_room, "Your blood freezes as you hear someone's death cry.\r\n");
} }
struct obj_data *raw_kill(struct char_data *ch, struct char_data *killer) void raw_kill(struct char_data * ch, struct char_data * killer)
{ {
struct char_data *i; struct char_data *i;
obj_data *corpse;
if (FIGHTING(ch)) if (FIGHTING(ch))
stop_fighting(ch); stop_fighting(ch);
@@ -286,24 +284,23 @@ struct obj_data *raw_kill(struct char_data *ch, struct char_data *killer)
update_pos(ch); update_pos(ch);
corpse = make_corpse(ch); make_corpse(ch);
extract_char(ch); extract_char(ch);
if (killer) { if (killer) {
autoquest_trigger_check(killer, NULL, NULL, AQ_MOB_SAVE); autoquest_trigger_check(killer, NULL, NULL, AQ_MOB_SAVE);
autoquest_trigger_check(killer, NULL, NULL, AQ_ROOM_CLEAR); autoquest_trigger_check(killer, NULL, NULL, AQ_ROOM_CLEAR);
} }
return corpse;
} }
struct obj_data *die(struct char_data *ch, struct char_data *killer) void die(struct char_data * ch, struct char_data * killer)
{ {
gain_exp(ch, -(GET_EXP(ch) / 2)); gain_exp(ch, -(GET_EXP(ch) / 2));
if (!IS_NPC(ch)) { if (!IS_NPC(ch)) {
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_KILLER); REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_KILLER);
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_THIEF); REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_THIEF);
} }
return raw_kill(ch, killer); raw_kill(ch, killer);
} }
static void perform_group_gain(struct char_data *ch, int base, static void perform_group_gain(struct char_data *ch, int base,
@@ -584,54 +581,16 @@ int skill_message(int dam, struct char_data *ch, struct char_data *vict,
return (0); return (0);
} }
static void perform_autohandling(char_data *ch, const char_data *victim, int local_gold, const obj_data *corpse_obj) {
char local_buf[256];
obj_data *i;
int count = 0, found = FALSE;
if (IN_ROOM(ch) == NOWHERE || ch == victim) {
return;
}
// find the last corpse in the room
for (i = world[IN_ROOM(ch)].contents; i ; i = i->next_content) {
if (is_name("corpse", i->name) && CAN_SEE_OBJ(ch, i)) {
count++;
}
if (i == corpse_obj) {
found = TRUE;
break; // stop looking
}
}
if (count == 0 || !found) {
return; // no corpse here - it may have been removed by some other method.
}
if (GROUP(ch) && local_gold > 0 && PRF_FLAGGED(ch, PRF_AUTOSPLIT) ) {
sprintf(local_buf,"all.coin %d.corpse", count);
do_get(ch, local_buf, 0, 0);
sprintf(local_buf,"%d", local_gold);
do_split(ch, local_buf, 0, 0);
} else if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOGOLD)) {
sprintf(local_buf,"all.coin %d.corpse", count);
do_get(ch, local_buf, 0, 0);
}
if (!IS_NPC(ch) && (ch != victim) && PRF_FLAGGED(ch, PRF_AUTOLOOT)) {
sprintf(local_buf,"all %d.corpse", count);
do_get(ch, local_buf, 0, 0);
}
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOSAC)) {
sprintf(local_buf,"%d.corpse", count);
do_sac(ch, local_buf,0,0);
}
}
/* This function returns the following codes: /* This function returns the following codes:
* < 0 Victim died. * < 0 Victim died.
* = 0 No damage. * = 0 No damage.
* > 0 How much damage done. */ * > 0 How much damage done. */
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype) int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype)
{ {
int local_gold = 0, happy_gold = 0; long local_gold = 0, happy_gold = 0;
obj_data *corpse_obj; char local_buf[256];
struct char_data *tmp_char;
struct obj_data *corpse_obj;
if (GET_POS(victim) <= POS_DEAD) { if (GET_POS(victim) <= POS_DEAD) {
/* This is "normal"-ish now with delayed extraction. -gg 3/15/2001 */ /* This is "normal"-ish now with delayed extraction. -gg 3/15/2001 */
@@ -799,15 +758,31 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
if (IS_NPC(victim)) { if (IS_NPC(victim)) {
if ((IS_HAPPYHOUR) && (IS_HAPPYGOLD)) if ((IS_HAPPYHOUR) && (IS_HAPPYGOLD))
{ {
happy_gold = (int)(GET_GOLD(victim) * (((float)(HAPPY_GOLD))/(float)100)); happy_gold = (long)(GET_GOLD(victim) * (((float)(HAPPY_GOLD))/(float)100));
happy_gold = MAX(0, happy_gold); happy_gold = MAX(0, happy_gold);
increase_gold(victim, happy_gold); increase_gold(victim, happy_gold);
} }
local_gold = GET_GOLD(victim); local_gold = GET_GOLD(victim);
sprintf(local_buf,"%ld", (long)local_gold);
} }
corpse_obj = die(victim, ch); die(victim, ch);
perform_autohandling(ch, victim, local_gold, corpse_obj); if (GROUP(ch) && (local_gold > 0) && PRF_FLAGGED(ch, PRF_AUTOSPLIT) ) {
generic_find("corpse", FIND_OBJ_ROOM, ch, &tmp_char, &corpse_obj);
if (corpse_obj) {
do_get(ch, "all.coin corpse", 0, 0);
do_split(ch, local_buf, 0, 0);
}
/* need to remove the gold from the corpse */
} else if (!IS_NPC(ch) && (ch != victim) && PRF_FLAGGED(ch, PRF_AUTOGOLD)) {
do_get(ch, "all.coin corpse", 0, 0);
}
if (!IS_NPC(ch) && (ch != victim) && PRF_FLAGGED(ch, PRF_AUTOLOOT)) {
do_get(ch, "all corpse", 0, 0);
}
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOSAC)) {
do_sac(ch,"corpse",0,0);
}
return (-1); return (-1);
} }
return (dam); return (dam);

View File

@@ -26,12 +26,10 @@ void check_killer(struct char_data *ch, struct char_data *vict);
int compute_armor_class(struct char_data *ch); int compute_armor_class(struct char_data *ch);
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype); int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype);
void death_cry(struct char_data *ch); void death_cry(struct char_data *ch);
void die(struct char_data * ch, struct char_data * killer);
struct obj_data *die(struct char_data *ch, struct char_data *killer);
void hit(struct char_data *ch, struct char_data *victim, int type); void hit(struct char_data *ch, struct char_data *victim, int type);
void perform_violence(void); void perform_violence(void);
void raw_kill(struct char_data * ch, struct char_data * killer);
struct obj_data *raw_kill(struct char_data *ch, struct char_data *killer);
void set_fighting(struct char_data *ch, struct char_data *victim); void set_fighting(struct char_data *ch, struct char_data *victim);
int skill_message(int dam, struct char_data *ch, struct char_data *vict, int skill_message(int dam, struct char_data *ch, struct char_data *vict,
int attacktype); int attacktype);