LPMuds.net Forums => 2006 Contest => Topic started by: saquivor on November 22, 2006, 02:51:26 am

Title: And the wiinners is :P
Post by: saquivor on November 22, 2006, 02:51:26 am

A big thank you to everyone entered the competition or even just dropped by to see what DS2 and LPC are about after seeing information about the competition.

I am posting an update as I am unable to get hold of Alex, I am hoping that the competition can be judged this weekend with winners being announced on Sunday/Monday depeneding on your timezone:)

Again many thanks to the people who took the time to send in an entry.


Title: And the wiinners is :P
Post by: cratylus on November 28, 2006, 07:46:39 pm

Apologies for the delays!

More info in the next couple of days...promise!



Title: And the wiinners is :P
Post by: cratylus on November 30, 2006, 10:36:42 am

I'm sorry folks, but the news is bad.

Short version:

There were not enough entries. We only got 3, and the

minimum was 10. The contest has been cancelled.

Long version:

I feel *horrible* about this, and very embarrassed. For the

past few days we've been considering what to do, and I've

been brainstorming to find a way to make the contest a "success".

But the more I thought, the less reasonable it seemed. In

endeavors like contests with prizes, it is vital that all contestants

see fairness in how things are run. Especially when money is

involved, it's key to play things straight and stick to the rules.

In addition to the fact that if we went forward there would be

one guaranteed prize for each entrant (some contest!), is that

having set a precedent for changing the ground rules for the

competition itself would be bad. If/when we have competitions

down the road, I want people to know that they can rely on the

rules they read and abide by to compete.

I like the idea of awarding these entry prizes so that we can

say "see? You should have entered!", but I think that the cost

in fairness and credibility is too high.

I apologize to you three entrants. Please know that I have learned

important lessons about how this sort of thing needs to run, and

I don't intend to have another failed contest. Your code will not

be used for any purpose. Unless you need it returned to you,

I will be deleting it in the next few days.

Sorry for the disappointment, everyone. I promise to do a better

job next time.



Title: And the wiinners is :P
Post by: detah on November 30, 2006, 01:44:39 pm

I see no fault here.

The rules said a minimum of 10 entrants and that was not met.

I am disappointed that the turn out was so poor. I often got the impression that many people did not enter because they felt they had no chance against other 'better' programmers. I just want to say to those folks, that that impression was and is clearly false. In such a small field, even a newbie coder (with a clever and descriptive entry) has a shot at winning.

I look forward to the next Contest.


PS perhaps in future contests, an announcement could be made on other forums and sites, to expand the pool of potential entrants.

Title: And the wiinners is :P
Post by: memrosh on November 30, 2006, 02:45:45 pm

Well darn! I was hopeing for at least a good show for my entry to extend my host fees!


All kidding aside, I do fully agree with Crat that we need to stick with the rules as laid out. I also agree with Detah that some may have been put off because of their own percieved skill level.

But think of it this way- How else to get some experienced folks to go over your code with a fine tooth comb and (hopefully) give you some useful and positive feedback iregardless of how it compared to other entries?

btw- Can we resubmit the same entry in your next contest Crat?


Title: And the wiinners is :P
Post by: saquivor on December 01, 2006, 12:19:27 am
:-$  I was hoping that more people would enter the contest as well.  :-$

Again many thanks for the people that did enter the contest.

As it happens the unfortunate end to the competition, will also coincide with my departing of the community.

I have been involved with ds2 on and off for over a year now. I have enjoyed learning LPC, it is a great language for creating virtual worlds. Before ds2a3, I had never tried to code LPC before, but I had played nightmare based muds on and off for years. I picked up DS2 and quickly managed to code some of the things I had always wanted to see in muds I played. So congrats to Cratylus on his sterling efforts to revive LPC/Nightmare mudlib.

I have such little free time, that I am unable to really commit the time I would like to creating a mud/vr world or even a vr object :)

Thanks to everyone's help and assistance along the way, I hope that you keep up the good fight for LPC and DS2.

All the best,

Title: And the wiinners is :P
Post by: Atomic on December 01, 2006, 01:07:48 am

Thanks for being part of the community Saq!

But as you know, you'll never quite get the virus out of

your system :).

Mudders for life!

Hope to see you around somewhere again.

To infinity and beyond!
Title: And the wiinners is :P
Post by: Atomic on December 01, 2006, 01:12:58 am

...as an addendum: would it be possible to view the work of

the 3 people that have participated in the contest? Always need for

good examples...

(¯`·.¸¸.· To infinity and beyond!·.¸¸.·´¯)
Title: And the wiinners is :P
Post by: cratylus on December 01, 2006, 05:14:13 am


You can do with the code as you like. Since the competition

was cancelled, I don't see any reason to prevent you from

entering it in another one.


Releasing the code is something each contestant will want to

decide for themselves. I can't take it upon myself to release it,

because I feel that would be unfair to them.


In general I had and still have ambivalent feelings about code

contests for exactly this reason. Part of the point of thr DS resurrection

project was creating an environment where people freely shared

code and maybe even whole systems and areas. I've tried to

lead by example on this, by releasing 99% of my code out

into the wild...most of it in public domain! (I say 99% because

while I can't think of any finished LPC I haven't released, I'm

sure there's some)

A code competition, I think, tends to do the exact opposite. I think

it gives people an incentive to be secretive and hoard their code

goodness. When the proposal for the contest came up, I had to think

about it for a while, but in the end decided it was an overall good

idea because even though it might slow "sharing" a bit, it would be

really nice publicity for the site. It would be a great way to "get

the word out" about lpmuds.net.

Now that the contest is over I've been avoiding making promises

about another contest, because I still haven't resolved my

ambivalence about the conflicting effects having/not having the

contest has on my two competing priorities of A) a code sharing

atmosphere, and B) promoting lpmuds.net.

So, now y'all know why I haven't made any announcements about

"annual contests" or anything...I still have to work out how

that fits into my original vision for an LPC renaissance.

Suggestions welcome, of course.



Title: And the wiinners is :P
Post by: detah on December 01, 2006, 06:21:13 am


Im going to miss you a great deal. I wish there was something I could say to keep you, but Ive already given you all my best arguments to stay. I wish you the very best and perhaps someday, when you have more freetime, you'll consider coming back. There will always be a place for you at Arcania.



Title: And the wiinners is :P
Post by: saquivor on December 01, 2006, 08:02:35 am
Well I will keep in touch via email. But my day to day presence on i3 and the boards will be coming to an end quiet soon.
Title: And the wiinners is :P
Post by: cratylus on December 01, 2006, 09:29:09 am

Saquivor's contributions to Dead Souls have been of great

value. I didn't name a road in the main town after him for

nothing. For example, the Windows version would not have been

possible without the code he provided. I couldn't have

come up with it. He came up with windows code that saved the day.

Another example of Saq's help will be made public soon,

and will be quite remarkable.

His contributions have often been non-LPC, but that has not

made them any less dramatic in their impact on our little


As I've told him, I respect his decision to strike

off in other directions, but I'll be secretly hoping he changes

his mind, and there will always be a light turned on by the

door for him.



Title: And the wiinners is :P
Post by: kriton on December 01, 2006, 10:38:26 am

I was going to do something else with the Virtual system, but the contest tried to keep the scope a little smaller to widen the field which is cool with me.  I ended up writing a spell in 5 hours (at work no less O:)

I would like to see what other people wrote too!  Here was my entry:

#include <lib.h>

#include <magic.h>

//  Define this and the player can save x number of items in this

//  magic portal


//  These are only used if SAVE_ROOM_INVENTORY is turned on

#define SAVEDIR         sprintf("/tmp/%c", PortalOwner[0])

#define SAVEFILE        sprintf("/tmp/%c/%s", PortalOwner[0], PortalOwner)

#define MAXITEMSSAVED   20

inherit LIB_ROOM;

inherit LIB_SPELL;

private mapping PortalObjects;

private string PortalOwner;


private void create()




    PortalObjects = ([]);


    // Note: As I found out, this will not load outside of the

    // approved "parse directories" (per valid_object in master).

    // I did hack a copy of this to get around that restriction

    // (see /realms/kriton/pocketportal.c)




    SetSkills(([ "conjuring" : 40 ]));

    //  Base + Random Cost

    SetMagicCost(250, 100);



    SetHelp("Syntax: <cast pocketportal>\n\n"

      "Creates a magical pocket dimension that you can store stuff in.\n"

      "You may type <abduct [person]> once you have entered your portal "

      "so long as the person is standing at the same location from which "

      "you entered.");




        You can only abduct players located just "outside".


private int eventAbductPlayer(string who)


    object player;

   if(this_player()->GetName() != PortalOwner)

        return notify_fail("Only " + PortalOwner + " may abduct people.\n");

    if(!who || strlen(who) == 0)

        return notify_fail("Abduct who?\n");

    if(!(player = find_player(who)))

        return notify_fail("No player like that seems to be within "

                "our reality.\n");

    if(environment(player) != load_object(room::GetExit("out")))

        return notify_fail("That person is not within reach.\n");

   send_messages("", "Transparent hands appear in the air behind "

        "$target_name and rip $target_objective from this reality.",

        player, player, environment(player));


    write("You abduct " + player->GetCapName() + "!");

    return 1;




        Called prior to someone leaving.  If the caster leaves, then

        everyone must leave.


private int eventPreExit(string str)


        return 1;




void eventRestoreInventory()


        string contents;

       contents = unguarded((: read_file, SAVEFILE :));



       foreach(string line in explode(contents, "\n"))


                string filename, data;

               if(sscanf(line, "%s:%s", filename, data) == 2)


                        object ob;

                        mixed m = restore_variable(data);

                       if(!catch(ob = new(filename, m)))


                                ob->eventLoadObject(m, 1);







        Optionally writes the portal's inventory to disk


void eventSaveInventory()


        int count  = 0;

       if(file_size(SAVEDIR) != -2)

                unguarded((: mkdir, SAVEDIR :));

       unguarded((: rm, SAVEFILE :));

       foreach(object ob in filter(all_inventory(), (: !living($1) :)))


                if(count++ < MAXITEMSSAVED)


                        unguarded((: write_file, SAVEFILE,

                                base_name(ob) + ":" + ob->GetSaveString() + "\n" :));


                else if(count == MAXITEMSSAVED)


                        write("Warning, only " + MAXITEMSSAVED + " items will actually "

                                "be saved in your pocket portal.");







        If the portal creator leaves, all the guests go with.  Otherwise

        the portal owner could act as a "bus driver" and taxi people

        around and re-open the portal at the new location and let people



private void eventPostExit(string str)


    if(this_player()->GetName() == PortalOwner)


        array guests = filter(all_inventory(), (: interactive :));


                "$agent_name $agent_verb and the world blinks out of existance!",

                this_player(), 0, this_object());








        Initialize actions if this object happens to be a room


private void init()


    if(environment(this_player()) == this_object())


        add_action((: eventAbductPlayer :), "abduct");





        Called upon successful casting.


int eventCast(object caster, int level)


    string name = caster->GetName();

    object portal;



        portal = new(base_name(this_object()));



       //  prevent a portal within a portal

        portal->SetProperty("no teleport", 1);

        portal->SetShort(sprintf("%s Pocket Dimension",


        portal->SetLong("The walls of this seemingly grand mansion are "

                "slightly transparent as if not quite real.  Beyond the "

                "walls you see nothing at all as if the entire world "

                "was contained within this single structure.  A small "

                "hatch in the floor opens to reveal a bright light "

                "that is presumably the only way out.");








        portal = PortalObjects[name];

       if( !objectp(portal) )


                map_delete(PortalObjects, name);

                return eventCast(caster, level);



   //  Add our exit with hooks


        "out" : ({ base_name(environment(caster)),

                portal->GetPreExitEvent(), portal->GetPostExitEvent() })


   PortalObjects[name] = portal;


    caster->eventMoveLiving( portal );

    caster->AddSkillPoints("conjuring", 1 + random(10));

   return 1;



//  Returns a pointer to this specific instance of eventPreExit

function GetPreExitEvent()  {  return (: eventPreExit :);  }

//  Returns a pointer to this specific instance of eventPostExit

function GetPostExitEvent()  {  return (: eventPostExit :);  }



        This is a hack to check the environment for the "no teleport"

        property since it wasn't clear how this was enforced in DS.


mixed eventParse(object who, array args...)


    if(environment(who)->GetProperty("no teleport"))


        return "You cannot teleport within a pocket dimension.  "

                "You must go out, first.";


    return spell::eventParse(who, args...);




        Ensure this function is exposed.


int SetAmbientLight(int light)


    return room::SetAmbientLight(light);




        Sets the owner of this portal


void SetPortalOwner(object owner)


    PortalOwner = owner->GetName();




        Need to short circuit the CanReceive() method

        so that non-Arches can use this spell.


int CanReceive()


    return 1;