/* #define MUST_STAY_WITH_DRINKS */ object top_list; object player; int current_problem, starts_thinking; object solved_by, wrong_by; int problem_value; object rules; reset(arg) { start_player(); if (!top_list || !present(top_list, this_object())) { top_list = clone_object("obj/level_list"); move_object(top_list, this_object()); } if (!rules || !present(rules, this_object())) { rules = clone_object("obj/Go/rules"); move_object(rules, this_object()); } if (arg) return; set_light( 1); } short() { return "The local pub"; } init() { add_action("move", "west"); add_action("order", "order"); add_action("order", "buy"); add_action("look", "look"); } move() { #ifdef MUST_STAY_WITH_DRINKS if (has_drink(this_player())) { tell_object(this_player(), "You are not allowed to leave with drinks!\n"); return 1; } #endif call_other(this_player(), "move_player", "west" + "#" +"room/yard"); return 1; } long() { write("You are in the local pub.\n"); write("You can order drinks here.\n\n"); write(" First class beer : 12 coins\n"); write(" Special of the house: 50 coins\n"); write(" Firebreather : 150 coins\n\n"); /* write(" Potion of healing : 200 coins\n\n"); */ write("The only obvious exit is to " + "west" + ".\n"); } order(str) { object drink; string name, short_desc, mess; int value, cost, strength, heal; if (!str) { write("Order what ?\n"); return 1; } if (str == "beer") { name = str; short_desc = "A bottle of beer"; mess = "That feels good"; heal = 0; value = 12; strength = 2; } else if (str == "special" || str == "special of the house") { name = "special"; short_desc = "A special of the house"; mess = "A tingling feeling goes through your body"; heal = 10; value = 50; strength = 8; } else if (str == "firebreather" || str == "fire") { name = "firebreather"; short_desc = "A firebreather"; mess = "A shock wave runs through your body"; heal = 25; value = 150; strength = 12; #if 0 } else if (str == "potion" || str == "potion of healing") { name = "potion"; short_desc = "A potion of healing"; mess = "You are totally healed"; heal = 1000; value = 200; strength = 0; #endif } else { write("What ?\n"); return 1; } if (call_other(this_player(), "query_money", 0) < value) { write("That costs " + value + " gold coins, which you don't have.\n"); return 1; } drink = clone_object("obj/drink"); if (!call_other(this_player(), "add_weight", call_other(drink, "query_weight"))) { write("You can't carry more.\n"); destruct(drink); return 1; } if (!call_other(drink, "set_value", name + "#" + short_desc + "#" + mess + "#" + heal + "#" + value + "#" + strength)) { write("Error in creating drink.\n"); destruct(drink); return 1; } call_other(drink, "set_pub"); move_object(drink, this_player()); call_other(this_player(), "add_money", - value); write("You pay " + value + " for a " + name + ".\n"); say(call_other(this_player(), "query_name", 0) + " orders a " + name + ".\n"); return 1; } /* * Make this global, and only initialized once. */ string chat_str, function, type, match; start_player() { if(!player) { player = clone_object("obj/monster"); call_other(player, "set_name", "player"); call_other(player, "set_alias", "go player"); call_other(player, "set_short", "Go player"); call_other(player, "set_long", "A man sitting beside a go board, concentrating on a problem.\n" + "He looks as if he wants help. Why not look at his problem,\n" + "and tell him where to play ?\n"); call_other(player, "set_level",10); call_other(player, "set_al",200); call_other(player, "set_ep",39000); call_other(player, "set_hp",100); call_other(player, "set_wc",12); move_object(player, "room/pub2"); if (!function) { function = allocate(2); type = allocate(2); match = allocate(2); function[0] = "got_play"; type[0] = "says:"; match[0] = " play"; function[1] = "make_move"; type[1] = "PISS"; match[1] = " OFF"; } call_other(player, "set_match", this_object(), function, type, match); if (!chat_str) { chat_str = allocate(5); chat_str[0] = "Go player says: Hm. This is tricky!\n"; chat_str[1] = "Go player says: The moron who wrote this book didn't deal with this problem.\n"; chat_str[2] = "Go player says: A throw in here should just be wasted.\n"; chat_str[3] = "Go player says: This group is more alive than I am.\n"; chat_str[4] = "Go player says: This is simple using oi-otoshi.\n"; } call_other(player, "load_chat", 1, chat_str); } current_problem = 0; } got_play(str) { string who, what; if (sscanf(str, "%s tells you: play %s\n", who , what) == 2 || sscanf(str, "%s says: play %s\n", who , what) == 2) { if (current_problem == 0) { if (what == "b1" || what == "b 1" || what == "1b" || what == "1 b") solved_by = find_living(lower_case(who)); else wrong_by = find_living(lower_case(who)); problem_value = 50; } if (current_problem == 1) { if (what == "b2" || what == "b 2" || what == "2b" || what == "2 b") solved_by = find_living(lower_case(who)); else wrong_by = find_living(lower_case(who)); problem_value = 100; } if (current_problem == 2) { if (what == "d3" || what == "d 3" || what == "3d" || what == "3 d") solved_by = find_living(lower_case(who)); else wrong_by = find_living(lower_case(who)); problem_value = 200; } notify("The go player contemplates a proposed play.\n"); tell_object(player, "Arne PISS OFF\n"); } else if (sscanf(str, "%s tells you: %s", who, what) == 2) { say("The go player says: what ?\n"); } } show_problem() { if(current_problem > 2) { write("The player looks tired.\n"); return; } if(!player || !living(player)) return; write("The board looks like this:\n\n"); say(call_other(this_player(), "query_name", 0) + " examines the go problem.\n"); if (current_problem == 0) { write("5|.......\n" + "4|.......\n" + "3|@@@@@..\n" + "2|OOOO@..\n" + "1|...O@..\n" + " --------\n" + " abcdefg\n" + "\nIt is black ('@') to play.\n"); return; } else if (current_problem == 1) { write("7|.......\n" + "6|.......\n" + "5|@@@....\n" + "4|OOO@@..\n" + "3|O.OO@..\n" + "2|...O@..\n" + "1|..OO@..\n" + " --------\n" + " abcdefg\n" + "\nIt is black ('@') to play.\n"); return; } else if (current_problem == 2) { write("5|..........\n" + "4|...@@@@@..\n" + "3|@@@.O...@.\n" + "2|@OO@OOOO@.\n" + "1|@OO.O...@.\n" + " -----------\n" + " abcdefg\n" + "\nIt is white ('O') to play.\n"); return; } else { write("The go player does not want to be disturbed any more.\n"); } } make_move(str) { if (solved_by) { int i; i = current_problem + 1; say("The go player says: Right ! That works !\n" + "He immediately plays out a new problem.\n"); tell_object(solved_by, "You feel that you have gained some experience.\n"); call_other(solved_by, "add_exp", problem_value); solved_by = 0; current_problem += 1; } if (wrong_by) { say("The go player says: No, that doesn't work.\n"); say("He sinks back into his deep thought.\n"); wrong_by = 0; } } notify(str) { say(str); write(str); } look(str) { string what, rest; if(str) { if(!player || !living(player)) return 0; if(sscanf(str, "at %s", what) == 1 || sscanf(str, "%s", what) == 1) { if(what == "game" || what == "problem" || what == "board") { show_problem(); return 1; } } } return 0; } #ifdef MUST_STAY_WITH_DRINKS has_drink(obj) { status drink; object ob; ob = first_inventory(obj); while(ob) { if (call_other(ob, "id", "drk2")) drink = 1; if (call_other(ob,"can_put_and_get")) { if (has_drink(ob)) drink = 1; } ob = next_inventory(ob); } return drink; } #endif query_drop_castle() { return 1; }