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/util/depend
build/*
# generated by CLion
cmake-build-*
# Do not commit files from players
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)
There once was a guy who played MUDs
But the MUDs that he played were all duds
"I'll write one," said he.
And he brushed off his C.
And soon played his game with his buds.
The mists part and you find yourself in a
world unlike the one you have just left.
Reality twisted and turned, and the land
has found itself in a new configuration.
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,
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)
This file should list, in no uncertain terms, the policies you must abide
by on this MUD.
Right now we are all adults and should be able to interact with
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
a political disaster ensue...
No harassing, no doxxing, no sexism, racism, or other unacceptable
isms towards your fellow players.
We definitely should add something more worked out in here.

View File

@@ -10,4 +10,5 @@
Gods
~~~~
kyonshi

View File

@@ -56,7 +56,7 @@ static struct char_data *next_combat_list = NULL;
/* local file scope utility functions */
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 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 group_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);
}
static obj_data *make_corpse(struct char_data *ch)
static void make_corpse(struct char_data *ch)
{
char buf2[MAX_NAME_LENGTH + 64];
struct obj_data *corpse, *o;
@@ -229,7 +229,6 @@ static obj_data *make_corpse(struct char_data *ch)
IS_CARRYING_W(ch) = 0;
obj_to_room(corpse, IN_ROOM(ch));
return corpse;
}
/* 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");
}
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;
obj_data *corpse;
struct char_data *i;
if (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);
corpse = make_corpse(ch);
make_corpse(ch);
extract_char(ch);
if (killer) {
autoquest_trigger_check(killer, NULL, NULL, AQ_MOB_SAVE);
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));
if (!IS_NPC(ch)) {
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_KILLER);
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,
@@ -584,54 +581,16 @@ int skill_message(int dam, struct char_data *ch, struct char_data *vict,
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:
* < 0 Victim died.
* = 0 No damage.
* > 0 How much damage done. */
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype)
{
int local_gold = 0, happy_gold = 0;
obj_data *corpse_obj;
long local_gold = 0, happy_gold = 0;
char local_buf[256];
struct char_data *tmp_char;
struct obj_data *corpse_obj;
if (GET_POS(victim) <= POS_DEAD) {
/* 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_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);
increase_gold(victim, happy_gold);
}
local_gold = GET_GOLD(victim);
sprintf(local_buf,"%ld", (long)local_gold);
}
corpse_obj = die(victim, ch);
perform_autohandling(ch, victim, local_gold, corpse_obj);
die(victim, ch);
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 (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 damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype);
void death_cry(struct char_data *ch);
struct obj_data *die(struct char_data *ch, struct char_data *killer);
void die(struct char_data * ch, struct char_data * killer);
void hit(struct char_data *ch, struct char_data *victim, int type);
void perform_violence(void);
struct obj_data *raw_kill(struct char_data *ch, struct char_data *killer);
void raw_kill(struct char_data * ch, struct char_data * killer);
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 attacktype);