News continues to trickle out about Good Omens.
Who's excited?
Smaller list: Who's not excited?
News continues to trickle out about Good Omens.
Who's excited?
Smaller list: Who's not excited?
I hope that helps.
An update from our code maven:
Hallo! Thanks to everyone's generosity I was able to purchase a new car (pictures added!). At this point, everything else donated is going to be going toward filling the hole that paying the towing company for my old car caused in my rent funds, and to compensating for the two weeks of pay I lost for not having the car. (Not to mention however much I'll end up having to pay for the 2k ambulance bill the city just tried to hit me with.)
THANKS TO EVERYONE! REALLY!
Well it’s fucking stupid.
There is no single sexuality that doesn’t have its shitlords. This has nothing to do with the sexuality, but with humanity.
That bisexuals get treated this way for being bisexual is strong evidence to this conclusion.
So, you know, we've been going through this spate lately on these forums where people are "but that's a sucky idea and you should be ashamed of having it" kind of responses for people looking for input.
I'm just going to leave this here, because it's awesome:
Updated game engines.
@faraday , @Ashen-Shugar , @Griatch , whomever is in charge of Penn these days, you lot don’t get thanked enough.
Thanks.
I have noticed, and it's a cowardly thing to do. Sometimes I want to smack your head right off your shoulders myself, but the middle of a supportive post is not the time. So thank you for your hard efforts that made Eldritch work, as brief as it was,
@faraday said in Hello MSBites! Grade your administrators.:
And frankly, if the community can't manage to have a forum without being awful to each other all the time? Then that says something about the community.
Which is why I wanted to pipe up with, you know, a rare note of positivism: I think we're fine with it. When Soapbox popped back up, people were so glad they could be in a place that wasn't Wora that the energy was very high. I think we're perfectly capable.
What I think happens is what I think happens to all games: The Downward Mediocrity Spiral.
The people you want around are the people who are well-balanced and thoughtful, and they probably have lives. These people have limited time in their day and when things start going south, they can see the direction the wind is blowing or just duck out because they could get a better return of their time somewhere else.
This leaves you with the next layer of helpful and well-balanced positive people. And the next. Eventually the game will balance out at the lowest level they're allowed to get away with by staff, either staff's own morality or staff's level of activity. (The nice thing about a larger game is that you can avoid the staff or the lower-quality players far more easily. This is why games with horribly corrupt staff can be insanely popular.)
So very quickly, a game's player quality and energy spirals down to the people who instead of playing to add to it, play because they can put up with it. Mediocrity reigns.
I say this out of love for the hobby, because I believe that it's true, because if we talk about things we can understand better and maybe, just maybe, we can get along better and have more fun without needing someone to "manage" us. We can absolutely manage ourselves.
I heard that @skew is leaving Fallen World because nobody will join his harem.
Thank you.
@faraday said in Make MSB great again!:
It's the vitriol. The vehemence. The "this is what's wrong with MUSHing" or "this is what's ruining our hobby" of "these players are the worst". People are entitled to those opinions, of course, but I fail to see how it resembles anything approximating "Constructive".
I would like to support my fellow, here.
This makes the following harder for me to say:
@ganymede said in Make MSB great again!:
But, yes, this. Keep advertising free-and-clear of negativity. Open up a Yelp! section for honest/dishonest reviews of the game. Mark clearly.
But allow the Advertisement thread to be filled with sycophants just because they're being positive about the game? How is that useful for the hobby?
And a Game Reviews forum would either have the same problem as the Advertisement threads in that there's no clear distinction between it and the Hog Pit.
Most importantly, police each other politely.
To police each other, there needs to be a respect of the views of others. I also want my pony, Gany, but I'm not seeing this good neighbor approach lately. Some people have told me they've never seen it, but that's the burden of being an optimist.
--
edit:
@Arkandel: It's not censorship if it's against the rules. We have even back on Wora been able to recognize when something has gone too far, and it was a hell of a lot easier splitting threads back then than it is with this new system. What we had on Wora that we didn't really have on Soapbox is someone to act.
@skew said in Unnecessary Messenger System - +txt code:
@auspice do we really think tums beats ums?
Uuummmmm idk I'll think about it.
She could have suggested "COMPLETELY" instead of "TOTALLY".
...
...
I'll show myself out.
No, Amazon, 1 Business-Day Delivery Is Not December Twenty-Fucking-Seventh!
Rule #1: Real Life Comes First.
This means if you have to leave in the middle of a scene because you have an emergency, or even if your SO is pulling you away offering sex, your character should not be punished for your actions.
Real Life Coming First also includes your physical and mental health. While it's not up to staff to keep you happy--and this is hard for some people to take but not one single game on the planet has the edict of making sure that you personally have fun--it's entirely reasonable to expect that they will help maintain a space where you can find your own enjoyment.
In spite of my agreeing with most of the sentiment, the game never, ever, ever trumps the player. The game does have a responsibility to maintain the game, and sometimes that means suggesting to the player that this isn't the place for them, that gives nobody the right to do so in a manner lacking in respect.
We do, however, live in an increasingly socially open society where emotional harm is defined by the person taking harm, and I personally think it's dangerous simply giving the offended the right to stop the game for their beliefs.
How much effort is "reasonable"? Which requests on whom are "reasonable" and which are not? Here's where I think we simply cannot come up with an answer. It's going to rely entirely on the game staff's interpretation, and some of us are going to take that interpretation as not reasonable.
For me, that answer is: Whatever allows the most people to enjoy the game as designed by staff.
Nobody trumps anyone else, but everyone should be aware of their effects on others as they're asking others to be aware of effects on them. Understand and respect.
In honor of Ix's coding prowess, and because I was asked, here is the TinyMUX version of the Logger, formatted for Muxify.
Skol.
/*
This is the TinyMUX version of the code
The logging parent:
================================================================================
== LOGGING PARENT ==============================================================
--------------------------------------------------------------------------------
-- Setup: Logging Parent -------------------------------------------------------
*/
@create Logging Parent <LP>=10
// use your own code here if you want
&.header Logging Parent <LP>=header( %0 )
&.footer Logging Parent <LP>=footer( %0 )
@ahear Logging Parent <LP>=
@break
cor(
u( include.check_ooc, %0 ),
u( include.check_connect, %0 )
);
&log-[inc( after( last( sortby( sort_log, lattr( me/LOG-* ))), - ))] me=
[secs( )] %0
&include.check_ooc Logging Parent <LP>=
cand(
strmatch( v( include_ooc ), 0 ),
strmatch( first( %0 ), *OOC* )
)
&include.check_connect Logging Parent <LP>=
cor(
strmatch( %0, * has connected. ),
strmatch( %0, * has disconnected. ),
strmatch( %0, * has reconnected. ),
strmatch( %0, * has partially disconnected )
)
@Desc Logging Parent <LP>=
Status: [ifelse( v( logging ), [ansi( hg, ON )], [ansi( hr, OFF )] )]%r
OOC Included? [ifelse( v( include_ooc ), ansi( hg, YES ), ansi( hr, NO ))]
%r%r
[ansi( hw, Scene Information: )]%r
%t[ansi( hw, Summary )]: [get( me/SCENE-SUMMARY )]%r
%t[ansi( hw, Date )]: [get( me/SCENE-DATE )]%r
%t[ansi( hw, Cast )]: [iter( get( me/SCENE-CAST ), name( %i0 ))]%r
%t[ansi( hw, Location Name )]: [get( me/SCENE-LOCATION )]%r
%t[ansi( hw, Location Description )]: [get( me/SCENE-LOCATIONDESC )]
%r%r
[ansi( hw, Log entries recorded )]: [words( lattr( me/LOG-* ))]
&DO-SET-LOG-OOC Logging Parent <LP>=
&include_ooc me=[not( get( me/include_ooc ))];
@remit %l=
[ansi( hy, OOC )]:
[name( me )] is now set
[ifelse( v( include_ooc ), ansi( hg, TO ), ansi( hr, TO NOT ))]
include OOC communication.
&DO-SHOW-LOG Logging Parent <LP>=
@eval [setq( 0, sortby( sort_log, lattr( me/LOG-* )))];
@dolist
HEADER
[ifelse( t( %2 ), revwords( extract( revwords( %q0 ), 1, %2 )), %q0 )]
FOOTER={
@pemit %0=[switch( ##,
HEADER, u( SHOW_HEADER_%1 ),
FOOTER, u( SHOW_FOOTER_%1 ),
u( SHOW_LOG_%1, ## )
)]
}
&DO-START-LOG Logging Parent <LP>=
&logging me=1;
@listen me=*;
@remit loc( me )=
[ansi( hy, OOC )]: This scene is now being logged by
[ansi( hw, name( me ))].
&DO-STOP-LOG Logging Parent <LP>=
&logging me=0;
@remit loc( me )=
[ansi( hy, OOC )]: This scene is no longer being logged by
[ansi( hw, name( me ))].
&DO-UNDO-LOG Logging Parent <LP>=
&log-[after( last( sortby( sort_log, lattr( me/LOG-* ))), - )] me;
@pemit/contents loc( me )=
[ansi( hw, OOC )]: The last entry in the log has been undone.
&INCLUDE_OOC Logging Parent <LP>=0
@Listen Logging Parent <LP>=*
&LOGGING Logging Parent <LP>=0
&MESSAGE_LOGGING0 Logging Parent <LP>=
[ansi( y, OFF )]
&MESSAGE_LOGGING1 Logging Parent <LP>=
[ansi( hg, ON )] [ansi( hr, - SCENE IS BEING LOGGED )]
&SHORTDESC Logging Parent <LP>=
is currently [u( message_logging[v( logging )] )].
&SHOW_FOOTER_PLAIN Logging Parent <LP>=
[footer( [ansi( hw, end of log )] )]
&SHOW_FOOTER_WIKI Logging Parent <LP>=
[u( .footer, ansi( hw, end of log ))]
&SHOW_HEADER_PLAIN Logging Parent <LP>=
[u( .header, ansi( hw, [name( me )]'s Log ))]
// this, er, is literal text for the wiki. why aren't the [[ ]] escaped?
&SHOW_HEADER_WIKI Logging Parent <LP>=
[u( .header, ansi( hw, [name( me )]'s Log ))]%r
[[include logheader%r
|summary=[get( me/SCENE-SUMMARY )]%r
|location=[get( me/SCENE-LOCATION )]%r
|desc=[get( me/SCENE-LOCATIONDESC )]%r
]]
%r%r
[[include logcastbegin]]%r
[iter( get( me/SCENE-CAST ),
[[include logccon name=[lcstr( name( %i0 ))] ]], %b, %r
)]%r
[[include logcastend]]
%r%r
[[include logstart]]
%r%r====%r%r
&SHOW_LOG_PLAIN Logging Parent <LP>=
[setq( 0, get( me/%0 ))]
// [ansi( hx, %[[timefmt( $02H:$02T:$02S $P, first( %q0 ))]%] )] // penn/rhost
[ansi( hx, %[[timefmt( %r, first( %q0 ))]%] )] // mux
[rest( %q0 )]
&SHOW_LOG_WIKI Logging Parent <LP>=
[rest( get( me/%0 ))]%r%r-----%r%r
&SORT_LOG Logging Parent <LP>=
sub( after( %0, - ), after( %1, - ))
@set Logging Parent <LP>=NO_COMMAND
/*
================================================================================
== LOGGING COMMANDS ============================================================
%vp is used globally as 'the logging parent'
%ql is used globally as 'the logger object' (%q<logger> in penn/rhost)
--------------------------------------------------------------------------------
-- Setup: Logging Commands -----------------------------------------------------
*/
@create Logging Commands <LC>=10
@set Logging Commands <LC>=INHERIT
@fo me=@VP Logging Commands <LC>=[num( Logging Parent <LP> )]
&lock.isapproved Logging Commands <LC>=isapproved( %# )
@lock/use Logging Commands <LC>=LOCK.ISAPPROVED/1
// would be nice to have a fail message here, but not for mux
// penn/rhost version also sets this no_inherit. not sure why.
/*
--------------------------------------------------------------------------------
-- Functions: Logging Commands -------------------------------------------------
return '1' if check passes, '0' if failed.
*/
&include.locate_object Logging Commands <LC>=
strcat(
setq( l, locate( %#, %0, Tn )),
case( 0,
t( %ql ),
pemit( %#,
I can't find an object named [ansi( hw, %0 )] at your location.
)0,
1
)
)
&include.do_check_basic Logging Commands <LC>=
strcat(
case( 0,
u( include.locate_object, %0 ), 0,
match( parent( %ql ), %vp ),
pemit( %#, That object is not a Scene Logger. )0,
1
)
)
&include.do_check_controls Logging Commands <LC>=
case( 0,
u( include.do_check_basic, %0 ), 0,
controls( %#, %ql ), pemit( %#, You do not control that scene logger.)0,
1
)
&include.owns_object Logging Commands <LC>=
case( 0,
t( u( include.locate_object, %0 )), 0,
controls( %#, %ql ), pemit( %#, That object is not yours. )0,
1
)
/*
--------------------------------------------------------------------------------
-- Commands: Logging Commands --------------------------------------------------
%qc: cast to who? (%q<cast> in penn/rhost)
*/
&CMD-+LOG/CAPTURE Logging Commands <LC>=$+log/capture *:
@assert u( include.do_check_basic, %0 );
&scene-cast %ql=[lcon( %l, connect )];
&scene-location %ql=[name( %l )];
&scene-locationdesc %ql=
[ifelse( hasflag( %l, temporary ),
objeval( owner( %ql ), u( %l/tempdesc )),
objeval( owner( %ql ), u( %l/desc ))
)];
&scene-date %ql=[time( )];
@pemit %#=Captured.
&CMD-+LOG/CAST Logging Commands <LC>=$+log/cast *=*:
@assert u( include.do_check_basic, %0 );
@eval [setq( c, iter( %1, pmatch( %i0 )))];
@break strmatch( %qc, *#-1* )={
@pemit %#=I can't find anyone named:
[iter( %1, ifelse( t( pmatch( %i0 )), , %i0 ))].
};
&SCENE-CAST %ql=%qc;
@pemit %#=
[ansi( hy, OOC )]:
Cast set to: [itemize( iter( %qc, name( %i0 ), %b, | ), | )].
&CMD-+LOG/DATE Logging Commands <LC>=$+log/date *=*:
@assert u( include.do_check_basic, %0 );
&scene-summary %ql=[ifelse( strmatch( lcstr( %1 ), today ), time( ), %1 )];
@pemit %#=[ansi( hy, OOC: Date set to: [ansi( hw, %1 )].
&CMD-+LOG/LOCDESC Logging Commands <LC>=$+log/location/desc *=*:
@assert u( include.do_check_basic, %0 );
&SCENE-LOCATIONDESC %ql=
[switch( %1, here, objeval( %#, u( %l/desc )), %l )];
@pemit %#=
[ansi( hy, OOC )]: Location description set to:
[get( %ql/SCENE-LOCATIONDESC )].;
&CMD-+LOG/LOCNAME Logging Commands <LC>=$+log/location/name *=*:
@assert u( include.do_check_basic, %0 );
&SCENE-LOCATION %ql=[switch( %1, here, name( %l ), %1 )];
@pemit %#=
[ansi( hy, OOC )]: Location name set to: [get( %ql/SCENE-LOCATION )].;
&CMD-+LOG/MAKE Logging Commands <LC>=$+log/make *:
@assert u( include.owns_object, %0 );
@break hastype( %ql, PLAYER )={@pemit %#=You can't make a player a logger!};
@assert t( %ql )={@pemit %#=I can't find an object named [ansi( hw, %0 )].};
@break match( parent( %ql ), %vp )={
@pemit %#=That object is already a scene logger.
};
@parent %ql=%vp;
&LOGGING %ql=0;
@lock/use %ql=logging/1;
@set %ql=!no_command;
@listen %ql=*;
@pemit %#=You have made [ansi( hw, name( %ql ))] a Scene Logger.;
&CMD-+LOG/OFF Logging Commands <LC>=$+log/off *:
@assert u( include.do_check_basic, %0 );
@assert get( %ql/logging )={
@pemit %#=[ansi( hw, name( %ql ))] is not logging this scene.
};
@tri %ql/DO-STOP-LOG=%ql
&CMD-+LOG/ON Logging Commands <LC>=$+log/on *:
@assert u( include.do_check_controls, %0 );
@break get( %ql/logging )={
@pemit %#=[ansi( hw, name( %ql ))] is already logging this scene.
};
@tri %ql/DO-START-LOG=%ql
&CMD-+LOG/OOC Logging Commands <LC>=$+log/ooc *:
@assert u( include.do_check_controls, %0 );
@tri %ql/DO-SET-LOG-OOC=%#
&CMD-+LOG/RECLAIM Logging Commands <LC>=$+log/reclaim:
@assert u( .isapproved, %# )={
@pemit %#=Approved characters only
};
@pemit %#=[ansi( hw, OOC )]: Reclaiming all your loggers...;
@dol children( %vp )={
@assert strmatch( %#, owner( %i0 ));
&logging %i0=0;
@tel %i0=%#
}
&CMD-+LOG/RETURN Logging Commands <LC>=$+log/return *:
@assert u( include.do_check_basic, %0 );
@tri %ql/DO-STOP-LOG=%ql;
@tel %ql=owner( %ql );
@mail/quick [name( owner( %ql ))]=
Logger Returned//[name( %# )] has returned your logger to you from
[name( %l )];
&CMD-+LOG/SHOW Logging Commands <LC>=$+log/show *:
@break strmatch( %0, *=* );
@assert u( include.do_check_basic, %0 );
@tri %ql/DO-SHOW-LOG=%#, plain
&CMD-+LOG/SHOW-LAST Logging Commands <LC>=$+log/last *=*:
@assert isint( %1 )={
@pemit %#=
The second argument is expected to be a number, got [ansi( hw, %1 )]
};
@assert u( include.do_check_basic, %0 );
@tri %ql/DO-SHOW-LOG=%#, plain, %1
&CMD-+LOG/SUMMARY Logging Commands <LC>=$+log/summary *=*:
@assert u( include.do_check_basic, %0 );
&SCENE-SUMMARY %ql=%1;
@pemit %#=[ansi( hy, OOC )]: Summary set to: [ansi( hw, %1 )].
&CMD-+LOG/UNDO Logging Commands <LC>=$+log/undo *:
@assert u( include.do_check_basic, %0 );
@tri %ql/DO-UNDO-LOG=%ql
&CMD-+LOG/WIKI Logging Commands <LC>=$+log/wiki *:
@assert u( include.do_check_basic, %0 );
@tri %ql/DO-SHOW-LOG=%#, wiki
&CMD-+LOG/WIPE Logging Commands <LC>=$+log/wipe *:
@assert u( include.do_check_controls, %0 );
@wipe %ql/LOG-*;
@wipe %ql/SCENE-*;
@pemit %#=[ansi( hw, name( %ql ))] has had its current log wiped.
&CMD-+LOG/POSE Logging Commands <LC>=$+log/pose *=*:
@assert u( include.do_check_basic, %0 );
@tri %ql/ahear=%1;
@pemit %#=[ansi( hw, OOC )]: Pose added.
/*
================================================================================
== HELP TEXT ===================================================================
This text has no hard-breaks at 80 columns. Format to your liking
-- BEGIN --
The +log system is used for logging of scenes in such a way that it minimizes the amount of stuff you have to clean before posting, not to mention making sure you post the log in the correct format.
The scene revolves around Scene Loggers, which are plain objects that you own and re-use from one scene to the next. You never really need to have more then one. To create a <logger>, type: @create <logger> and then drop it. You can make this a scene <logger> then by typing: +log/make <logger>. Once you drop the <logger>, the following commands are available:
+log/on <logger> - activate logging
+log/off <logger> - deactivate logging
+log/ooc <logger> - toggle if OOC communication is logged. Default: off.
+log/show <logger>=X - show the current log or X lines of it. ( =X is optional. ).
+log/wipe <logger> - clear the current log.
+log/undo <logger> - remove the last entry in the log. Useful to repose a correction.
+log/pose <logger>=<pose> - add a pose directly to the logger
Before posting, you can store the scene information with:
+log/summary <logger>=description - set summary of current scene
+log/cast <logger>=person1 person2 .. personN - set participants in log
+log/location/name <logger>=name - name of place where log takes place. 'here' gets current room name.
+log/location/desc <logger>=text - description of place where log takes place. 'here' takes current room desc.
+log/capture <logger> - cast, location/name and location/desc all in one handy command
When you're ready to post your log, +log/wiki <logger> will show you the current log and wiki formatting.
When done, just 'get' your <logger> and take it with you. If you see someone's <logger> laying around, +log/return <logger> will return it to their inventory.
If you've lost your logger, +log/reclaim will teleport ALL of your loggers to your inventory whether they're in use or not.
-- END --
*/
A continuing peeve from that web site and many others: Before I even start shopping is not the time to interrupt me for my email to join your newsletter.
Step One: Upvote that post.
Step Two: Look for the three dots next to the increased number. Click on it. Click on 'Bookmark'.
Step Three: Profit. For real this time.