diff --git a/res/levels/A b/res/levels/A index 3a46d23..4e0aea1 100644 --- a/res/levels/A +++ b/res/levels/A @@ -15,7 +15,7 @@ ROSW,DIEM,CHAH|CHEW,DISH,ROAM ECVS,GNIE,AADD|ACID,ENDS,GAVE UAIY,CNTO,TLAL|CLAY,TAIL,UNTO ERKE,HIIT,DDAG|DRAG,EDIT,HIKE -UIIK,KSEP,WHCR|KICK,USER,WHIP,WICK +UIIK,KSEP,WHCR|KICK,USER,WHIP,WICK|LETTERS CAN BE REUSED IECF,RHET,WTAH|ITCH,REEF,WHAT,WHET AADM,CWMS,SDIE|ADDS,CAME,SWIM,SAME MOUG,SRAH,BUCL|BRAG,MUCH,SOUL,SUCH @@ -32,7 +32,7 @@ ERWS,FCHO,ROEE|ECHO,FREE,ROWS,FOES GEKF,DAIE,MRAP|DEAF,GRIP,MAKE,DRIP WNRF,KUGS,SIOW|KNOW,SURF,WIGS,SNOW TRCD,EOIT,AMLH|ARCH,EMIT,TOLD,ARID -FAER,PVNP,OLAT|FLAP,OVER,PANT,FLAT,PLAT +FAER,PVNP,OLAT|FLAP,OVER,PANT,FLAT,PLAT|A 3-WORD SOLUTION EXISTS QUSH,POGZ,SIIE|POSE,QUIZ,SIGH,PUSH,POSH GITS,EOOY,FASD|EASY,FITS,GOOD,EATS,FOOD SEIR,OOET,TMUM|OMIT,SEEM,TOUR,SOUR,TOUT @@ -50,7 +50,7 @@ OPRL,BAAT,ZEIO|BAIT,OPAL,ZERO,BEAT,ZEAL DNIY,SOLP,JURL|DOLL,JURY,SNIP,DULL,SOIL OAIE,GOZW,PLOL|GLOW,OOZE,PAIL,PLOW,POOL,GAZE FXST,EUFY,DEIS|DEFY,EXIT,FUSS,DEFT,DUST,FESS -TOAK,BERE,ABL |ABLE,BEAK,TORE,TEAK,TOAK +TOAK,BERE,ABL |ABLE,BEAK,TORE,TEAK,TOAK|DON'T PANIC! TAID,SKPP, E|SAID,SKIP,TAPE,SKID SISK,TADN,L GY|LADY,SIGN,TASK,TIDY TLOT,MUBP,S SA|MUST,SLOP,TUBA,SLOT diff --git a/res/levels/B b/res/levels/B index 8dfcb46..8b6aba6 100644 --- a/res/levels/B +++ b/res/levels/B @@ -15,7 +15,7 @@ VEIFM,KUAAL,QNNLE|KNIFE,QUALM,VENAL IUIAH,SHPLY,WMGCR|IMPLY,SUGAR,WHICH TMBAD,GUELR,SAARE|GUARD,SMEAR,TABLE GORRP,SHANL,FEIAG|FERAL,GOING,SHARP -THDED,FEIGH,CUNKY|CEDED,FUNKY,THIGH,TUNED +THDED,FEIGH,CUNKY|CEDED,FUNKY,THIGH,TUNED|LETTERS CAN BE REUSED LOOTT,SUEEE,QWBBY|LOBBY,QUOTE,SWEET,SOOTY AUSLW,BEGEE,RRNON|ARSON,BUGLE,RENEW,ARGON SAAMR,BRKAN,UWBEP|BAKER,SWAMP,URBAN,SABER @@ -31,7 +31,7 @@ SGASD,TREOO,ILLAH|IGLOO,SLASH,TREAD,TRASH FPFNT,HELTE,SAESY|FALSE,HEFTY,SPENT,SALTY TUROR,HOING,VYTSE|HORSE,TUTOR,VYING,TYING WOETT,PBSSH,OIDIE|OBESE,POSIT,WIDTH,POSSE -DISLY,CHAET,UPIRD|CHILD,DIARY,UPSET,CHART,CHARD +DISLY,CHAET,UPIRD|CHILD,DIARY,UPSET,CHART,CHARD|A 3-WORD SOLUTION EXISTS SOLUY,PTRSA,TIPKT|POLKA,STRUT,TIPSY,SILKY,TOPSY DOLAD,HRUNY,REOWN|DROWN,HOUND,RELAY,DELAY,ROUND SAAER,LRUKH,BNYSE|BRUSH,LAYER,SNAKE,BRAKE,BRASH @@ -62,7 +62,7 @@ LUATS,GIILH,TEFCT|GUILT,LIFTS,TEACH,GIFTS,TEATS,TUFTS,LEACH,LEFTS GPONP,SRRGS,LAIUE|GROUP,LARGE,SPINS,GAINS,GRINS,SPINE,GROGS,SPRUE,SARGE COLKS,SDVET,AUOPR|ADOPT,COVER,SULKS,COOKS,COVES,COVET,COOPT,COOPS,SOLES LASAD,AOREL,MICLE|AISLE,LACED,MORAL,AIRED,LOCAL,MIRED,LASED,MACED,MOREL -AGREC,LRGVE,BOAI |AGREE,BRAVE,LOGIC,AGAVE +AGREC,LRGVE,BOAI |AGREE,BRAVE,LOGIC,AGAVE|DON'T PANIC! PLOWP,BCECN,SI OE|BLOWN,PIECE,SCOOP,SLOOP PIPMY,REULP,SLL |PLUMP,REPLY,SILLY,SLUMP RHNRE,WAASH,SM GF|RANGE,SMASH,WHARF,SHARE diff --git a/res/levels/C b/res/levels/C index c4ab6a0..392c169 100644 --- a/res/levels/C +++ b/res/levels/C @@ -15,7 +15,7 @@ TORCFT,GEVIIN,PHNERL|GOVERN,PENCIL,THRIFT TOCOOD,UWLNTL,SNEVEY|SOLVED,TWENTY,UNCOOL PISACE,RERSET,OFFUMY|OFFSET,PIRACY,RESUME NCSCUC,SOTNFY,REEIIE|NOTIFY,RESCUE,SCENIC -RVYRNG,ARFLSE,CEEIEX|AVERSE,CRYING,REFLEX,REFINE +RVYRNG,ARFLSE,CEEIEX|AVERSE,CRYING,REFLEX,REFINE|LETTERS CAN BE REUSED MASECL,INUUIT,STNDAO|INSECT,MANUAL,STUDIO,SANDAL SAMENG,CHTMID,EOIILT|COMMIT,EATING,SHIELD,COMING UOETUT,LSCFSL,HEAUER|HEATER,LOCUST,USEFUL,LOAFER @@ -31,7 +31,7 @@ PORRLT,TNIOAY,UHOSON|POORLY,THROAT,UNISON,POISON AISELB,SBKIRT,LPRONY|ABSORB,LIKELY,SPRINT,ABSENT BAVKEN,OEIGST,RRSIIE|BASKET,ORIGIN,REVISE,RESIST IAQATE,PTLLIL,SEAUEC|ITALIC,PALATE,SEQUEL,SALUTE -COLAER,DETDIN,FRAYOL|CRAYON,DETAIL,FOLDER,COLDER,DETAIN +COLAER,DETDIN,FRAYOL|CRAYON,DETAIL,FOLDER,COLDER,DETAIN|A 3-WORD SOLUTION EXISTS AFCVPY,OCLURD,WOFOES|AFFORD,OCCUPY,WOLVES,ACCORD,OCCURS SQNEAL,UIRAEH,WNUKSD|SQUASH,UNREAL,WINKED,SQUEAL,UNREAD URANLE,SEGGUG,PININT|PEANUT,SINGLE,URGING,PINING,SENILE @@ -63,7 +63,7 @@ OULSLD,WYELEY,EITDIT|EYELID,OUTSET,WILDLY,EYELET,OUTLET,WILLED VESULT,INTTVD,GROOEE|GROOVE,INSULT,VETTED,INSOLE,VESTED,VETOED OINBCS,FEECEE,HUJALK|FEEBLE,HIJACK,OUNCES,FENCES,FINALE,FINALS COAAEE,DECXLL,SHRIDD|COAXED,DECADE,SHRILL,DECIDE,DECILE,DOCILE -PCTARY,DOETCN,AE IOH|ACTION,DETACH,POETRY,POTION +PCTARY,DOETCN,AE IOH|ACTION,DETACH,POETRY,POTION|DON'T PANIC! IEARRT,NNNENY,HUVGB |HUNGRY,INVENT,NEARBY,INVERT SERBNE,FCUABY, TLOP |FELONY,SCRAPE,STUBBY,STROBE RAYTER,GOPHHM, HGG D|GAGGED,GOPHER,RHYTHM,RAGGED diff --git a/res/levels/D b/res/levels/D index 9c91ed1..2d7a057 100644 --- a/res/levels/D +++ b/res/levels/D @@ -15,7 +15,7 @@ DEUSFES,UPWARRT,STSFEDD|DESSERT,STUFFED,UPWARDS ANAVREY,GRGEIND,VIOLETT|ANGERED,GRAVITY,VIOLENT STECUOT,DIAGDED,FRSEKSM|DISGUST,FREEDOM,STACKED PMNITOR,IUAGORE,JARPESY|IMAGERY,JANITOR,PURPOSE -OPNQOTN,BOLLAEE,CAERUOR|BALLOON,CONQUER,OPERATE,COLLATE +OPNQOTN,BOLLAEE,CAERUOR|BALLOON,CONQUER,OPERATE,COLLATE|LETTERS CAN BE REUSED CIPIRAE,ENLLTGL,DAAAING|CAPITAL,DIALING,ENLARGE,CALLING DPNTEEY,OAPOITT,VERISSD|DENTIST,OPPOSED,VARIETY,DEPOSED FAERIFY,SHCKAED,TINTLSF|FANTASY,SHERIFF,TICKLED,TACKLED @@ -31,7 +31,7 @@ BESPSNG,MDYIIEL,OUESCAY|BEEPING,MUSICAL,ODYSSEY,MESSING CKAPBIE,FORGTVR,SHEMIEC|CHAMBER,FORGIVE,SKEPTIC,CHAPTER WECRYOT,PRRTTEG,DAINHPR|DECRYPT,PRINTER,WARTHOG,PAINTER SEMATLE,GIPIIDR,RRETNAY|GREATLY,RIPTIDE,SEMINAR,REPTILE -LOACOUG,SPHKEVE,ACOIINT|ACHIEVE,LOOKOUT,SPACING,LOOKING,SOAKING +LOACOUG,SPHKEVE,ACOIINT|ACHIEVE,LOOKOUT,SPACING,LOOKING,SOAKING|A 3-WORD SOLUTION EXISTS WMUNEES,BRISGLT,SASDKTE|BASSETT,SMUDGES,WRINKLE,BRIDGES,BRISKET HENGINS,CULMPTG,JAIIHER|CALMING,HEIGHTS,JUNIPER,CALIPER,HANGING CUIEFDY,RTRBNES,SHMALLD|CHIEFLY,RUMBLED,STRANDS,RUMBLES,SHIELDS @@ -63,7 +63,7 @@ SETIRPY,RMEKING,THORAES|RETIRES,SMOKING,THERAPY,RETRIES,SEEKING,SHORING SLALIUS,PNIYFRT,IPFDECL|INFLICT,PLAYFUL,SPIDERS,PLAYERS,SLAYERS,SLIDERS RATBENG,OUCIIAS,VIBMOUL|OATMEAL,RUBBING,VICIOUS,RATIONS,RIBBING,RIBBONS SAUUDLS,LOGNIRG,JIMPANY|JAGUARS,LIMPING,SOUNDLY,LAUNDRY,SIGNALS,SIGNING -WUITEEL,INCLHAR,NE GI D|INITIAL,NUCLEAR,WEIGHED,NEITHER +WUITEEL,INCLHAR,NE GI D|INITIAL,NUCLEAR,WEIGHED,NEITHER|DON'T PANIC! IESTDED,HOIRINR,WNHAL G|HOSTING,INHALED,WEIRDER,INHALER TNOTFLE,GRYWING,ALUF M |ANYTIME,GLOWING,TRUFFLE,GROWING SAUMAIN,HUSTTUL, RNFED|HARMFUL,HAUNTED,SUSTAIN,HURTFUL diff --git a/src/storage.a b/src/storage.a index 05931c7..f5e36f7 100644 --- a/src/storage.a +++ b/src/storage.a @@ -191,6 +191,7 @@ LoadPuzzleFromMemory @lineLoop +INCADDR $FE @addLine + ; ($FE) -> characters for 1 line of this puzzle (no prefix) jsr AddLineToPuzzle ldx gWorldID lda kPuzzleWidths, x @@ -199,13 +200,15 @@ LoadPuzzleFromMemory sta $FE bcc + inc $FF -+ - ldy #0 ++ ldy #0 lda ($FE), y - cmp #$2C ; , - beq @lineLoop + cmp #$2C ; ',' + beq @lineLoop ; if next byte is ',' then there is another line so loop back to parse it + ; otherwise the next byte is a delimiter between lines and target words + ; (probably '|' but we don't actually check it) @targetWordLoop +INCADDR $FE + ; ($FE) -> characters for 1 target word of this puzzle (no prefix) jsr AddTargetWordToPuzzle ldx gWorldID lda kPuzzleWidths, x @@ -214,12 +217,31 @@ LoadPuzzleFromMemory sta $FE bcc + inc $FF -+ - ldy #0 ++ ldy #0 lda ($FE), y - cmp #$2C ; , - beq @targetWordLoop - rts + cmp #$2C ; ',' + beq @targetWordLoop ; if next byte is ',' then there is another target word so loop back to parse it + cmp #$7C ; if next byte is '|' then there is a message, otherwise we're done + bne @exit + + +INCADDR $FE +@messageLoop + lda ($FE), y + cmp #$0A + beq @setMessage + cmp #$0D + beq @setMessage + iny + sta @messageBuffer, y + bne @messageLoop +@setMessage + sty @messageBuffer + +LDADDR @messageBuffer + jsr SetNextMessage +@exit rts +@messageBuffer + !byte 40 + !raw " " ;------------------------------------------------------------------------------ ; HasPuzzleBeenCompleted diff --git a/src/ui.message.a b/src/ui.message.a index c4b805c..adb6f16 100644 --- a/src/ui.message.a +++ b/src/ui.message.a @@ -9,29 +9,58 @@ ; - HideMessage ; +;0123456789012345678901 +; press ? for help +; +;0123456789012345678901 +;letters can be reused +; +;0123456789012345678901 +;3-word solution exists +; +;0123456789012345678901 +; don't panic! + ; + showingMessage ; [byte][private] !byte 0 ; 1 = currently showing message, 0 = not currentMessage ; [private] - !byte 20 - !raw "01234567890123456789" + !byte 40 + !raw " " noMessage ; [private] - !byte 20 - !raw " " + !byte 40 + !raw " " SetNextMessage ; copies a new message into private buffer ; (does not display the new message on screen) -; in: A/Y points to length-prefixed string (max 20 characters) +; if new message is shorter than max length, it will be centered +; in: A/Y points to length-prefixed string +ST16 $FE - ldy #0 - lda ($FE), y - tay ; Y = string length -- lda ($FE), y + ldy noMessage +- lda noMessage, y sta currentMessage, y dey bpl - + ldy #0 + lda ($FE), y ; A = string length + tay + clc + adc #1 + lsr + sta $FD + lda currentMessage + lsr + clc + adc $FD + tax +- lda ($FE), y + sta currentMessage, x + dex + dey + bne - rts HideMessage @@ -40,7 +69,7 @@ HideMessage pha lda showingMessage beq + - +PRINT_AT noMessage, 7, 10 + +PRINT_AT noMessage, 7, 0 lda #0 sta showingMessage + pla @@ -50,7 +79,7 @@ ShowMessage ; should really only call once ; will clear message before showing the new one, so there may be a small flicker jsr HideMessage - +PRINT_AT currentMessage, 7, 10 + +PRINT_AT currentMessage, 7, 0 lda #1 sta showingMessage rts diff --git a/src/ui.play.a b/src/ui.play.a index 64fe44a..5b92181 100644 --- a/src/ui.play.a +++ b/src/ui.play.a @@ -285,15 +285,9 @@ AnimatePuzzleIntoPlace iny @max cpy #$FD ; SMC bne -- - rts -; +LDADDR test_message -; jsr SetNextMessage -; jmp ShowMessage -; -;test_message -; !byte 18 -; !raw " PRESS ? FOR HELP" + jmp ShowMessage +; ;------------------------------------------------------------------------------ ; DrawPuzzleChrome ; draw all elements on puzzle screen that are not the actual puzzle