Jacaranda Jim: Anyone worked out how to get 100% or close to?

Here is the file. Having reversed it, it looks like each line is forwards but the lines are in reverse order. Not sure but I think hex 0A 0D represents the end of each line. If I can, I’ll try to reverse it again while keeping each line the right way round.

It is not quite done but very close. I’ll keep updating it but here it is for now.

I don’t know whether the same method will be any use on the EXE file or the hint file. I’ll have a look at them later.

EDIT: Updated. Strangely enough, one character represented “to my south” several times but one spot it just represented “south”. The only way the game could distinguish between them was that the latter said “north/south” so maybe the / was the key. I still need to replace every & by capitalising the next letter. It’s made more awkward by the fact that sometimes a space is between the & and the letter, so a manual job probably.

Amazing work on this. I’m poking away at JIM.HNT and the exe. I think the strings in the exe are in normal order, see for example this bit at (just looking at normal OEM-US encoding without worrying about symbol substitutions) byte 28,959:

√6C╥ßrig ht (c) 1993 Grah am Cluley. All R ▐s∙eservedC_.

HINT.EXE has its block of readable text at byte 8192. JIM.HNT looks to have a completely different text format.

1 Like

It’s at around 16,509 or 0x407d for me.

0A = Linefeed

0D = Carriage Return

So effectively a new line in DOS

1 Like

Is that the right way round for DOS programs, or is it 0D 0A normally? Because I reversed the file. I’m going to see if I can reverse the order of the lines again at least, after I’ve finished touching up the text.

EDIT: The file’s updated again. I’ve also removed the blank lines in a text editor and reversed the line order.

I think I’m done with JIM.000 - it’s not been as helpful as I’d hoped. Maybe the EXE will reveal more? I notice some of the item descriptions are cut short in JIM.000 - look at the telegram, for instance.

How far are you with JIM.EXE? I think that’s the most likely candidate for hidden text. I will help if I can.

I think you are right. CR LF would be the right way around.

1 Like

Yeah, I vaguely remember it being CR LF in that order normally.

I loaded it into Notepad++ and removed all blank lines. The built-in menu option to reverse the line order wasn’t working but I was able to install a plugin directly from the menu to do it. I’ve gone over it again and ironed out one or two small mistakes and I think it’s finally done now.

The python script for reversing bytes is here. You can run it directly from CMD in Windows.

EDIT: I should have kept notes for the decompression; which characters stand for which strings (some of which contain spaces or punctuation, or a capital letter without needing &). If necessary I can do that - I still have the compressed file after reversing it and rotating the letters (using FF as the spare and including the symbol before A and a which becomes A/a (@ and `). I rotated the Z/z back round to @/` but it didn’t really matter in this case as the game didn’t seem to use Z or z in the coded text as far as I remember. (EDIT to clarify: the [ is not used (after Z) but the { (after z) is used as a substitution for “an “ I think. It’s % originally, not & to represent capitalising the next letter. Numbers and punctuation also needed 1 added to their ASCII value. I should have done that before dealing with the substitutions - it would have made dealing with punctuation easier, but I got there in the end. I’m sure next time I’ll be better at it, if it’s the same sort of thing.)

Not sure whether the same substitutions will apply to the other files but if it looks like they might, I’ll have a look because it might save time. I can use Notepad++ to compare which will be much more efficient now than doing it all manually as before at least.

EDIT 2: The “to my “ thing has been solved - Notepad++ doesn’t display every character and the character representing “to my “ (hex AD) is one of those that is not shown. I should have stayed in the hex editor until I was done replacing all the special characters, but oh well, at least I worked it out. New version uploaded, probably the final version now.

EDIT 3: Changing encoding from ANSI to UTF-8 fixes the problem in Notepad++. It shows all extended ASCII as their hex value in a box.

1 Like

It’s proving to be a fascinating process learning the MZ format. I haven’t made much headway on the exe though.

1 Like

There’s also options in Notepad++ under the Encoding section to choose OEM-US or OEM-850 amongst other options, and OEM-US makes it show the same characters for extended ASCII as HxD does (the hex editor I was using). I also found a hex editor plugin for Notepad++ but I didn’t like it very much as it was unwieldy, and had few features compared to a proper hex editor. The few specific features it had that were not part of Notepad++’s main feature set were hard to access, hidden away in the hex editor submenu of the plugins menu. But it’s there if anyone wants to use it I guess.

I might try looking at one of the other files soon. I’m not sure where to start but if I can’t unscramble the text in any of them, I might see if I can find a Pascal decompiler.

EDIT: I found the save file also has some backwards text in it, but it’s only the descriptions of a couple of things after they’ve been changed during gameplay. Interestingly enough, the text in the save file has to be decremented by 1 for each byte rather than incremented. It was compressed so I compared the extended ASCII characters to the JIM.000 compressed text and found that I had to decrement their hex value by 2 to make it match - that’s because while the text in the save is 1 higher than normal, the text in the JIM.000 is 1 lower, so it’s a difference of 2. Since the text in JIM.EXE appears to not need incrementing or decrementing, I looked at JIM.000 again and checked all the extended ASCII substitutions. After replacing each symbol with the correct text, I took JIM.EXE and replaced the symbol 1 above the symbol I just changed in JIM.000 with the same text. I did this until all the extended ASCII characters in JIM.000 were gone, and ended up with a partially-readable JIM.EXE. The problem, however, is that given that it’s an EXE file, the executable code is mixed in with the text, so there’s a lot of junk text in there that was probably converted from code rather than compressed text. You can partially make out some sentences that are in the game, so I think I’m on the right track, but I don’t know where to go from here. Still, I’ll share what I have so far, in case anyone can help.

By the way, the text at the bottom of the save I was looking at said:

“The burst beachball is coloured a hazy shade of yellow.” and “The safe’s door is hanging on its hinges.”

I might have to run the EXE through a Pascal decompiler FIRST, then attempt to decompress the text to get anywhere with this. If anyone can decompile it that would be amazing, as I don’t know where to start with this.

EDIT 2: Another useless (?) thing I’ve discovered:

You can ask various characters about Spindle’s Crotchet for unique responses but I’ve not discovered any extra points so far, and you can wear the carnation - but it doesn’t seem to do any good. I also did a speedrun of sorts taking advantage of the fact that you can say Invoices immediately after Alan says it, then again no later than just after the sun rises so that Alan appears in the cell again the next morning (one or two turns after the sun rises). That way, if planned well, you can buy the cucumber, put it in the right place and press its button by the beginning of the second day. I completed the game on the fourth day (two more Invoices trips are required but can’t be done quickly enough together to save another day) but there were no extra points for doing it quickly.

By the way, not everyone knows that if you wear the watch, it starts working and tells the time, and every turn is 5 minutes - the game day runs from 10am to 8pm, Alan leaves at 6pm, the church clock bongs at 2:45pm and you get warnings for the sun being low at 4:40pm and 5:20pm and warnings for being tired at 6:40pm and 7:20pm. There are 120 turns in a day, and it doesn’t seem to make any difference how long you take - if you miss doing something in time to say Invoices on a particular day and have to wait till the next day (wait moving ahead 4 turns and 20 minutes instead of 1 turn and 5), it seems to not affect anything at all, and I don’t think there’s a day counter in the save although there is a turn counter that goes up to about 119 or 120 (depending on whether it starts at 0 or 1), then resets on the next turn. After 6pm, everything is dark in most outdoor locations since the sun has gone down.

If I can’t make any headway with the EXE, I might try to work out the save file format. I’m getting there with it in my head at least, and having done JIM.000 helps because all the rooms and all the item descriptions are in order - so they can be numbered and those numbers are used in the save file for various things.

1 Like

I’ve discovered one more thing regarding the postman:

You don’t have to bury his body after killing him. You just need to time things right - if you take the body through the transmat, then go out and up and drop it there, then go and give the name to the Security Guard, if you then go back to the body and pick it up, and wait a few turns for the Guard to arrive, immediately go down and drop the body outside the transmat cubicle and you’re safe. By doing this you can reach the end of the game with Grog still alive. It doesn’t seem to change anything else, but if you never dug up the manhole cover, Grog will still crash through it and kill himself, or the Guard will still open it as if it’s visible, and you’ll never be able to get the 50 points from digging it up. Finally, having messed about with the save a bit, it looks like there is only one entry for points that’s unaccounted for, on line 80. Line 158 is where the 20 points for beating the game go, which I discovered because when I set it to 1, it only gave me 19 extra points when I won. So it could be one single task worth 145 points, or it could indeed be impossible to get those last points as I’m running out of ideas. Cheating them in just gives the same ending message as a 100% Humbug run, calling you a winner… or a cheat.

EDIT: I tried the Decompiler Explorer website, and by putting the EXE through every option on there, the only one that gave good results was Reko, producing decompiled code over 10,000 lines long. Rather than use that unwieldy website, I’m downloading Reko proper and putting it through it to see what I get.

EDIT 2: THIS IS AWESOME. The text is now visible, and I just need to do the decompression process on it and I should have the full text of the game! Here we go!

EDIT 3: The decompiler would be great but unfortunately there are very few keyboard shortcuts for things like copy and paste. I’m able to copy the contents of those hex windows only one screen at a time. However, I did find that the same hex data is visible in the DOSBOX-X memory - using 010 editor, I attached it to the process and dumped the memory after running the EXE. The dump is huge and will need sorting through, but I got started on decompressing the text last night. (Screwed up at one point unfortunately by replacing a symbol with “ed” instead of “ed “ with a space, but kept a few intermediate revisions so as not to have to redo everything.) Hope to have results soon!

2 Likes

It’s finally done. I haven’t gone through the whole thing yet but all the text is decompressed. There is still some junk in here but you can easily find the real text. I found the beginning and end of the relevant part of the memory dump so the file is nowhere near as big as before. Hopefully this may provide some answers. Every command the parser understands should be in here too. Some of the swear words appear to be stored backwards one letter ahead, but the rest of the text is normal. Also, I haven’t bothered finding the & symbols and capitalising the next letter after each, because of all the junk in there - it would be a pain to do. So if you see an & followed by a lowercase letter in the real text, that’s what it means.

EDIT: Fixed a slight mistake - $A means “guard” but there is one $A that shouldn’t be expanded, because for some reason there is a $ separating two sentences and the second sentence starts with A. The sentence is “A seething mass of insectoids! (Not a very appetising sight)” so I fixed that. Nothing else has been changed.

There is also one more bit of backwards, one-letter-ahead text near the end: “DAGORLAS BRANTBROCK”.

EDIT 2: Another update. This time another $ wrongly expanded: between “Grog runs “ and “The Security guard” was a $ so it thought it was $T = “rock”. I also found another extended ASCII symbol that means outside, so I replaced it (e.g. “I take Mavis outside”).

I might try and format the thing, get rid of all the junk and put each sentence fragment on a separate line if I can, but if I do, it will take a while. At least that way I’ll be able to iron out any more mistakes, but there’s still a chance I might miss something this way - it’s hard to tell the difference between junk text and very short entries that are actual text, but if I do miss any, they won’t be important. I’ll definitely get all the parser words as they’re in caps, and all the sentence fragments that matter.

EDIT 3: Fixed the order forms, not that it matters. But for completeness that’s done. (The £ is extended ASCII and there were several $1, $2, $3 etc. in there so they needed to be put back from having been wrongly decompressed.)

EDIT 4: Minor update - used the wrong encoding for the £ sign, accidentally used the Windows default ANSI encoding instead of the DOS encoding, on Windows it appears as œ. Fixed. Now it appears as œ if you use ANSI Windows encoding, and displays as £ if you set it to DOS / OEM-US.

3 Likes

I forgot to mention - I’ve also messed about with the save files a bit, and I’m well on the way to understanding the save format - as in what each line means. I haven’t taken any notes yet but from memory I know roughly which lines represent your location, whether Alan is with you, ditto for Mavis and her location, postman’s location and position in loop, item locations and whether carried or worn, and a load of other stuff. The initial descriptions of the beachball amd safe are also saved in the file (backwards and compressed one ASCII value ahead) and changed when required in-game. Just above those lines of text is the interesting stuff - the bottom six numbers represent the part of the postman’s route that changes as a result of the rockfall - and if you compare the routes you’ll see they are identical apart from during those six turns - this explains why the postman teleports if he’s on that part of the route when the rockfall occurs. (He jumps forward up to 4 rooms, it confused me at first - instead of going two rooms south into the caves, he turns back at the east end of the beach and goes into the greengrocer’s and toilet. So if he’s in the cave or on the beach going back towards town, he will jump forward a few rooms as the game changes the route.

The numbers above those six represent room numbers as well. These represent certain exits that aren’t always available. They are set to 0 when you can’t go that way, and the destination room number when you can - e.g. the slide breaking or the rockfall closing a path or doing lategame puzzles to open a path. There are two text fields (again stored backwards one ahead) for the postman’s name and swear word, and if the name field is blank that can cause a crash upon talking to the Security Guard. The field is not reset on starting a new game but the name won’t work while the postman’s still alive. The line that says SAVE represents whether the troll will stop you or not - it has a character 0x01 after the E if he has heard the correct name, and this is also not reset on restarting (but it is reset upon loading a file without the 0x01 in it).

Lines representing points are spaced out 3 apart for the most part (maybe always, not sure), and the two lines between each set of points represent an item (its position and whether held or worn); position being 0 if it doesn’t currently exist in the game world. And there’s a number near the top that goes between 0 and 119 that represents the current time (starting at 1 at the beginning of the game, as a turn ticks over right at the start as well as when you load a file). So if it’s 119 in a save, it will say you fell asleep as soon as you load the file and tick over to 0.

I’ll make some notes and try and pin down every line in the save if I can.

Minor update to the text dump: fixed a couple of wrongly-expanded “$T”s where the $ separated two sentences, it changed them to “rock”.

EDIT: Correction to what I said in post 11:

Instead of “Purple: Deckchair → Green dragon, then Purple dragon → Deckchair and ear-muffs (Zoo canteen, one time each)”, it should say:

Purple: Deckchair → Deckchair and Green dragon, then Purple dragon → Ear-muffs (Zoo canteen, one time each)

If you drink the champagne, your held and worn items are scattered around town and the beach, and it randomly warps you to a room in the same area. You can only drink the champagne inside the tailor’s; taking it outside has a bird break it, and while saying Invoices lets you get out of the shop with the bottle intact, you can’t drink it anywhere else - it says you’re not thirsty. However, one of the warp destinations can be the zoo canteen, even if the dragon is there. If that happens, it will display the normal description of the canteen without mentioning the dragon or any items that are there. You can type “get all” and the deckchair is still there, and can be collected along with any other items in the room. You can leave the canteen via the zoo or the slide and nothing happens. But if you type l or look, that will trigger the dragon and you’ll be bounced out of the canteen into the main part of the zoo. If you then continue as normal and press the purple button when the dragon’s purple, it will change into ear-muffs but the deckchair won’t be there if you already picked it up. It’s a minor thing but for accuracy I’m mentioning it.

It’s also possible to say Invoices when you first use the transmat cubicle and arrive in town, when Grog is at the plinth. Normally you walk away and hear his laughing stop as he teleports. If you say Invoices, he will still be there when you return to town - except if you type l or look while you’re in the police cell, which will also cause him to laugh and teleport away. I guess it considers the cell the “next room” but doesn’t trigger Grog’s action unless you actually look, since it doesn’t do that automatically upon saying Invoices or something?

Finally, i or inventory or list don’t use up a turn. Even actions that don’t use up a turn can make characters do stuff, for example Alan and Mavis can do their usual idle stuff, and if you’re on the beach where the Thief can appear, you can make him appear by just typing nonsense in - as long as the line isn’t completely blank, anything that triggers a response from the parser works. The Thief has a chance of turning up even if no time passes - so either check your inventory or type something the parser doesn’t understand (a single letter like k is good) until he appears, if you want to get him to appear without losing time. This can be good for planning speedruns where you’re trying to beat the game in the minimum number of game days, for example.

Another almost-useless discovery that might save time:

I successfully guessed how the HINTS program works. As some of you may know if you tried running it from the command prompt, it doesn’t work unless called directly by the game (Jacaranda Jim or Humbug). But how does it know what it needs to know, to give the right hints for the right room? I thought it would have to be something fairly simple, and I thought there might even have been control codes in the command line sent to HINTS.EXE to make it harder to trick it. But no, there’s no such protection.

The format can sort of be worked out by finding HINTS.EXE in the text dump, but there are two arguments: the room number and the hints data file. So, to view the hints for the starting room (42), it’s “HINTS 42 JIM.HNT" (the .EXE is optional after the HINTS, and this assumes both the EXE and HNT files are in the current folder). Room 1 is the centre of town with the plinth where you can see the clock. HINTS 1 JIM.HNT for that room’s hints.

Incorrect syntax will either show the brief info, the few lines of text you see if you run HINTS directly without arguments; it will act as if the room has no hints; or it will default to room 1. It seems to accept positive and negative room numbers (so +8 works for room 8 and I assume negative room numbers might work if they exist in the data). There are 50 rooms in Jacaranda Jim numbered 1-50 in the order shown in the JIM.000 file (decompressed above). These room numbers are also used in save files, for various things such as where items and characters are etc. and other miscellaneous information.

So, if anyone wants to read all the hints, just type HINTS 1 JIM.HNT then press up to repeat the last line, changing the number to 2 etc. up to 50. Not all rooms have hints and there are a couple of mistakes but nothing too major. One thing that slightly bothers me is that one of the hints is both misplaced and wrong:

Ask for hints after swimming across the underground lake where it’s dark and you need the carrot ro see and instead of giving a relevant hint it will instead offer a hint for how to make the thief leave. It wrongly suggests the brochure instead of the ticket. I think this is probably just a mistake but I can’t be sure.

EDIT: I asked Google AI to extract every word in caps from the dump. It kept getting it wrong and often blatantly ignoring my request to extract them from the file and not other sources, but eventually we got there (when I got exasperated and threatened to ask Grok instead, haha - that made it say sorry and actually do what I asked).

So, here is the complete list of words the AI extracted, in two lists. First list is commands and basically any words found in all caps in amongst the text responses. Second list is the list of items, characters and conversation subjects etc. There are almost certainly many mistakes in the list. But it’s a start. I will probably do a similar list by hand at some point.

A, AA, ACQUIRE, ACQUIR, ADIOS, ADMIT, AHOY, AHRS, AJAR, ALCO, ALIVE, AMMO, ANCHOR, ANY, AROOM, AROUND, ASK, ATEN, AVAST, BACK, BAG, BAK, BAKE, BAKEWELL, BAKING, BASH, BAT, BEACBALL, BEACSH, BEAT, BED, BEDR, BEDROOM, BERM, BESM, BESMIRCH, BIG, BIKE, BIN, BITE, BLAN, BLANKET, BLEE, BLEEP, BLOW, BLOWU, BOTL, BOTTLE, BOX, BRAN, BRANDISH, BREA, BREAK, BROL, BROOM, BUG, BURN, BURR, BURY, BUSH, BUSI, BUSINESS, BUXO, BUXOM, BUY, CABI, CABINET, CAD, CAKE, CALL, CAN, CAND, CART, CAST, CAUL, CAULI, CENT, CHAI, CHOCOLATE, CHOCOL, CIG, CIGAR, CIGG, CIGARE, CIGARET, CLIM, CLIMB, CLO, CLOCK, COAL, COBB, COBBLE, CODE, COF, COFFEE, COIN, COLA, COLD, COMB, COME, CONC, CONCEAL, COOK, COOKI, COOKIE, COP, COPI, COPIER, COPY, CORN, COUCH, CRY, CRYST, CRYSTAL, CUT, CUUP, CUUPBOARD, DART, DASH, DATE, DEBR, DEBRIS, DELE, DELETE, DEN, DENT, DEPA, DEPART, DEST, DESTROY, DEVO, DEVOUR, DIE, DIG, DIR, DIRT, DIVE, DOG, DOOR, DOW, DOWN, DRAI, DRAIN, DRAG, DRAGON, DRAW, DRE, DRESSER, DRIN, DRINK, DROP, DROW, DROWN, DUMM, DUMMY, DUNG, DUNGE, DUNGEON, DUST, EGGS, ELEV, ELEVATOR, EMER, EMERGE, END, ENG, ENGINE, ENTE, ENTER, EVE, EVIL, EXAM, EXAMINE, EXIT, EXPL, EXPLODE, EXPLOSION, EXTE, EXTING, EXTINGUISHER, FACE, FALL, FELL, FIDO, FIG, FIRE, FIREW, FIREWOR, FIREWORK, FIRM, FISH, FLAM, FLAMING, FLAS, FLASK, FLEE, FLIP, FLOR, FLOOR, FLOOD, FLOW, FLOWERS, FOAM, FOO, FOOD, FOOT, FOUN, FOUNTAIN, FREE, FROM, FROO, FROOF, FRON, FRONT, FRUI, FRUIT, FU, FUNC, FUNCTI, FUNCTION, GAIN, GAME, GARD, GARDEN, GAS, GAT, GATE, GENT, GENTLEMAN, GET, GIFT, GIV, GIVE, GLOVES, GO, GONE, GOS, GOSS, GOSSIP, GRAS, GRASS, GRIL, GRIND, GROS, GROSS, GRUN, GRUNT, GU, GUA, GUIT, GUITAR, GUM, GUTS, HAL, HALL, HAMM, HAMMER, HANG, HANN, HE, HEAD, HEAT, HEAV, HEAVE, HEAVY, HEIG, HEIGHTS, HELL, HELMET, HELP, HERE, HID, HIDDEN, HIDE, HIM, HIT, HITS, HLEW, HOLD, HOME, HOO, HOOR, HOORAY, HOSE, HOU, HOUSE, HOW, HURL, HYMN, IF, IGNI, IGNITE, IMPR, IMPROVE, IN, INFO, INFO, INFO, INFO, INFO, INFO, INVOKE, IS, ITEM, ITTE, ITTENS, JAM, JAR, JET, JETPAK, JETPACK, JUNK, KEYH, KEYHOL, KEYHOLE, KILL, KISS, KIT, KITCH, KITCHEN, KNIF, KNIFE, KOCM, LABE, LABEL, LADD, LADDER, LAND, LASE, LASER, LAUG, LAUGH, LEAF, LEAP, LEAV, LEAVE, LEFT, LEGO, LEGOLAND, LIGH, LIGHTHOUSE, LIGHTS, LINK, LINT, LITTER, LIVE, LOAD, LOUN, LOUNG, LOUNGE, LYIN, LYING, MAC, MACRO, MAID, MAKE, MARI, MARIO, MAST, MASTER, MAUI, MEND, MESS, MESSA, MESSAGE, MET, META, METAL, METR, METRO, MIKE, MINT, MIST, MISTY, MOON, MORN, MORN, MORN, MOT, MOTHER, MOVE, MUFF, MUMM, MUMMY, NAIL, NAILS, NAME, NE, NEAR, NES, NET, NEW, NEWS, NEWSP, NEWSPAPER, NIG, NIGH, NIGHT, NINT, NINTEN, NINTEND, NINTENDO, NO, NOD, NOTE, NOTH, NOTHING, NOW, NOZZ, NOZZLE, NU, NUC, NUCLE, NUCLEA, NUCLEAR, OBJE, OBJECTS, OLD, ON, OPEN, OPTI, OPTION, OR, OVER, PAD, PALLE, PANT, PAT, PEBB, PEBBLE, PERI, PERIOD, PET, PETR, PETROL, PIC, PICK, PICT, PICTUR, PICTURE, PIE, PIST, PISTOL, PLAY, PLIN, PLINTH, PLUG, PO, POCK, POCKET, POOL, POP, POPP, POPPI, POPPING, PORC, PORCELAIN, POT, POTE, POTION, PRAY, PRAYER, PULL, PUMP, PUP, PUPPY, PURP, PURPL, PURPLE, PUSH, PUT, QUIC, QUICKLY, RADIO, RAI, RAINBOW, RAKE, RAZ, RAZOR, READ, REFL, REFLEC, REFLECT, REMO, REMOVE, RENU, RENUMB, REST, RESTO, RESTORE, RETU, RETURN, REVE, REVER, REVER, REVERSIBLE, REWI, REWIND, RIBB, RIBBON, RIC, RICE, RIGH, RIGHT, RING, RISE, RIVI, RIVIE, RIVIERA, RO, ROOM, ROPE, RUB, RUBE, RUBER, RUN, RUSA, RUSACK, SAD, SALL, SALVE, SAND, SAW, SCAN, SCANNER, SCAR, SCARY, SCOT, SCOTTY, SCR, SCRE, SCREW, SCRU, SCRUDR, SCRUDRIV, SDR, SEAL, SEC, SECO, SECOND, SECU, SELL, SENT, SHEFFIELD, SHO, SHOO, SHOOT, SHOP, SHOR, SHORE, SHOU, SHOUT, SHOW, SING, SK, SKA, SKATE, SL, SLI, SLIM, SLIME, SLIP, SLOW, SMAS, SMASH, SMIL, SMILE, SMOK, SMOKE, SNAP, SNE, SNEE, SNEEZ, SNEEZE, SNIF, SNIFF, SNOO, SNOOP, SNOOPY, SOLV, SOLVE, SOME, SONG, SOON, SOUN, SOUND, SPAS, SPASTIC, SPEA, SPEAKE, SPELL, SPIG, SPIGH, SPIGH, SPR, SPRE, SPREAD, SPRI, SPRING, STAB, STAR, START, STAT, STATS, STIC, STICK, STIR, STIRR, STIRRE, STIRRER, STOP, STOW, STRE, STRETCH, STRO, STRONG, STUD, STUFF, SUB, SUIT, SUP, SUPER, SURE, SURF, SURGE, SURPR, SURPRISE, SUSS, SWM, SWM, SWIM, TAB, TABL, TABLE, TAKE, TAS, TASTE, TEA, TELEP, TELEPH, TELEPHONE, TELEV, TELEVI, TELEVIS, TELEVISI, TELEVISIO, TELEVISION, TELL, TENN, TENNI, TENNIS, TH, THE, THIN, THINK, THO, THROW, THRU, THROUG, THROUGH, THUN, THUNDER, THUN, THUNDERBIRDS, TIDY, TIG, TIGER, TIN, TIP, TIPS, TO, TOM, TOP, TOR, TORC, TORCH, TOSS, TOUC, TOUCH, TOWN, TRAIN, TRANS, TRANSF, TRANSFO, TRANSFOR, TRANSFORM, TRANSFE, TRANSFER, TRANSFIG, TRANSFIGURE, TRAP, TRAPD, TRAPDO, TRAPDOO, TRAPDOOR, TREA, TREASUR, TREE, TRIG, TRIGG, TRIGGE, TRIGG, TROLL, TUBE, TUFN, TUFNELL, TURN, TV, UNDO, UNIFO, UNIFOR, UP, UPC, UPM, UPMA, UPMAST, USE, USIN, USING, VA, VAC, VACU, VACUU, VACUUM, VAMP, VARN, VARNIS, VARNISH, VEG, VEGE, VEGET, VEGETAB, VEGETABL, VEGETABLE, VERY, VIBE, VIBES, VIDE, VIDEO, VIEW, VIS, VISI, VISIO, VISION, VISI, VISION, WAR, WARM, WARP, WAS, WASH, WATE, WATER, WAX, WE, WEAP, WEAPO, WEAPON, WEAR, WES, WEST, WET, WH, WHAT, WHEN, WHEE, WHEEL, WHI, WHITE, WHO, WHY, WIL, WILL, WIN, WIND, WIPE, WISH, WIT, WITH, WOOF, WORD, WORK, WORL, WORLD, WOUND, WRIT, WRITE, WYN, WYNNE, YES, YOU, Z, ZAP, ZELDA, ZOR, ZORK

ACHE, ALAN, ALEX, ANEMO, ANEMONE, AQUA, ARCH, ARCHWAY, ATTEN, AUDIT, AX, AXE, BALL, BANNE, BANNER, BEAC, BEACH, BEARD, BELL, BLUE, BODY, BOMB, BOOK, BOOT, BROC, BROCCOLI, BULL, BUTT, BUTTON, CARN, CARRO, CARROT, CAVE, CELL, CHAIR, CHAM, CHEE, CHEESE, CHOC, CHOCOLATE, CHURCH, CLULEY, COLO, COLOUR, COMPU, COMPUT, COW, COWS, CROT, CROTCH, CROW, CUCU, CUCUMBER, DEATH, EAR, ELF, ERNI, ERNIE, ESCAP, FIELD, FL, FLAG, FORC, FORCE, GOLD, GORI, GORIL, GORILLA, GRAH, GRAHAM, GRIB, GRIBB, GRIBBLEY, GRIS, GRIZZLY, GROG, GUA, GUARD, HOLE, HYPN, HYPNO, IBBERS, IBBERSPLATT, INVOIC, JOCK, JUMPE, JUMPER, KEY, LAKE, LEVE, LEVER, LIBRAR, LIGH, LIGHT, LOO, MADA, MADAM, MADAME, MAL, MALL, MALLET, MAN, MAVI, MAVIS, MED, MEDI, MEDICINE, MILK, MIR, MIRR, MIRROR, MONE, MONEY, MURAL, MURD, MURDER, MUSI, MUSIC, NEED, NEEDL, NEEDLE, NOSE, OIL, PADD, PADDED, PAIN, PAIRED, PAINT, PAPE, PAPER, PARC, PARCEL, PASSWO, PETALS, PIAN, PIANO, PIG, PIRAT, PLANT, POLI, POLIC, POLICE, POST, RAT, RED, ROC, ROCK, ROS, ROSE, SACK, SAFE, SAY, SEED, SECUR, SEWA, SEWAGE, SEWE, SEWER, SEX, SHIP, SIGN, SKAT, SLI, SLID, SLIDE, SPAD, SPADE, SPIN, SPINDL, SPOO, SPOON, SPONDO, STOM, STOMA, STOMAC, STOMACH, TAIL, TAILO, TAILOR, TAPE, TELE, TELEV, TELEVISION, TENT, TERM, TERMI, TERMITE, THIEF, TICK, TILE, TOIL, TOILET, TRAI, TRAIL, TRANS, TRANSMI, TRANSMISSION, TREA, TREASU, TREASURE, TROLL, UNIF, UNIFOR, WALL, WALR, WALRU, WALRUS, WAND, WATC, WATCH, WEAS, WEASE, WEASEL, WOLF, YIT, YITS, YITSH, YITSHA, YITSHAK, ZOO

1 Like

I’ve found a few more things that may not help you, but may help others. The first is a short walkthrough for getting started. The second is a list of all the significant objects and their uses. Both were extracted from Adventure Probe, vol. 12, no. 1, January 1998.

Jacaranda Jim (Graham Cluley) getting started 1.txt (425 Bytes)

Jacaranda Jim (Graham Cluley) hints 3.txt (2.5 KB)

2 Likes

I’ve updated the text dump one more time, this time replacing the ¬ symbol with “Okay. “ which I’d missed before, as it wasn’t in the JIM.000 file, and fixing a small spacing mistake in the bit with the Australian currency (when fixing an earlier mistake, I accidentally removed a space so I put it back).

I have also taken the decompressed JIM.000 and numbered each section (pointless for a lot of it but it definitely helps with the room numbers and maybe with the item numbers too? Not sure about that). It was missing the description for the beachball so I added that in (spoiler of course if you read it).

I took a break because it was daunting, but I’ve started working on formatting the text dump now. I’ve cleared out a lot of the junk at the start of the file and I’m putting each sentence fragment on its own line. The random-looking characters between each sentence fragment represent the length of the next fragment, but they aren’t too useful in separating the fragments because they represent the compressed length, not the decompressed length, but they do give a rough idea.

Here’s the numbered JIM.000 file:

There is one thing that’s bugging me - the strings “ICLNBWVANBXOAJNLFAT” and “RDJPJZXKAUAN[“ are next to each other after “Please wait…”, “JIM.DAT” and before a copyright message, “ALAN” and the line about coming round to Alan’s voice at the start of the game. I wonder if it’s code for something? Or maybe a checksum? The [ is definitely part of the second string and is directly after Z in the ASCII table, if that helps. I tried running it through a rot encoder/decoder but that didn’t help.

EDIT: I grabbed the list of things you can ask people about, in case it’s useful to anyone. They’re all together in the dump so it’s easier than finding the complete list of commands. Here it is (with a leading space replaced by _; this just means it can’t be the first word after ask or it won’t recognise the word (and there must be a space before it so it can’t be in the middle of a word; other words can), but you can shortcut it by putting e.g. “ask a [word]” as long as the game doesn’t interpret the word as the person or thing you’re trying to ask. It’s better to always name the person you’re asking so this won’t be a problem, e.g. “ask alan [word]” (the word “about” is unnecessary). As a quick example, if you put “ask sex”, it will ask the previous person but it won’t recognise the word sex as it doesn’t see a space before it since it’s the first word after ask. Even inserting an extra space doesn’t work - I guess the game separates the command (ask) from the arguments and removes any leading spaces.

The first set of words is all the items you can collect. The second set is miscellaneous conversation subjects. The third set is mostly people and animals but a few inanimate objects too, like rock, toilet, archway etc. In any case, you can ask people about anything in any of the three sets, but if you try to take a shortcut by not naming the person you’re asking, a word in the third set can produce responses as if you’re trying to ask him/it instead of the previous person. In some cases, e.g. anemone and termite amongst others, it will remember that as the new most recent thing asked, and will attempt to ask them again next time unless you specify a different person or thing to ask. And in those cases as well as many others in the third set, it will give a clever answer: “Okay. Let’s be serious shall we? I hardly think that if I were to bump into [thing] in the street that I’d go around asking them detailed questions about this and that, and the price of fish. Do you?” This is another time where replying y or yes gives “Smart alec” and replying no gives “Glad to hear it”.

Anyway, here are the lists:

CARN FLAG BLUE BALL CUCU _OIL SPOON CARD AXE KEY MONEY TORCH MIRR BASK GLOV TELE WAND WATC AQUA UNIF BOMB MILK SPAD GRIS BODY MEDI SKAT BOOT _PAPE SACK BELL CHEE TAPE NEEDL CARRO BROC CHAM TICK PIG CHAIR PARC BOOK SEED _EAR CROW

IBBERS CAVE SPONDO MADAME INVOIC LEVER GRAHAM CLULEY ALEX BULL _SEX SPINDL CROTCH PASSWO PAIN GOLD CHURCH ZOO COLOUR PAINT MURDER DEATH SHIP PETALS ROSE HYPNO STOMAC ACHE PADDED POLICE CELL TREASU NOSE JUMPER MALLET PLANET BEARD WEASEL TRANSM BEACH AUDIT TRAIL FORCE FIELD MUSIC PIANO LIBRAR COMPUT ESCAP

POST ALAN GRIBB THIEF MAVIS COW GORIL GROG PIRAT _RAT ERNIE MAN ATTEN YITSH _ELF SECUR GUARD TAILO WALRU WOLF TERMI MURAL _LOO TOILE PLANT SIGN TENT SAFE SLIDE CHAIN SEWAG SEWER LAKE BANNE HOLE ROCK WALL _ARCH ANEMO BUTTO TROLL

I have to ask. After decoding all the text strings, did you manage to work out how to get a 100% score?

2 Likes

I’m afraid not. It’s still a mystery, and I’m really beginning to think it’s not possible. The toll troll gives you no points for passing him, and I think this may be an oversight. I might know more once I finish going through the files completely but it’s a long shot I think; I probably would have found something by now if it was there.

There is one message I can’t place - it says “But the door is locked (from the other side)” and I can’t get that message to appear anywhere in-game. I think maybe it could be the wooden door near the end of the game, which doesn’t respond to the OPEN command and which may also be an oversight.

I think the only way we’ll know for sure is if someone decompiles it - someone with experience decompiling these sorts of games, because I couldn’t make any sense out of Reko’s output.

EDIT: I was curious about something so tried this, but nothing special happened: Finishing the game with 2175-2255 points gives 90-93% and the rank “a fully-fledged Gribbley (nearly)”. I decided to try for under 90% by not digging up the manhole. Instead I let Grog do his usual thing, and snuck the DB past the guard as I described in a post above. Doing this, I finished with 2125 points and 88%, with the rank “a proverbial Popplewick of a decent adventurer” but nothing else was different. On the same token, hacking the save to give me 2400 and 100% just gives the rank “a winner.. or a cheat” (the same as in Humbug).

EDIT 2: And the reason I haven’t done anything with the save format is again tedium. I will have to make a huge number of saves, saving after every single minor thing to see what changes. I need to see how the postman’s movement and position is saved - given that he has a 31-turn cycle, when does the turn counter reset to 0? I don’t think it’s at 31 but I could be wrong. And it’s not based on the regular turn counter for the current day, as the postman doesn’t reset at the start of a new day.

I can pretty easily narrow down the fields for the items. With 45 items, that’s 90 fields, with each item having one field representing its location (or 0 for not in any room) and another representing whether it’s held or worn (1 for held, 3 for worn). Editing the save so that you’re wearing things that can’t normally be worn acts as if the item isn’t there for the most part, but it does let you reference the items, sort of. For instance, the torch doesn’t work if “worn”, and if the cow bell is “worn”, the RING command says there’s nothing to ring, and typing WAVE BELL says you wave the bell, but then says there’s nothing to ring - WAVE BELL basically says you wave it then runs the action for ringing it, which fails in this case. Still, glitchy behaviour is to be expected in situations like this that were never intended.

I will try and make some progress with the save format sooner rather than later, because the text dump will take some time to finish - it would be nice to have something concrete that might be helpful.

EDIT 3: Correction to what I said before about asking characters things: The space before certain words just means those letters must start a word. The game often doesn’t recognise the very first word after ASK no matter what it is if it’s in the list, because it’s looking for WHO you’re asking as the first word. You can get around that by adding a dummy letter, e.g. “ask a [word]” but this will only work if the word isn’t recognised as someone or something to direct the question towards. As I originally said, it’s better to always specify who you’re asking.

If the last referenced person is Alan and you type “ask beard”, you’ll get a generic response, but if you type “ask abeard”, you’ll get the beard response - it seems the game chops off the first character of the first word after ask before looking for a response. Referring to a character in any way works to set that character as the default - you can just type “x alan” and it will set Alan as the default. On a similar note, the game also remembers the last referenced item as “it” or “them” but several commands clear it, such as “flush”, which, if a valid item isn’t referenced, will cause any reference to “it” or “them” afterwards to say “I don’t see what you are referring to”.

Rather than use the cumbersome method of pressing UP to repeat the last line then deleting and replacing the last word to try asking about multiple things, I set DOSBOX-X up so that TAB pasted the contents of the clipboard, as TAB isn’t used for anything else in Jacaranda Jim that I can see. Then I can set the clipboard to e.g. “ask pirate “ so I only have to enter the next word, not delete the previous one as well, to save a little time.

2 Likes

Matt @avengah , I’ve been seriously impressed by how far you have got with your quest for the final few points in Jacaranda Jim. It’s motivated me to start building some tooling that should make it possible to play the game in an interpreter with additional debug functions that will, hopefully, finally help you to reach the end of your quest.

Currently I’m around 300,000 instructions in which is part way through the LZEXE decompression but I’m encouraged that the early tooling seems to be working.

1 Like

If it’s compressed with LZEXE, why not decompress first?

1 Like