MU Soapbox

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Muxify
    • Mustard
    1. Home
    2. Thenomain
    3. Posts
    • Profile
    • Following 2
    • Followers 15
    • Topics 75
    • Posts 5860
    • Best 2526
    • Controversial 16
    • Groups 4

    Posts made by Thenomain

    • RE: What's your nerd origin story?

      @Arkandel said in What's your nerd origin story?:

      What did you experience in your formative years that made you go "wow, that stuff is different and cool?".

      I read books.

      Sorry that this isn't more exciting, but I read books and books and books.

      You can blame the internet for why I don't read anymore. This is not hyperbole.

      I miss books.

      posted in Mildly Constructive
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Tinuviel said in Real World Peeves, Disgruntlement, and Irks.:

      When I was in the US I was told that it's apparently better to write a zero dollar tip receipt and just give your server, or whomever, cash. Due to taxes, or somesuch. Is there any truth to that idea?

      100% yes.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Ganymede said in Real World Peeves, Disgruntlement, and Irks.:

      @Thenomain said in Real World Peeves, Disgruntlement, and Irks.:

      Now that’s living the high life!

      Actually, the service at the Golden Corral here is pretty damn good. In fact, there's a lot of places that I frequent which have great service.

      And this is what I'm finding. Service is either declining (because it's harder to find people who are willing to work the shitty wages that are not rising in pace of cost of living) or are fantastic (because they are and people are willing to try harder for the business to maintain this). There are places where I've been where I go regardless of the service because that's not the point (In-n-Out, e.g.)

      I might be able to afford a larger house if I didn't tip so largely, but I've been there -- I've been there. Take this 40% tip because you showed me a pic of your baby, and she's adorable, sir.

      People who have worked in that part of the service industry are the best tippers by far, ever, of all time. I myself tip better if I'm treated like a person when I'm smiling and talking and joking, and I'm always respectful of their time because the more people they get to the more money they make.

      And if you don't respect that when you get it, then you don't deserve good service.

      Sadly, the service workers in that situation can't afford to walk away from your shitty self.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Um...What?

      @Bad-at-Lurking said in Um...What?:

      It's like what would happen if somebody had asked Jack Kirby to design a gaming PC. Right down to the weirdly elaborate bends on the piping.

      Now I'm imagining a zombie designing a gaming PC.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Ganymede said in Real World Peeves, Disgruntlement, and Irks.:

      @Thenomain said in Real World Peeves, Disgruntlement, and Irks.:

      (Don't raise your hand @Ganymede. We all know you.)

      The fuck, dude? I'm a regular at Golden Corral.

      Now that’s living the high life!

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Tinuviel said in Real World Peeves, Disgruntlement, and Irks.:

      Customer service is like nuclear power. When it's good, it's great. When it's bad, it's... well nuclear.

      When is customer service good? Expensive places, maybe, but who here does expensive that often?

      (Don't raise your hand @Ganymede. We all know you.)

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Um...What?

      Building things is fun. Full stop.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Loggers

      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 --
      
      */
      
      posted in MU Code
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Auspice

      I'm all for calling the cops on something that is disrupting the ability for people to work or live (which I hinted at before).

      I was just also complaining that someone cut my catalytic converter out of my goddamn car.

      Because SOMEONE FUCKING CUT MY CATALYTIC CONVERTER OUT OF MY CAR.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Auspice

      I'm thinking about getting an alarm system for my rusty car.

      Why?

      Someone crawled under it while it was in the car-port one night and removed my catalytic converter. Yes, this really happened.

      Why my rusty car?

      You wouldn't expect it to have an alarm system, now, would you.

      That doesn't excuse the guy for being a public nuisance (a ticketable offense in many areas, incidentally), but I understand the desire.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Real World Peeves, Disgruntlement, and Irks.

      @Pandora

      Holocost Deniers remind me of the Ham/Nye debate on Creationism wherein Hambone said we can’t prove the world wasn’t created because we weren’t there to see it develop.

      To these people:

      First of all: We don’t need to see things to prove they happened.

      Second of all: Fuck you.

      (Thirdly, Wilder was a force for good in fighting racism, but that’s still a damn nice image to choose.)

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Sexuality: IC and OOC

      @Cupcake said in Sexuality: IC and OOC:

      Take for example, the earlier comment someone made to the tune of "I only create straight male characters; I feel so boring." (paraphrasing)

      I honestly have troubles coming up with male characters. On the whole I consider my fellow gender uninteresting at best. This may be saying more about me than anything, but since I work with 99.95% men and they are about 80% pillocks, and that the antagonistic RPers I've had to deal with online are almost always portraying men. (Note: the antagonistic staffers I've had to deal with online are almost always self-confessed women, there's something for everyone to take offense.) So I've had problems coming up with a male character I'm interested in telling stories with.

      posted in Mildly Constructive
      Thenomain
      Thenomain
    • RE: Elegant method to add two lists?

      @Hexagon

      Absolutely code the way that is the best for the information you have. I don’t know what you mean by “exploding skills” but if that means some skills are handled differently than others, it should still be possible to teach your roller or stat lookup system how it should work.

      For instance, in World of Darkness there is a trait called Health Levels, but it depends on a lot of other traits. I store it as a line of code that looks up these other traits.

      I really have five: Max Health (size + stamina), three Damage Types, and Health Penalty (a convoluted formula of Max Heath and sum of damage, affects all rolls).

      posted in MU Code
      Thenomain
      Thenomain
    • RE: Intersectional MU* Community - Discussion

      @Ghost

      buggs bunny

      posted in Mildly Constructive
      Thenomain
      Thenomain
    • RE: Intersectional MU* Community - Discussion

      @Ghost

      No no, after you. I insist!

      posted in Mildly Constructive
      Thenomain
      Thenomain
    • RE: RL Anger

      @mietze said in RL Anger:

      @moth those damn fucking trees.

      Literally. Pollen is plant’s bukakke jizz for your face.

      posted in Tastes Less Game'y
      Thenomain
      Thenomain
    • RE: Elegant method to add two lists?

      @Hexagon said in Elegant method to add two lists?:

      @Thenomain Because of familiarity or because it is easier to manipulate the data?

      Both. I've dealt with systems where data is stored in a position-based attribute (i.e., 2 3 2 1 4 2 3 3 2), and that is fine if all the code around this is going to be fairly consistent. i.e., "strength is position 1" and "physical attributes are strength, dexterity, and stamina" is about as complex as you need it.

      You've found some of the issues with that. Sometimes you'll get a character generation rule that says, "Add 1 to a Finesse attribute." Now you have to make a list of power, finesse, and resistance attributes.

      What I've done is create more than one &attribute to describe a trait.

      &attribute.dexterity <data dictionary>=1.2.3.4.5
      &tag.attribute.dexterity <data dictionary>=physical.finesse
      

      This isn't perfect, but I have a consistent way to filter any kind of trait by one or more tags. I can easily list all physical attributes, skills, and merits though one function. This is much more useful with Fighting Styles.

      I tend to want to think of these things as nested dictionaries in an optimal case, or paired lists with matching indices.

      And that's the beauty of coding. As long as you're inside your parameters, there's no wrong way to do it.

      To look at it from a D&D perspective, I'm expecting a situation where it is easier to mix() lists to derive the following:

      Athletics = Proficiency Bonus + Attribute Bonus + Skill Ranks
      
      &_5E.CHAR_PROFICIENCY obj=2
      &_5E.CHAR_ATTRBONUS obj=[1] 2 1 0 0 0
      &_5E.CHAR_SKILLRANKS obj=2 2 2 [4] 3...
      &_5E.SKILLS codeobj=Acrobatics Animal_Handling Arcana [Athletics]...
      

      It took me a minute to notice you were missing a line:

      &_5E.ATTRIBUTES codeobj=[Strength] Dexterity ...
      

      --

      This is how my system might do that:

      &_attribute.strength <character>=13
      &modifier.strength <code object>=u( attr_mods, get(<character>/ _attribute.strength ))
      

      And the reason is this: I know D&D will do crazy things like, 'While Stunned, Strength Mod is divided by 2 round up, unless also Floating in which case round down'. I can change the modifier code however I want. This also means I can:

      &_skill.athletics <character>=4
      &skill.athletics <code object>=modifier.strength
      

      Or something similar to indicate: The Athletics skill is based on Strength.

      &roll.skill <code object>=add( <character skill>, <skill's attribute modifier>)
      

      --

      Again, there's no wrong way. There are ways that back you into corners that you'd rather not be in (I had to make my 'stat info' object Visible because of that, once, which was horrible), but you take the bits of code that work to make better bits of code.

      Have fun with it!

      posted in MU Code
      Thenomain
      Thenomain
    • RE: Sexuality: IC and OOC

      @Cupcake said in Sexuality: IC and OOC:

      I wish there was a word for that kind of 90%/%10 variable beyond "bisexual".

      If someone asks, retort “Well I wouldn’t fuck you, if that’s what you’re asking.”

      Or if you’re one of those civil, nice people (weirdo), “it depends” should do it.

      posted in Mildly Constructive
      Thenomain
      Thenomain
    • RE: Elegant method to add two lists?

      @Hexagon

      Although you have your answer, I store one trait per attribute. I am now so used to it that would not do it any other way.

      posted in MU Code
      Thenomain
      Thenomain
    • RE: Intersectional MU* Community - Discussion

      @Ghost said in Intersectional MU* Community - Discussion:

      @Thenomain Is there some reason for all the snark?

      Generally when people answer my admission to not sure of the point someone else is making and a willingness to learn with “no, you’re wrong”.

      I also feel that “it depends” is disingenuous no matter who says it. As a thesis to what’s about to be said it’s mental pablum worthy of about as much consideration as same.

      Simply, there's a lot of philosophy involved in this sort of thing, lots of differing approaches, and you can learn a lot about a person (and what the community will be like) based on how they approach decisions like these.

      Yet you offered an either/or choice that anyone would be in their right to ignore. You didn’t even try to engage a different approach when you felt that your question was worthy of answering; you doubled down.

      So yeah, there was a lot I thought was worth getting a bit snarky about.

      posted in Mildly Constructive
      Thenomain
      Thenomain
    • 1
    • 2
    • 23
    • 24
    • 25
    • 26
    • 27
    • 292
    • 293
    • 25 / 293