Page 5 of 10 FirstFirst ... 3 4 5 6 7 ... LastLast
Results 41 to 50 of 93

Thread: September IotM - bagged Cargo Cultist Shorts

  1. #41
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    Revision 20400 adds four subcommands to the "cargo" command:

    Code:
    > cargo scraps
    
    Pocket #373: part #1 of a demon name
    Pocket #222: part #2 of a demon name = ge_
    Pocket #7: part #3 of a demon name = Go
    Pocket #602: part #4 of a demon name
    Pocket #172: part #5 of a demon name = Yi
    Pocket #251: part #6 of a demon name = ya
    Pocket #282: part #7 of a demon name
    
    > cargo joke
    
    Pocket #112: Joke-Mad (20) and a joke: "Q: What is a skeleton's favorite competitive college sport? A: Skeleton crew."
    Pocket #119: Joke-Mad (20) and a joke: "Q: How does a skeleton know what's about to happen? A: He feels it in his bones."
    Pocket #163: Joke-Mad (20) and a joke: "Q: Why didn't the skeleton go to school? A: His heart wasn't in it."
    Pocket #188: Joke-Mad (20) and a joke: "Q: Why do skeletons tell so many jokes? A: Because they're very humerus."
    Pocket #209: Joke-Mad (20) and a joke: "Q: What do you call a skeleton who won't go to work? A: Lazy bones."
    Pocket #260: Joke-Mad (20) and a joke: "Q: Why didn’t the skeleton cross the road? A: He didn't have the guts."
    Pocket #272: Joke-Mad (20) and a joke: "Q: What did the skeleton chef say? A: Bone Apetit!"
    Pocket #307: Joke-Mad (20) and a joke: "Q: What instrument does a skeleton play? A: The trombone."
    Pocket #370: Joke-Mad (20) and a joke: "Q: Why don't skeletons watch horror movies? A: They don't have the stomach for it."
    Pocket #387: Joke-Mad (20) and a joke: "Q: What did the skeleton bring to the picnic? A: Spare ribs."
    Pocket #433: Joke-Mad (20) and a joke: "Q: What did the skeleton serve his tea in? A: Bone china."
    Pocket #437: Joke-Mad (20) and a joke: "Q: Why do skeletons stay so calm? A: Because nothing gets under their skin."
    Pocket #513: Joke-Mad (20) and a joke: "Q: What instruments can a skeleton NOT play? A: His organs."
    
    > cargo meat
    
    Pocket #577: 118 Meat and a clue: To enrage, anger or annoy
    Pocket #149: 245 Meat and a clue: A bittersweet longing for people or things from the past
    Pocket #115: 351 Meat and a clue: Perilous or likely to do harm
    Pocket #139: 451 Meat and a clue: Overflowing with enthusiasm
    Pocket #554: 566 Meat and a clue: An instrument composed of wooden bars played with two small mallets
    Pocket #504: 678 Meat and a clue: A larval insect that burrows into and feeds on the internal tissue of the principal photosynthetic organ of plants)
    Pocket #54: 725 Meat and a clue: One guilty of the wrongful performance of a normally lawful act
    Pocket #484: 872 Meat and a clue: A beating with a cane made of the thin pliable stems of a climbing palm
    Pocket #621: 917 Meat and a clue: Being at the level of the narrowest part of the torso
    
    > cargo poem
    
    Pocket #82: encrypted half-line #1 of a poem: FORPL QDL QDMOQLLV XRMZJOX ALOL
    Pocket #531: encrypted half-line #2 of a poem: QDJKTD ALQ FLDMVC QDL LROX
    Pocket #246: encrypted half-line #3 of a poem: LGFROUMVT JV QDRQ QKLXCRI HJO
    Pocket #108: encrypted half-line #4 of a poem: R PJIRTL JH QAJ ILROX
    Pocket #632: encrypted half-line #5 of a poem: VJ FZRSU SRQ SOJXXLC QDL TOLRQ XDMW'X WRQD
    Pocket #245: encrypted half-line #6 of a poem: VJ CMOL SOJA SRALC MQX VRGL,
    Pocket #45: encrypted half-line #7 of a poem: QDL XQROX ALOL OMTDQ, QDL DJZC ARX QMTDQ
    Pocket #640: encrypted half-line #8 of a poem: QDL XLR KVSJGGJV QRGL
    Pocket #623: encrypted half-line #9 of a poem: DJA HJOQKVLX XDMHQ, HJO QDKOXCRI'X TMHQ:
    Pocket #444: encrypted half-line #10 of a poem: QDL QJA'OMVT GRXQ XQJOG-DLAV
    Pocket #628: encrypted half-line #11 of a poem: M CJ VJQ, XRMC QDL VRPMTRQJO
    Pocket #561: encrypted half-line #12 of a poem: OLSJTVMYL QDRQ GJJV
    Pocket #457: encrypted half-line #13 of a poem: SJGWRXX ADMOZMVT, XRMZX KVHKOZMVT
    Pocket #658: encrypted half-line #14 of a poem: GRMV CLSU XZMSU AMQD ARPLX
    Pocket #502: encrypted half-line #15 of a poem: XQORVTL XLRX, MQ XLLGX, QDL SRWQRMV ADLLYLC
    Pocket #375: encrypted half-line #16 of a poem: ROL RWQ QJ FL JKO TORPLX
    Pocket #181: encrypted half-line #17 of a poem: QDL XUI RVC ARQLO XDROLC JVL HRSL
    Pocket #520: encrypted half-line #18 of a poem: QDRQ XVLLOLC AMQD ZMTDQVMVT QLLQD
    Pocket #405: encrypted half-line #19 of a poem: R ORTMVT SISZJVL GMOOJOMVT
    Pocket #540: encrypted half-line #20 of a poem: QDL XAMOZMVT WJJZ FLVLRQD
    Pocket #153: encrypted half-line #21 of a poem: OLLU JH JYJVL, FOMGXQJVL XQMVUMVT
    Pocket #330: encrypted half-line #22 of a poem: [WJLG SKQ JHH FI XDMW XMVUMVT]
    The first one gets your saved values from the cargoPocketScraps property.
    The others are constant for everybody.

  2. #42
    Developer
    Join Date
    Apr 2006
    Posts
    972

    Default

    Ran cargo scraps with none of those pockets opened and got an error
    Code:
    Unexpected error, debug log printed.
    class java.lang.ArrayIndexOutOfBoundsException: 1
    java.lang.ArrayIndexOutOfBoundsException: 1
    	at net.sourceforge.kolmafia.request.CargoCultistShortsRequest.knownScrapPockets(CargoCultistShortsRequest.java:368)
    	at net.sourceforge.kolmafia.textui.command.CargoCultCommand.run(CargoCultCommand.java:120)
    	at net.sourceforge.kolmafia.KoLmafiaCLI.doExecuteCommand(KoLmafiaCLI.java:596)
    	at net.sourceforge.kolmafia.KoLmafiaCLI.executeCommand(KoLmafiaCLI.java:549)
    	at net.sourceforge.kolmafia.KoLmafiaCLI.executeLine(KoLmafiaCLI.java:450)
    	at net.sourceforge.kolmafia.KoLmafiaCLI.executeLine(KoLmafiaCLI.java:318)
    	at net.sourceforge.kolmafia.swingui.CommandDisplayFrame$CommandQueueHandler.handleQueue(CommandDisplayFrame.java:199)
    	at net.sourceforge.kolmafia.swingui.CommandDisplayFrame$CommandQueueHandler.run(CommandDisplayFrame.java:168)

  3. #43
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    think anything else depends on finishing lost's cultshorts.txt and loading it into a cargo pocket database of some sort.
    - souping up the "cargo" command
    - adding appropriate "cargo" commands to the new effects in statuseffects.txt
    - supporting "cargo" in the Maximizer
    - removing "temporary" code from the Request class in favor of using the pockets database
    Originally Posted by Veracity View Post
    We have PocketDatabase now and it is time to think about how ro use it.

    - I removed all the "temporary" code: if you use the "cargo" command, we'll do restoration first - only if the pocket has a monster, per the PocketDatabase.
    - I made the code that assembles a demon name use the PocketDatabase to look at the scraps in the correct order, rather than having that hardcoded.

    1) I'd like there to be a way to list pockets of a specific type - and tell you if you've used them yet. Chess pieces, desk bells, maybe chocolates for items.
    Do you want to see all the fruits? Avatar potions? Yeg Motel items? A suitable command to list pockets by item categories would be easy enough.

    2) There are a ton of effects that have a single source pocket: (many) of the Effect pockets, Buff, Candy1, Candy1 Chips1, Gum1, Lens1, Needle1, and Teeth1
    Those could added to statuseffects.txt via "cargo XXX". Or:

    3) The rest of Effect, as well as Element and Joke, have multiple pockets that grant the same effect.

    cargo list effect NAME (or effectID)
    (List - only unused? - pockets(s) (with duration) that provide the effect

    cargo effect NAME (or effectID)
    (Select an unused pocket that provides the effect and pick it.)

    This could also work with the pockets in part 2 - those with only a single source pocket

    4) Do we care about handling Candy, Chips, Gum, Lens, Needle, Teeth? These provide all the combinations of two effects from their various effect sets.
    Perhaps "cargo list tag TAG" could list all the pockets with a given tag

    5) monsters?

    cargo monster NAME

    6) stats?

    There are 3 pockets which give 250 of a single state - like bastille.

    cargo stats STAT

    There are numerous pockets that give a lesser number of 2 or 3 stats - adding up to 250 - 300. That is too complicated.

    7) Maximizer

    -------

    I'll probably think about the informational things first.

    cargo count tag TAG
    cargo list tag TAG
    cargo count effect EFFECT
    cargo list effect EFFECT

    The infrastructure needed for those will probaby make it easier to have "cargo effect EFFECT".
    Ph'nglui mglw'nafh Cthulhu
    R'lyeh wgah-nagl fhtagn.

  4. #44
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    Ran cargo scraps with none of those pockets opened and got an error
    Originally Posted by Rinn View Post
    Thanks. Revision 20403

    Not logged in:

    Code:
    > cargo scraps
    
    Pocket 345 is unknown
    Pocket 442 is unknown
    Pocket 647 has effect duration 0: Cold, Dead Hands (0)
    Pockets loaded: 666
    Pocket #373: part #1 of a demon name
    Pocket #222: part #2 of a demon name
    Pocket #7: part #3 of a demon name
    Pocket #602: part #4 of a demon name
    Pocket #172: part #5 of a demon name
    Pocket #251: part #6 of a demon name
    Pocket #282: part #7 of a demon nam
    Ph'nglui mglw'nafh Cthulhu
    R'lyeh wgah-nagl fhtagn.

  5. #45
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    These are all the so-called "Common Effects":

    cargo hot => cargo effect Sizzlin' Hand
    cargo cold => cargo effect Frosty Hand
    cargo spooky => cargo effect Spooky Hand
    cargo stench => cargo effect Foul Hand
    cargo sleaze => cargo effect Nasty Hand
    cargo items => cargo effect Finding Stuff
    cargo +combat => cargo effect Very Attractive
    cargo -combat => cargo effect Barely Visible
    cargo ML => cargo effect Joke-Mad
    cargo init => cargo effect Wary

  6. #46
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    Revision 20407 dramatically simplifies the code in PocketDatabase that maintains maps for pocket types: each pocket type has an internal map which pockets add themselves to, thus obviating all the explicitly defined map variables and the code to add things to them.

    Modulo how we want pockets to be sorted when displayed, this will make the code in the "cargo" command to get all the pockets of a particular type completely trivial.
    Huh. I be that would be easy to do using Java 8 lambdas...

  7. #47
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    Revision 20408 adds "cargo count type TYPE" command.

    Code:
    > cargo count type element
    
    Pocket 647 has effect duration 0: Cold, Dead Hands (0)
    Pockets loaded: 666
    There are 55 element pockets.
    
    > cargo count type choco
    
    There are 6 choco pockets.
    
    > cargo count type chess
    
    There are 12 chess pockets.
    
    > cargo count type bell
    
    There are 5 bell pockets.
    
    > cargo count type potion
    
    There are 87 potion pockets.
    
    > cargo count type avatar
    
    There are 24 avatar pockets.
    
    > cargo count type item
    
    There are 25 item pockets.
    
    > cargo count type item2
    
    There are 3 item2 pockets.
    
    > cargo count type candy
    
    There are 66 candy pockets.
    
    > cargo count type monster
    
    There are 28 monster pockets.

  8. #48
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    Revision 20409 adds "cargo list type TYPE" to list a (sensibly sorted) list of all pockets with that type.

    Here are the current types:

    Code:
    # Stats		MUSCLE	MYSTICALITY	MOXIE
    #
    # Monster	MONSTER
    #
    # Common	EFFECT (DURATION)
    # Effect	EFFECT (DURATION)
    #
    # Buff		EFFECT (DURATION)
    # Element	EFFECT (DURATION)
    # Joke	 	JOKE    	(implies Joke-Mad (20))
    # Restore	EFFECT (DURATION)	(Full HP/MP restore)
    #
    # Candy1	EFFECT (DURATION)
    # Candy2	EFFECT (DURATION)
    # Chips1	EFFECT (DURATION)
    # Gum1		EFFECT (DURATION)
    # Lens1		EFFECT (DURATION)
    # Needle1	EFFECT (DURATION)
    # Teeth1	EFFECT (DURATION)
    #
    # Candy		EFFECT (DURATION)	EFFECT (DURATION)
    # Chips		EFFECT (DURATION)	EFFECT (DURATION)
    # Gum		EFFECT (DURATION)	EFFECT (DURATION)
    # Lens		EFFECT (DURATION)	EFFECT (DURATION)
    # Needle	EFFECT (DURATION)	EFFECT (DURATION)
    # Teeth		EFFECT (DURATION)	EFFECT (DURATION)
    #
    # Item		ITEM
    # Item2		ITEM	ITEM
    #
    # Avatar	ITEM
    # Bell		ITEM
    # Booze		ITEM
    # Cash		ITEM
    # Chess		ITEM
    # Choco		ITEM
    # Food		ITEM
    # Fruit 	ITEM
    # Oyster	ITEM
    # Potion	ITEM
    # Yeg		ITEM
    #
    # Scrap		NUMBER		(demon name puzzle)
    # Poem		NUMBER	MESSAGE	(waterlogged poem)
    # Meat		MEAT	CLUE	(meat-wrapped puzzle)
    Common is per Wiki - an effect with multiple pocket giving that (single) effect
    Effect is per the Wiki's "Rare" effects - a single pocket grants it.

    Pockets with a single item sort by the item name.
    Pockets with two items sort by the first item name then the second item name.
    Similarly for one and two effect pockets.
    scraps sort by scrap number, poem sorts by line number, and so on.

    I have not figured out a sensible way to sort stats. For now, they are by pocket number.
    Similarly for jokes.

    I listed Types up above, but you don't need to obey capitalization: "effect" is as good as "Effect".

  9. #49
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    Revision 20410 does this:

    Remove "cargo poem" since "cargo list type poem" does the same thing.
    Remove "cargo meat" since "cargo list type meat" does the same thing.
    Remove "cargo jokes" since "cargo list type joke" does the same thing.
    Remove "cargo scraps" since "cargo list type scrap" lists the scraps in order.
    Keep "cargo demon", which lists the scraps in order and also shows which values you have collected.

    I confirmed that getting the 7th syllable of the demon name learns the demon name.

    Code:
    > cargo demon
    
    Pocket #373: part #1 of a demon name = Gu
    Pocket #222: part #2 of a demon name = ge_
    Pocket #7: part #3 of a demon name = Go
    Pocket #602: part #4 of a demon name = gu_
    Pocket #172: part #5 of a demon name = Yi
    Pocket #251: part #6 of a demon name = ya
    Pocket #282: part #7 of a demon name = gi
    
    > get demonName13
    
    Guge Gogu Yiyagi
    I also changed the internal pocket maps from TreeMaps to HashMaps, since the only places which iterate over them sort the pockets using something other than pocket #. May as well have O(1) rather than O(log N) efficiency.

  10. #50
    Developer Veracity's Avatar
    Join Date
    Mar 2006
    Location
    The Unseelie Court
    Posts
    13,666

    Default

    By the way - I made my fancy chess set on 9/22. I've been playing a chess game each day since them.

    Code:
    9/22 lost chess game
    9/23 won chess game
    9/24 lost chess game
    9/25 lost chess game
    9/26 won chess game
    9/27 won chess game
    9/28 lost chess game
    9/29 lost chess game => unlocked tattoo
    Any theories about "you have to win X to unlock the tattoo" are false. I think there's a base percentage each game whether to unlock it.

    I ran my tattoo checker script which reads the tattoos from the Wiki and compares to profile and got this:

    Code:
    > call scripts/Utilities/tattoos.ash
    
    The wiki lists 263 tattoos.
    You have 265 tattoos.
    
    You have every non-custom tattoo that is listed in the Wiki.
    
    You have 2 tattoos that the Wiki doesn't know about:
    lathetat
    yegtat
    FWIW, here is the script.

    Code:
    string wiki = visit_url( "https://kol.coldfront.net/thekolwiki/index.php/Tattoo" );
    matcher wm = create_matcher( "thekolwiki/images/.*?/.*?/(.*?).gif", wiki );
    boolean [string] wiki_tattoos;
    boolean [string] unobtainable_tattoos;
    
    while ( wm.find() ) {
        string tat = wm.group(1).to_lower_case();
        switch ( tat ) {
    	// Some Wiki images do not agree with Kol.
        case "guzzlrtattoo":
    	tat = "guzzlrtat";
    	break;
        case "nobeertat":
    	tat = "nobeer";
    	break;
        case "martinitat":
    	tat = "martini";
    	break;
        case "minertat":
    	tat = "miner";
    	break;
        case "bearclawtat":
    	tat = "bearclawta";
    	break;
        case "fratboytat":
    	tat = "fratboy";
    	break;
        case "palette2":
    	tat = "palette";
    	break;
        case "clowntat":
    	tat = "clown";
    	break;
        case "c18tattoo":
    	tat = "c18tat";
    	break;
    	// Custom tattoos
        case "bunny":
        case "cutter":
        case "daisytat":
        case "bonertat":
        case "tehclub":
        case "tehclub_f":
        case "tikidemon":
        case "wintat":
        case "platytat":
    	continue;
        	// Some tattoos have intemediate stages culminating in a final tattoo:
        case "aol1":
        case "aol2":
        case "aol3":
        case "aol4":
        case "aol5":
    	// A. W. O. L. tattoo
    	tat = "aol5";
    	break;
        case "sspdtat1":
        case "sspdpook2":
        case "sspdfipp3":
        case "sspd4plunk":
        case "sspdfi5if":
    	// Saint Sneaky Pete's Day tattoo
    	tat = "sspdfi5if";
        	break;
        }
    
        wiki_tattoos[ tat ] = true;
     }
    
    print( "The wiki lists " + count( wiki_tattoos ) + " tattoos." );
    
    string page = visit_url( "account_tattoos.php", false );
    // <img src="https://s3.amazonaws.com/images.kingdomofloathing.com/otherimages/sigils/sourcetat.gif" width=50 height=50>
    matcher m = create_matcher( "<img.*?sigils/(.*?).gif", page );
    boolean [string] tattoos;
    
    while ( m.find() ) {
        string tat = m.group(1);
        tattoos[ tat ] = true;
    }
    
    print( "You have " + count( tattoos ) + " tattoos." );
    
    boolean [string] wiki_only;
    boolean [string] player_only;
    
    foreach tat in wiki_tattoos {
        if ( tattoos contains tat ) {
    	continue;
        }
        wiki_only[ tat ] = true;
    }
    
    foreach tat in tattoos {
        if ( wiki_tattoos contains tat ) {
    	continue;
        }
        player_only[ tat ] = true;
    }
    
    print( "" );
    if ( count( wiki_only ) == 0 ) {
        print( "You have every non-custom tattoo that is listed in the Wiki." );
    } else {
        print( "The Wiki lists " + count( wiki_only ) + " tatoos that you do not have:" );
        foreach tat in wiki_only {
    	print( tat );
        }
    }
    
    print( "" );
    if ( count( player_only ) == 0 ) {
        print( "The Wiki lists every tattoo that you have." );
    } else {
        print( "You have " + count( player_only ) + " tattoos that the Wiki doesn't know about:" );
        foreach tat in player_only {
    	print( tat );
        }
    }
    Maybe I should publish it in its own thread except I really don't want to put any more work into it.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •