From 71ede70bbe3fb09f137efc7357e2ac14fcd6ba36 Mon Sep 17 00:00:00 2001 From: Abe Pralle Date: Sat, 30 May 2020 20:23:06 -0700 Subject: [PATCH] [Refactor] Basic source code organization --- .gitignore | 4 + Assets/Dialog/Landing/landing.script | 84 + Assets/Dialog/SwampThang/SwampThang.script | 0 Assets/Dialog/apocalypse/apocalypse.script | 63 + Assets/Dialog/appomattox/appomattox.script | 3 + Assets/Dialog/distress/distress.script | 90 + Assets/Dialog/intro_bs/intro_bs.script | 138 + Assets/Dialog/intro_haiku/intro_haiku.script | 69 + Assets/Dialog/main_intro/main_intro.script | 84 + Assets/Dialog/pause.script | 3 + Assets/Dialog/talk/talk.script | 409 + Assets/Dialog/wedding/wedding.script | 110 + Assets/Music/alarm.gbm | 58 + Assets/Music/beehive.gbm | 132 + Assets/Music/cowboy.gbm | 121 + Assets/Music/death.gbm | 115 + Assets/Music/fgbwar.gbm | 148 + Assets/Music/frosty.gbm | 253 + Assets/Music/hoedown.gbm | 153 + Assets/Music/intro_cinema.gbm | 286 + Assets/Music/jazzy.gbm | 225 + Assets/Music/jungle.gbm | 153 + Assets/Music/lady_flower.gbm | 128 + Assets/Music/main_in_game.gbm | 771 + Assets/Music/maybe_haiku.gbm | 287 + Assets/Music/moon_base_ba.gbm | 369 + Assets/Music/moon_base_haiku.gbm | 301 + Assets/Music/mysterious.gbm | 199 + Assets/Music/shroom.gbm | 172 + Assets/Music/something_happy.gbm | 14 + Assets/Music/spaceish.gbm | 224 + Assets/Music/takeoff.gbm | 1307 ++ Assets/Music/wedding.gbm | 516 + Build.rogue | 316 + Data/Dialog/Landing/app_closed_gate_ba1.gtx | Bin 0 -> 76 bytes Data/Dialog/Landing/app_closed_gate_ba2.gtx | Bin 0 -> 25 bytes Data/Dialog/Landing/app_closed_gate_ba3.gtx | Bin 0 -> 29 bytes Data/Dialog/Landing/app_closed_gate_ba4.gtx | Bin 0 -> 25 bytes Data/Dialog/Landing/app_closed_gate_bs1.gtx | Bin 0 -> 45 bytes Data/Dialog/Landing/app_closed_gate_bs2.gtx | Bin 0 -> 24 bytes Data/Dialog/Landing/app_closed_gate_bs3.gtx | Bin 0 -> 34 bytes Data/Dialog/Landing/app_closed_gate_bs4.gtx | 1 + Data/Dialog/Landing/app_closed_gate_bs5.gtx | Bin 0 -> 25 bytes Data/Dialog/Landing/at_closed_gate1.gtx | Bin 0 -> 91 bytes Data/Dialog/Landing/ba1.gtx | Bin 0 -> 14 bytes Data/Dialog/Landing/ba2.gtx | Bin 0 -> 38 bytes Data/Dialog/Landing/ba_guns.gtx | Bin 0 -> 32 bytes Data/Dialog/Landing/ba_return_1.gtx | Bin 0 -> 14 bytes Data/Dialog/Landing/ba_whataboutspare.gtx | Bin 0 -> 28 bytes Data/Dialog/Landing/ba_whatever.gtx | 1 + Data/Dialog/Landing/bs_absolutely.gtx | Bin 0 -> 150 bytes Data/Dialog/Landing/bs_cool.gtx | Bin 0 -> 11 bytes Data/Dialog/Landing/bs_finelotofgood.gtx | Bin 0 -> 37 bytes Data/Dialog/Landing/bs_to_guard_1.gtx | 1 + Data/Dialog/Landing/bs_to_guard_2.gtx | Bin 0 -> 77 bytes Data/Dialog/Landing/bs_to_guard_3.gtx | Bin 0 -> 57 bytes Data/Dialog/Landing/bs_tookkey.gtx | Bin 0 -> 48 bytes Data/Dialog/Landing/bs_wasspare.gtx | Bin 0 -> 27 bytes Data/Dialog/Landing/finished.gtx | Bin 0 -> 109 bytes Data/Dialog/Landing/finished2.gtx | Bin 0 -> 172 bytes Data/Dialog/Landing/guard1.gtx | Bin 0 -> 36 bytes Data/Dialog/Landing/guard2.gtx | Bin 0 -> 36 bytes Data/Dialog/Landing/guard3.gtx | Bin 0 -> 79 bytes Data/Dialog/Landing/guard4.gtx | Bin 0 -> 59 bytes Data/Dialog/Landing/guard_dontcomecloser.gtx | Bin 0 -> 39 bytes Data/Dialog/Landing/guard_notpossible.gtx | Bin 0 -> 139 bytes Data/Dialog/Landing/guard_pansies.gtx | Bin 0 -> 39 bytes Data/Dialog/Landing/guard_really.gtx | Bin 0 -> 13 bytes Data/Dialog/Landing/guard_return_1.gtx | 1 + Data/Dialog/Landing/guard_return_2.gtx | Bin 0 -> 27 bytes Data/Dialog/Landing/guard_return_3.gtx | Bin 0 -> 32 bytes Data/Dialog/Landing/guard_return_4.gtx | Bin 0 -> 15 bytes Data/Dialog/Landing/guard_to_bs_1.gtx | 1 + Data/Dialog/Landing/guard_to_bs_2.gtx | 1 + Data/Dialog/Landing/guard_to_bs_3.gtx | Bin 0 -> 37 bytes Data/Dialog/Landing/guard_yeah.gtx | Bin 0 -> 45 bytes Data/Dialog/Landing/hero_checkgate.gtx | Bin 0 -> 251 bytes Data/Dialog/Landing/hero_closedgate.gtx | Bin 0 -> 265 bytes Data/Dialog/Landing/hero_move.gtx | Bin 0 -> 173 bytes Data/Dialog/Landing/hero_report.gtx | Bin 0 -> 327 bytes Data/Dialog/Landing/hero_whatever.gtx | Bin 0 -> 257 bytes Data/Dialog/Landing/hero_whoareyou.gtx | Bin 0 -> 117 bytes Data/Dialog/Landing/intro.gtx | Bin 0 -> 158 bytes Data/Dialog/Landing/intro2.gtx | Bin 0 -> 197 bytes Data/Dialog/Landing/intro3.gtx | Bin 0 -> 68 bytes Data/Dialog/apocalypse/l0012_alldefused.gtx | Bin 0 -> 308 bytes Data/Dialog/apocalypse/l0012_bombs.gtx | Bin 0 -> 407 bytes Data/Dialog/apocalypse/l0012_defused.gtx | Bin 0 -> 170 bytes Data/Dialog/apocalypse/l1104_apocalypse.gtx | Bin 0 -> 64 bytes Data/Dialog/apocalypse/l1104_letsgo.gtx | Bin 0 -> 51 bytes Data/Dialog/apocalypse/l1104_station.gtx | Bin 0 -> 76 bytes Data/Dialog/apocalypse/l1104_whereisgyro.gtx | Bin 0 -> 73 bytes Data/Dialog/apocalypse/l1204_allset.gtx | Bin 0 -> 27 bytes Data/Dialog/apocalypse/l1204_datahere.gtx | Bin 0 -> 73 bytes Data/Dialog/apocalypse/l1204_gotitall.gtx | Bin 0 -> 105 bytes Data/Dialog/apocalypse/l1204_gyro_button.gtx | Bin 0 -> 98 bytes Data/Dialog/apocalypse/l1204_gyro_escape.gtx | Bin 0 -> 95 bytes Data/Dialog/apocalypse/l1204_gyro_explode.gtx | Bin 0 -> 103 bytes .../Dialog/apocalypse/l1204_gyro_notthere.gtx | Bin 0 -> 107 bytes .../Dialog/apocalypse/l1204_gyro_ofcourse.gtx | Bin 0 -> 102 bytes .../apocalypse/l1204_gyro_unfortunately.gtx | Bin 0 -> 101 bytes Data/Dialog/apocalypse/l1204_letsroll.gtx | Bin 0 -> 32 bytes Data/Dialog/apocalypse/l1204_note.gtx | Bin 0 -> 32 bytes Data/Dialog/distress/BA_surrendering.gtx | Bin 0 -> 65 bytes Data/Dialog/distress/ba_goneawhile.gtx | Bin 0 -> 76 bytes Data/Dialog/distress/bs_nearKiwi.gtx | Bin 0 -> 96 bytes Data/Dialog/distress/captain_cider.gtx | Bin 0 -> 52 bytes Data/Dialog/distress/captain_goodness.gtx | Bin 0 -> 46 bytes Data/Dialog/distress/captain_holdout.gtx | Bin 0 -> 93 bytes Data/Dialog/distress/captain_no.gtx | Bin 0 -> 17 bytes Data/Dialog/distress/captain_nostuff.gtx | Bin 0 -> 44 bytes Data/Dialog/distress/captain_nothanks.gtx | Bin 0 -> 24 bytes Data/Dialog/distress/captain_okay.gtx | Bin 0 -> 19 bytes Data/Dialog/distress/captain_seeyou.gtx | Bin 0 -> 41 bytes Data/Dialog/distress/captain_showit.gtx | Bin 0 -> 46 bytes Data/Dialog/distress/captain_shuttle.gtx | Bin 0 -> 98 bytes Data/Dialog/distress/captain_whyglum.gtx | Bin 0 -> 49 bytes Data/Dialog/distress/captain_winsome.gtx | Bin 0 -> 73 bytes Data/Dialog/distress/haiku_cider.gtx | Bin 0 -> 78 bytes Data/Dialog/distress/haiku_signal.gtx | Bin 0 -> 72 bytes Data/Dialog/distress/lady_badNews.gtx | Bin 0 -> 52 bytes Data/Dialog/distress/lady_bigBullies.gtx | Bin 0 -> 70 bytes Data/Dialog/distress/lady_dispatched.gtx | Bin 0 -> 90 bytes Data/Dialog/distress/lady_help.gtx | Bin 0 -> 75 bytes Data/Dialog/distress/lady_insist.gtx | Bin 0 -> 32 bytes Data/Dialog/distress/lady_must.gtx | Bin 0 -> 28 bytes Data/Dialog/distress/lady_no.gtx | Bin 0 -> 52 bytes Data/Dialog/distress/lady_please.gtx | Bin 0 -> 59 bytes Data/Dialog/distress/lady_poorCaptain.gtx | Bin 0 -> 97 bytes Data/Dialog/distress/lady_saved.gtx | Bin 0 -> 78 bytes Data/Dialog/distress/lady_stay.gtx | Bin 0 -> 45 bytes Data/Dialog/distress/lady_surrender.gtx | Bin 0 -> 92 bytes Data/Dialog/distress/lady_wait.gtx | Bin 0 -> 73 bytes Data/Dialog/distress/meanwhile_1.gtx | Bin 0 -> 44 bytes Data/Dialog/distress/meanwhile_2.gtx | Bin 0 -> 66 bytes Data/Dialog/intro_bs/brainiac_bringIt.gtx | Bin 0 -> 38 bytes .../Dialog/intro_bs/brainiac_canAnswerAny.gtx | Bin 0 -> 46 bytes Data/Dialog/intro_bs/brainiac_computes1.gtx | Bin 0 -> 54 bytes Data/Dialog/intro_bs/brainiac_computes2.gtx | Bin 0 -> 57 bytes Data/Dialog/intro_bs/brainiac_computes3.gtx | Bin 0 -> 38 bytes Data/Dialog/intro_bs/brainiac_computes4.gtx | Bin 0 -> 43 bytes Data/Dialog/intro_bs/brainiac_computes5.gtx | Bin 0 -> 50 bytes Data/Dialog/intro_bs/brainiac_computes6.gtx | Bin 0 -> 39 bytes Data/Dialog/intro_bs/brainiac_computes7.gtx | Bin 0 -> 56 bytes .../intro_bs/brainiac_detectIntruder.gtx | Bin 0 -> 38 bytes Data/Dialog/intro_bs/brainiac_idiotz.gtx | Bin 0 -> 41 bytes Data/Dialog/intro_bs/brainiac_justClose.gtx | Bin 0 -> 47 bytes Data/Dialog/intro_bs/brainiac_lovzHelping.gtx | Bin 0 -> 44 bytes .../intro_bs/brainiac_notNeedBRAINIAC.gtx | Bin 0 -> 126 bytes Data/Dialog/intro_bs/brainiac_sezAsk.gtx | Bin 0 -> 39 bytes Data/Dialog/intro_bs/brainiac_sorry.gtx | Bin 0 -> 25 bytes Data/Dialog/intro_bs/brainiac_surrender.gtx | Bin 0 -> 53 bytes Data/Dialog/intro_bs/brainiac_wait.gtx | Bin 0 -> 72 bytes Data/Dialog/intro_bs/bs_actually.gtx | Bin 0 -> 70 bytes .../intro_bs/bs_answerSomeQuestions.gtx | Bin 0 -> 130 bytes Data/Dialog/intro_bs/bs_gotAPoint.gtx | Bin 0 -> 82 bytes Data/Dialog/intro_bs/bs_hangin1.gtx | Bin 0 -> 31 bytes Data/Dialog/intro_bs/bs_hangin3.gtx | Bin 0 -> 141 bytes Data/Dialog/intro_bs/bs_hangin5.gtx | Bin 0 -> 43 bytes Data/Dialog/intro_bs/bs_hereGoes.gtx | Bin 0 -> 82 bytes Data/Dialog/intro_bs/bs_idea.gtx | Bin 0 -> 182 bytes Data/Dialog/intro_bs/bs_justYouAnMe.gtx | Bin 0 -> 102 bytes Data/Dialog/intro_bs/bs_likeButter.gtx | Bin 0 -> 45 bytes Data/Dialog/intro_bs/bs_presto.gtx | Bin 0 -> 29 bytes Data/Dialog/intro_bs/bs_reallyHard.gtx | Bin 0 -> 38 bytes Data/Dialog/intro_bs/bs_segashuating.gtx | Bin 0 -> 138 bytes Data/Dialog/intro_bs/bs_showMe.gtx | Bin 0 -> 145 bytes Data/Dialog/intro_bs/bs_slippery.gtx | Bin 0 -> 39 bytes Data/Dialog/intro_bs/bs_well.gtx | Bin 0 -> 11 bytes Data/Dialog/intro_bs/bs_wellSee.gtx | Bin 0 -> 28 bytes Data/Dialog/intro_bs/grunt_hangin2.gtx | Bin 0 -> 74 bytes Data/Dialog/intro_bs/grunt_hangin4.gtx | Bin 0 -> 138 bytes Data/Dialog/intro_bs/guard_freeze.gtx | Bin 0 -> 65 bytes Data/Dialog/intro_bs/guard_moveAlong.gtx | Bin 0 -> 36 bytes Data/Dialog/intro_bs/monitor_oneSecond.gtx | Bin 0 -> 39 bytes Data/Dialog/intro_bs/monitor_onlyCroutons.gtx | Bin 0 -> 99 bytes Data/Dialog/intro_bs/monitor_openDoor.gtx | Bin 0 -> 83 bytes Data/Dialog/intro_bs/monitor_sorry.gtx | Bin 0 -> 47 bytes Data/Dialog/intro_bs/soldier_how.gtx | Bin 0 -> 61 bytes Data/Dialog/intro_bs/soldier_yellow.gtx | Bin 0 -> 22 bytes Data/Dialog/intro_haiku/flour_anySign.gtx | Bin 0 -> 55 bytes Data/Dialog/intro_haiku/flour_headHome.gtx | Bin 0 -> 53 bytes Data/Dialog/intro_haiku/flour_poorIambic.gtx | Bin 0 -> 88 bytes .../Dialog/intro_haiku/flour_poorQuatrain.gtx | Bin 0 -> 90 bytes Data/Dialog/intro_haiku/flour_sabotage.gtx | Bin 0 -> 36 bytes Data/Dialog/intro_haiku/flour_sendBS.gtx | Bin 0 -> 81 bytes Data/Dialog/intro_haiku/haiku_askOkay.gtx | Bin 0 -> 146 bytes Data/Dialog/intro_haiku/haiku_enterPrison.gtx | Bin 0 -> 218 bytes Data/Dialog/intro_haiku/haiku_goAhead.gtx | Bin 0 -> 149 bytes Data/Dialog/intro_haiku/haiku_theyNever.gtx | Bin 0 -> 89 bytes Data/Dialog/intro_haiku/haiku_warn.gtx | Bin 0 -> 136 bytes Data/Dialog/intro_haiku/quatrain.gtx | Bin 0 -> 159 bytes Data/Dialog/intro_haiku/skippy_anySign.gtx | Bin 0 -> 83 bytes Data/Dialog/intro_haiku/skippy_clues.gtx | Bin 0 -> 143 bytes Data/Dialog/intro_haiku/skippy_holdOn.gtx | Bin 0 -> 122 bytes Data/Dialog/intro_haiku/skippy_letsGo.gtx | Bin 0 -> 56 bytes .../Dialog/intro_haiku/skippy_loseForSure.gtx | Bin 0 -> 80 bytes Data/Dialog/intro_haiku/skippy_notJustYet.gtx | Bin 0 -> 80 bytes .../intro_haiku/skippy_smartestThing.gtx | Bin 0 -> 76 bytes Data/Dialog/intro_haiku/skippy_woowee.gtx | Bin 0 -> 41 bytes Data/Dialog/main_intro/blank.gtx | Bin 0 -> 14 bytes Data/Dialog/main_intro/flour1.gtx | Bin 0 -> 101 bytes Data/Dialog/main_intro/flour2.gtx | Bin 0 -> 34 bytes Data/Dialog/main_intro/flour3.gtx | Bin 0 -> 52 bytes Data/Dialog/main_intro/flour4.gtx | Bin 0 -> 97 bytes Data/Dialog/main_intro/flour5.gtx | Bin 0 -> 56 bytes Data/Dialog/main_intro/flour6.gtx | Bin 0 -> 91 bytes Data/Dialog/main_intro/flour7.gtx | Bin 0 -> 23 bytes Data/Dialog/main_intro/gyro_cornered1.gtx | Bin 0 -> 35 bytes Data/Dialog/main_intro/gyro_cornered2.gtx | Bin 0 -> 70 bytes Data/Dialog/main_intro/gyro_cornered3.gtx | Bin 0 -> 97 bytes Data/Dialog/main_intro/gyro_cornered4.gtx | Bin 0 -> 97 bytes Data/Dialog/main_intro/intercom.gtx | Bin 0 -> 111 bytes Data/Dialog/main_intro/skippy1.gtx | Bin 0 -> 63 bytes Data/Dialog/main_intro/skippy2.gtx | Bin 0 -> 44 bytes Data/Dialog/main_intro/skippy3.gtx | Bin 0 -> 84 bytes .../main_intro/skippycapture_brainiac1.gtx | Bin 0 -> 49 bytes .../main_intro/skippycapture_brainiac2.gtx | Bin 0 -> 96 bytes .../main_intro/skippycapture_brainiac3.gtx | Bin 0 -> 95 bytes .../main_intro/skippycapture_flour1.gtx | Bin 0 -> 82 bytes .../main_intro/skippycapture_flour2.gtx | Bin 0 -> 98 bytes .../main_intro/skippycapture_gyves1.gtx | Bin 0 -> 48 bytes .../main_intro/skippycapture_gyves1_2.gtx | Bin 0 -> 87 bytes .../main_intro/skippycapture_haiku1.gtx | Bin 0 -> 74 bytes .../main_intro/skippycapture_haiku2.gtx | Bin 0 -> 74 bytes .../main_intro/skippycapture_skippy1.gtx | Bin 0 -> 28 bytes .../main_intro/skippycapture_skippy1_2.gtx | Bin 0 -> 89 bytes .../main_intro/skippycapture_skippy2.gtx | Bin 0 -> 56 bytes Data/Dialog/pause.gtx | Bin 0 -> 37 bytes Data/Dialog/talk/Indeed..gtx | 0 Data/Dialog/talk/l0000_hero_honey.gtx | Bin 0 -> 254 bytes Data/Dialog/talk/l0002_bees.gtx | Bin 0 -> 123 bytes Data/Dialog/talk/l0002_croutons.gtx | Bin 0 -> 271 bytes Data/Dialog/talk/l0002_hero_no.gtx | Bin 0 -> 118 bytes Data/Dialog/talk/l0002_hero_spray.gtx | Bin 0 -> 253 bytes Data/Dialog/talk/l0002_village.gtx | Bin 0 -> 207 bytes Data/Dialog/talk/l0003_aboutjeb.gtx | Bin 0 -> 50 bytes Data/Dialog/talk/l0003_hero_jeb.gtx | Bin 0 -> 97 bytes Data/Dialog/talk/l0003_nevermind.gtx | Bin 0 -> 42 bytes Data/Dialog/talk/l0003_shootfast.gtx | Bin 0 -> 202 bytes Data/Dialog/talk/l0003_wolves.gtx | Bin 0 -> 122 bytes Data/Dialog/talk/l0004_howdypilgrim.gtx | Bin 0 -> 187 bytes Data/Dialog/talk/l0004_mindyourbusiness.gtx | Bin 0 -> 206 bytes Data/Dialog/talk/l0004_sure.gtx | Bin 0 -> 152 bytes Data/Dialog/talk/l0006_avacado.gtx | Bin 0 -> 43 bytes Data/Dialog/talk/l0006_fixbridge.gtx | Bin 0 -> 149 bytes Data/Dialog/talk/l0006_fixed.gtx | Bin 0 -> 158 bytes Data/Dialog/talk/l0006_hero_sayagain.gtx | Bin 0 -> 143 bytes Data/Dialog/talk/l0008_findspray.gtx | Bin 0 -> 252 bytes Data/Dialog/talk/l0010_crate.gtx | Bin 0 -> 220 bytes Data/Dialog/talk/l0010_foundmask.gtx | Bin 0 -> 219 bytes Data/Dialog/talk/l0010_mattermitter.gtx | Bin 0 -> 139 bytes Data/Dialog/talk/l0010_sign.gtx | Bin 0 -> 12 bytes Data/Dialog/talk/l0103_bs_figures.gtx | Bin 0 -> 20 bytes Data/Dialog/talk/l0103_bs_where.gtx | Bin 0 -> 173 bytes Data/Dialog/talk/l0103_forest.gtx | Bin 0 -> 101 bytes Data/Dialog/talk/l0103_gethoney.gtx | Bin 0 -> 169 bytes Data/Dialog/talk/l0103_hero_honeyresponse.gtx | Bin 0 -> 162 bytes Data/Dialog/talk/l0103_honey.gtx | Bin 0 -> 160 bytes Data/Dialog/talk/l0103_learn.gtx | Bin 0 -> 175 bytes Data/Dialog/talk/l0103_seenyoubefore.gtx | Bin 0 -> 133 bytes Data/Dialog/talk/l0103_shootinfast.gtx | Bin 0 -> 49 bytes Data/Dialog/talk/l0103_snakebitekit.gtx | Bin 0 -> 112 bytes Data/Dialog/talk/l0103_wrangling.gtx | Bin 0 -> 176 bytes Data/Dialog/talk/l0105_hero_wrangling.gtx | Bin 0 -> 225 bytes Data/Dialog/talk/l0106_headnorth.gtx | Bin 0 -> 116 bytes Data/Dialog/talk/l0106_hero_seethem.gtx | Bin 0 -> 264 bytes Data/Dialog/talk/l0106_heysonny.gtx | Bin 0 -> 169 bytes Data/Dialog/talk/l0106_sure.gtx | Bin 0 -> 148 bytes Data/Dialog/talk/l0108_sign.gtx | Bin 0 -> 92 bytes Data/Dialog/talk/l0205_forgive.gtx | Bin 0 -> 164 bytes Data/Dialog/talk/l0205_idiot.gtx | Bin 0 -> 26 bytes Data/Dialog/talk/l0205_okay.gtx | Bin 0 -> 156 bytes Data/Dialog/talk/l0205_west.gtx | Bin 0 -> 139 bytes Data/Dialog/talk/l0205_what.gtx | Bin 0 -> 121 bytes Data/Dialog/talk/l0304_spores.gtx | Bin 0 -> 279 bytes Data/Dialog/talk/l0405_final_word.gtx | Bin 0 -> 341 bytes Data/Dialog/talk/l0405_hero_reaction.gtx | Bin 0 -> 255 bytes Data/Dialog/talk/l0405_ho.gtx | Bin 0 -> 127 bytes Data/Dialog/talk/l0612_clearance.gtx | Bin 0 -> 338 bytes Data/Dialog/talk/l0612_controls.gtx | Bin 0 -> 404 bytes Data/Dialog/talk/l0612_duke.gtx | Bin 0 -> 218 bytes Data/Dialog/talk/l0612_go.gtx | Bin 0 -> 159 bytes Data/Dialog/talk/l0612_plan.gtx | Bin 0 -> 317 bytes Data/Dialog/talk/l0612_return.gtx | Bin 0 -> 232 bytes Data/Dialog/talk/l0912_ba_givepassword.gtx | Bin 0 -> 52 bytes .../Dialog/talk/l0912_hero_brokenteleport.gtx | Bin 0 -> 158 bytes Data/Dialog/talk/l0912_hero_losing.gtx | Bin 0 -> 142 bytes Data/Dialog/talk/l0912_hero_revolt.gtx | Bin 0 -> 210 bytes .../l0912_hero_startteleport_nopassword.gtx | Bin 0 -> 134 bytes .../l0912_hero_startteleport_password.gtx | Bin 0 -> 152 bytes Data/Dialog/talk/l0912_justit.gtx | Bin 0 -> 253 bytes Data/Dialog/talk/l0912_killpatsy.gtx | Bin 0 -> 164 bytes Data/Dialog/talk/l0912_needpassword.gtx | Bin 0 -> 38 bytes Data/Dialog/talk/l0912_sign.gtx | Bin 0 -> 182 bytes Data/Dialog/talk/l0912_welcome.gtx | Bin 0 -> 113 bytes Data/Dialog/talk/l1000_follow.gtx | Bin 0 -> 154 bytes Data/Dialog/talk/l1000_freeze.gtx | Bin 0 -> 170 bytes Data/Dialog/talk/l1000_needbomb.gtx | Bin 0 -> 286 bytes Data/Dialog/talk/l1000_toolate.gtx | Bin 0 -> 183 bytes Data/Dialog/talk/l1010_amking.gtx | Bin 0 -> 107 bytes Data/Dialog/talk/l1010_cannotleave.gtx | Bin 0 -> 178 bytes Data/Dialog/talk/l1010_readytogo.gtx | Bin 0 -> 130 bytes Data/Dialog/talk/l1012_hero_readbook.gtx | Bin 0 -> 207 bytes Data/Dialog/talk/l1212_anytime.gtx | Bin 0 -> 394 bytes Data/Dialog/talk/l1212_makesure.gtx | Bin 0 -> 89 bytes Data/Dialog/talk/l1212_suckstobehim.gtx | Bin 0 -> 61 bytes Data/Dialog/talk/l1212_yeah.gtx | Bin 0 -> 17 bytes Data/Dialog/wedding/bs_driving.gtx | Bin 0 -> 76 bytes Data/Dialog/wedding/bs_explain.gtx | Bin 0 -> 74 bytes Data/Dialog/wedding/bs_explain2.gtx | Bin 0 -> 86 bytes Data/Dialog/wedding/bs_palace.gtx | Bin 0 -> 98 bytes Data/Dialog/wedding/captain_cake.gtx | Bin 0 -> 88 bytes Data/Dialog/wedding/captain_camp.gtx | Bin 0 -> 99 bytes Data/Dialog/wedding/captain_dosomething.gtx | Bin 0 -> 79 bytes Data/Dialog/wedding/captain_interrupt.gtx | Bin 0 -> 85 bytes Data/Dialog/wedding/captain_key.gtx | Bin 0 -> 75 bytes Data/Dialog/wedding/captain_okay.gtx | Bin 0 -> 59 bytes Data/Dialog/wedding/captain_tellyouwhat.gtx | Bin 0 -> 88 bytes Data/Dialog/wedding/captain_thanks.gtx | Bin 0 -> 202 bytes Data/Dialog/wedding/captain_thankyou.gtx | Bin 0 -> 53 bytes Data/Dialog/wedding/captain_why.gtx | Bin 0 -> 46 bytes Data/Dialog/wedding/flour_heyguys.gtx | Bin 0 -> 70 bytes Data/Dialog/wedding/gyro_ba.gtx | Bin 0 -> 92 bytes Data/Dialog/wedding/gyro_bs.gtx | Bin 0 -> 72 bytes Data/Dialog/wedding/gyro_difficult.gtx | Bin 0 -> 100 bytes Data/Dialog/wedding/gyro_haiku.gtx | Bin 0 -> 80 bytes Data/Dialog/wedding/gyro_notsofast.gtx | Bin 0 -> 26 bytes Data/Dialog/wedding/gyro_notyummy.gtx | Bin 0 -> 97 bytes Data/Dialog/wedding/gyro_recall.gtx | Bin 0 -> 84 bytes Data/Dialog/wedding/gyro_reveals.gtx | Bin 0 -> 94 bytes Data/Dialog/wedding/gyro_surrender.gtx | Bin 0 -> 94 bytes Data/Dialog/wedding/hero_reasons.gtx | Bin 0 -> 200 bytes Data/Dialog/wedding/lady_byallmeans.gtx | Bin 0 -> 97 bytes Data/Dialog/wedding/lady_dontbesilly.gtx | Bin 0 -> 82 bytes Data/Dialog/wedding/lady_radio.gtx | Bin 0 -> 91 bytes Data/Dialog/wedding/preacher_blah.gtx | Bin 0 -> 47 bytes Data/Dialog/wedding/preacher_married.gtx | Bin 0 -> 62 bytes Data/Dialog/wedding/preacher_pronounce.gtx | Bin 0 -> 69 bytes Data/Dialog/wedding/preacher_reasons.gtx | Bin 0 -> 90 bytes Data/Dialog/wedding/preacher_takebegonia.gtx | Bin 0 -> 83 bytes Data/Dialog/wedding/preacher_takesack.gtx | Bin 0 -> 94 bytes Data/Music/alarm.gbm.bin | Bin 0 -> 203 bytes Data/Music/beehive.gbm.bin | Bin 0 -> 567 bytes Data/Music/cowboy.gbm.bin | Bin 0 -> 438 bytes Data/Music/death.gbm.bin | Bin 0 -> 470 bytes Data/Music/fgbwar.gbm.bin | Bin 0 -> 955 bytes Data/Music/frosty.gbm.bin | Bin 0 -> 1091 bytes Data/Music/hoedown.gbm.bin | Bin 0 -> 591 bytes Data/Music/intro_cinema.gbm.bin | Bin 0 -> 1005 bytes Data/Music/jazzy.gbm.bin | Bin 0 -> 1013 bytes Data/Music/jungle.gbm.bin | Bin 0 -> 753 bytes Data/Music/lady_flower.gbm.bin | Bin 0 -> 538 bytes Data/Music/main_in_game.gbm.bin | Bin 0 -> 7456 bytes Data/Music/makefile | 3 + Data/Music/maybe_haiku.gbm.bin | Bin 0 -> 1545 bytes Data/Music/moon_base_ba.gbm.bin | Bin 0 -> 2070 bytes Data/Music/moon_base_haiku.gbm.bin | Bin 0 -> 1514 bytes Data/Music/mysterious.gbm.bin | Bin 0 -> 660 bytes Data/Music/shroom.gbm.bin | Bin 0 -> 1537 bytes Data/Music/something_happy.gbm.bin | Bin 0 -> 40 bytes Data/Music/spaceish.gbm.bin | Bin 0 -> 1239 bytes Data/Music/takeoff.gbm.bin | Bin 0 -> 3040 bytes Data/Music/wedding.gbm.bin | Bin 0 -> 5184 bytes Data/Tiles/bgTiles1-228.bin | Bin 0 -> 3648 bytes Data/Tiles/bgTiles1-256.bin | Bin 0 -> 4096 bytes Data/Tiles/bgTiles1024-1279.bin | Bin 0 -> 4096 bytes Data/Tiles/bgTiles1280-1535.bin | Bin 0 -> 4096 bytes Data/Tiles/bgTiles1536-1791.bin | Bin 0 -> 4096 bytes Data/Tiles/bgTiles1792-2047.bin | Bin 0 -> 4080 bytes Data/Tiles/bgTiles257-512.bin | Bin 0 -> 4096 bytes Data/Tiles/bgTiles513-768.bin | Bin 0 -> 4096 bytes Data/Tiles/bgTiles769-979.bin | Bin 0 -> 3392 bytes Data/Tiles/fgTiles2048-2219.bin | Bin 0 -> 2752 bytes Data/Tiles/fgTiles2048-2253.bin | Bin 0 -> 3296 bytes Data/Tiles/fgTiles2048-2292.bin | Bin 0 -> 3968 bytes Data/Tiles/fgTiles2048-2296.bin | Bin 0 -> 3968 bytes Data/Tiles/fgTiles2048-2297.bin | Bin 0 -> 3984 bytes Data/Tiles/fgTiles2048-2300.bin | Bin 0 -> 4048 bytes Data/Tiles/fgTiles2048-2302.bin | Bin 0 -> 4096 bytes Data/Tiles/fgTiles2304-2559.bin | Bin 0 -> 2560 bytes Data/discolights.dat | Bin 0 -> 2880 bytes Data/font.bin | Bin 0 -> 992 bytes Media/FGBPreview.mp4 | Bin 0 -> 1964311 bytes Source/L0313.asm | 239 + Source/MAIN.ASM | 179 + Source/USER.ASM | 4715 +++++ Source/cinema.asm | 1693 ++ Source/class.asm | 14437 ++++++++++++++++ Source/class.inc | 206 + Source/defs.inc | 688 + Source/gfx.asm | 7718 +++++++++ Source/gfx.inc | 2 + Source/items.inc | 37 + Source/l0000.asm | 129 + Source/l0001.asm | 79 + Source/l0002.asm | 158 + Source/l0003.asm | 199 + Source/l0004.asm | 144 + Source/l0005.asm | 69 + Source/l0006.asm | 63 + Source/l0007.asm | 72 + Source/l0008.asm | 130 + Source/l0009.asm | 59 + Source/l0010.asm | 436 + Source/l0011.asm | 101 + Source/l0012.asm | 179 + Source/l0013.asm | 770 + Source/l0014.asm | 830 + Source/l0015.asm | 342 + Source/l0103.asm | 283 + Source/l0104.asm | 62 + Source/l0105.asm | 107 + Source/l0106.asm | 148 + Source/l0107.asm | 624 + Source/l0108.asm | 148 + Source/l0109.asm | 59 + Source/l0110.asm | 59 + Source/l0111.asm | 60 + Source/l0112.asm | 62 + Source/l0113.asm | 427 + Source/l0114.asm | 190 + Source/l0115.asm | 864 + Source/l0200.asm | 90 + Source/l0201.asm | 74 + Source/l0203.asm | 166 + Source/l0204.asm | 155 + Source/l0205.asm | 284 + Source/l0211.asm | 90 + Source/l0212.asm | 59 + Source/l0213.asm | 249 + Source/l0214.asm | 552 + Source/l0215.asm | 1148 ++ Source/l0300.asm | 59 + Source/l0301.asm | 74 + Source/l0302.asm | 111 + Source/l0303.asm | 78 + Source/l0304.asm | 253 + Source/l0305.asm | 59 + Source/l0306.asm | 61 + Source/l0307.asm | 66 + Source/l0308.asm | 61 + Source/l0309.asm | 59 + Source/l0310.asm | 93 + Source/l0311.asm | 90 + Source/l0312.asm | 70 + Source/l0314.asm | 560 + Source/l0315.asm | 59 + Source/l0400.asm | 65 + Source/l0401.asm | 136 + Source/l0402.asm | 59 + Source/l0403.asm | 108 + Source/l0404.asm | 189 + Source/l0405.asm | 234 + Source/l0406.asm | 59 + Source/l0407.asm | 59 + Source/l0408.asm | 61 + Source/l0409.asm | 59 + Source/l0410.asm | 100 + Source/l0411.asm | 109 + Source/l0412.asm | 198 + Source/l0413.asm | 57 + Source/l0500.asm | 63 + Source/l0501.asm | 66 + Source/l0502.asm | 62 + Source/l0503.asm | 59 + Source/l0504.asm | 59 + Source/l0505.asm | 187 + Source/l0506.asm | 78 + Source/l0507.asm | 74 + Source/l0508.asm | 59 + Source/l0509.asm | 77 + Source/l0510.asm | 59 + Source/l0512.asm | 59 + Source/l0600.asm | 103 + Source/l0601.asm | 60 + Source/l0602.asm | 76 + Source/l0603.asm | 76 + Source/l0604.asm | 82 + Source/l0605.asm | 84 + Source/l0606.asm | 93 + Source/l0607.asm | 61 + Source/l0608.asm | 59 + Source/l0609.asm | 74 + Source/l0610.asm | 74 + Source/l0612.asm | 592 + Source/l0700.asm | 62 + Source/l0701.asm | 61 + Source/l0702.asm | 59 + Source/l0703.asm | 59 + Source/l0704.asm | 98 + Source/l0705.asm | 59 + Source/l0706.asm | 59 + Source/l0707.asm | 61 + Source/l0708.asm | 59 + Source/l0709.asm | 81 + Source/l0710.asm | 78 + Source/l0711.asm | 104 + Source/l0712.asm | 97 + Source/l0800.asm | 95 + Source/l0801.asm | 59 + Source/l0802.asm | 65 + Source/l0803.asm | 74 + Source/l0804.asm | 75 + Source/l0805.asm | 59 + Source/l0806.asm | 62 + Source/l0807.asm | 62 + Source/l0808.asm | 101 + Source/l0809.asm | 65 + Source/l0810.asm | 98 + Source/l0811.asm | 174 + Source/l0812.asm | 75 + Source/l0900.asm | 71 + Source/l0901.asm | 95 + Source/l0902.asm | 99 + Source/l0903.asm | 59 + Source/l0904.asm | 59 + Source/l0905.asm | 93 + Source/l0906.asm | 62 + Source/l0907.asm | 62 + Source/l0908.asm | 62 + Source/l0909.asm | 59 + Source/l0910.asm | 78 + Source/l0911.asm | 172 + Source/l0912.asm | 371 + Source/l1000.asm | 447 + Source/l1001.asm | 65 + Source/l1002.asm | 70 + Source/l1003.asm | 108 + Source/l1004.asm | 59 + Source/l1005.asm | 59 + Source/l1006.asm | 67 + Source/l1007.asm | 80 + Source/l1008.asm | 78 + Source/l1009.asm | 59 + Source/l1010.asm | 222 + Source/l1011.asm | 173 + Source/l1012.asm | 107 + Source/l1100.asm | 670 + Source/l1101.asm | 648 + Source/l1102.asm | 934 + Source/l1103.asm | 782 + Source/l1104.asm | 528 + Source/l1105.asm | 260 + Source/l1111.asm | 173 + Source/l1112.asm | 325 + Source/l1200.asm | 745 + Source/l1201.asm | 86 + Source/l1202.asm | 238 + Source/l1203.asm | 352 + Source/l1204.asm | 441 + Source/l1212.asm | 189 + Source/l1300.asm | 313 + Source/l1301.asm | 261 + Source/l1302.asm | 369 + Source/l1304.asm | 97 + Source/l1312.asm | 59 + Source/l1400.asm | 659 + Source/l1401.asm | 895 + Source/l1402.asm | 595 + Source/l1403.asm | 604 + Source/l1412.asm | 59 + Source/l1500.asm | 139 + Source/l1502.asm | 998 ++ Source/l1503.asm | 847 + Source/l1504.asm | 355 + Source/l1512.asm | 210 + Source/levels.inc | 6 + Source/macro.inc | 157 + Source/map.asm | 4135 +++++ Source/music.asm | 709 + Source/object.asm | 2263 +++ Source/sample.asm | 8 + Source/start.inc | 49 + Tools/MakeGBM/makegbm.cpp | 844 + Tools/MakeGBM/makegbm.exe | Bin 0 -> 227996 bytes Tools/MakeGBM/makegbm.h | 60 + 577 files changed, 78529 insertions(+) create mode 100644 .gitignore create mode 100644 Assets/Dialog/Landing/landing.script create mode 100644 Assets/Dialog/SwampThang/SwampThang.script create mode 100644 Assets/Dialog/apocalypse/apocalypse.script create mode 100644 Assets/Dialog/appomattox/appomattox.script create mode 100644 Assets/Dialog/distress/distress.script create mode 100644 Assets/Dialog/intro_bs/intro_bs.script create mode 100644 Assets/Dialog/intro_haiku/intro_haiku.script create mode 100644 Assets/Dialog/main_intro/main_intro.script create mode 100644 Assets/Dialog/pause.script create mode 100644 Assets/Dialog/talk/talk.script create mode 100644 Assets/Dialog/wedding/wedding.script create mode 100644 Assets/Music/alarm.gbm create mode 100644 Assets/Music/beehive.gbm create mode 100644 Assets/Music/cowboy.gbm create mode 100644 Assets/Music/death.gbm create mode 100644 Assets/Music/fgbwar.gbm create mode 100644 Assets/Music/frosty.gbm create mode 100644 Assets/Music/hoedown.gbm create mode 100644 Assets/Music/intro_cinema.gbm create mode 100644 Assets/Music/jazzy.gbm create mode 100644 Assets/Music/jungle.gbm create mode 100644 Assets/Music/lady_flower.gbm create mode 100644 Assets/Music/main_in_game.gbm create mode 100644 Assets/Music/maybe_haiku.gbm create mode 100644 Assets/Music/moon_base_ba.gbm create mode 100644 Assets/Music/moon_base_haiku.gbm create mode 100644 Assets/Music/mysterious.gbm create mode 100644 Assets/Music/shroom.gbm create mode 100644 Assets/Music/something_happy.gbm create mode 100644 Assets/Music/spaceish.gbm create mode 100644 Assets/Music/takeoff.gbm create mode 100644 Assets/Music/wedding.gbm create mode 100644 Build.rogue create mode 100644 Data/Dialog/Landing/app_closed_gate_ba1.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_ba2.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_ba3.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_ba4.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_bs1.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_bs2.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_bs3.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_bs4.gtx create mode 100644 Data/Dialog/Landing/app_closed_gate_bs5.gtx create mode 100644 Data/Dialog/Landing/at_closed_gate1.gtx create mode 100644 Data/Dialog/Landing/ba1.gtx create mode 100644 Data/Dialog/Landing/ba2.gtx create mode 100644 Data/Dialog/Landing/ba_guns.gtx create mode 100644 Data/Dialog/Landing/ba_return_1.gtx create mode 100644 Data/Dialog/Landing/ba_whataboutspare.gtx create mode 100644 Data/Dialog/Landing/ba_whatever.gtx create mode 100644 Data/Dialog/Landing/bs_absolutely.gtx create mode 100644 Data/Dialog/Landing/bs_cool.gtx create mode 100644 Data/Dialog/Landing/bs_finelotofgood.gtx create mode 100644 Data/Dialog/Landing/bs_to_guard_1.gtx create mode 100644 Data/Dialog/Landing/bs_to_guard_2.gtx create mode 100644 Data/Dialog/Landing/bs_to_guard_3.gtx create mode 100644 Data/Dialog/Landing/bs_tookkey.gtx create mode 100644 Data/Dialog/Landing/bs_wasspare.gtx create mode 100644 Data/Dialog/Landing/finished.gtx create mode 100644 Data/Dialog/Landing/finished2.gtx create mode 100644 Data/Dialog/Landing/guard1.gtx create mode 100644 Data/Dialog/Landing/guard2.gtx create mode 100644 Data/Dialog/Landing/guard3.gtx create mode 100644 Data/Dialog/Landing/guard4.gtx create mode 100644 Data/Dialog/Landing/guard_dontcomecloser.gtx create mode 100644 Data/Dialog/Landing/guard_notpossible.gtx create mode 100644 Data/Dialog/Landing/guard_pansies.gtx create mode 100644 Data/Dialog/Landing/guard_really.gtx create mode 100644 Data/Dialog/Landing/guard_return_1.gtx create mode 100644 Data/Dialog/Landing/guard_return_2.gtx create mode 100644 Data/Dialog/Landing/guard_return_3.gtx create mode 100644 Data/Dialog/Landing/guard_return_4.gtx create mode 100644 Data/Dialog/Landing/guard_to_bs_1.gtx create mode 100644 Data/Dialog/Landing/guard_to_bs_2.gtx create mode 100644 Data/Dialog/Landing/guard_to_bs_3.gtx create mode 100644 Data/Dialog/Landing/guard_yeah.gtx create mode 100644 Data/Dialog/Landing/hero_checkgate.gtx create mode 100644 Data/Dialog/Landing/hero_closedgate.gtx create mode 100644 Data/Dialog/Landing/hero_move.gtx create mode 100644 Data/Dialog/Landing/hero_report.gtx create mode 100644 Data/Dialog/Landing/hero_whatever.gtx create mode 100644 Data/Dialog/Landing/hero_whoareyou.gtx create mode 100644 Data/Dialog/Landing/intro.gtx create mode 100644 Data/Dialog/Landing/intro2.gtx create mode 100644 Data/Dialog/Landing/intro3.gtx create mode 100644 Data/Dialog/apocalypse/l0012_alldefused.gtx create mode 100644 Data/Dialog/apocalypse/l0012_bombs.gtx create mode 100644 Data/Dialog/apocalypse/l0012_defused.gtx create mode 100644 Data/Dialog/apocalypse/l1104_apocalypse.gtx create mode 100644 Data/Dialog/apocalypse/l1104_letsgo.gtx create mode 100644 Data/Dialog/apocalypse/l1104_station.gtx create mode 100644 Data/Dialog/apocalypse/l1104_whereisgyro.gtx create mode 100644 Data/Dialog/apocalypse/l1204_allset.gtx create mode 100644 Data/Dialog/apocalypse/l1204_datahere.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gotitall.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gyro_button.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gyro_escape.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gyro_explode.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gyro_notthere.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gyro_ofcourse.gtx create mode 100644 Data/Dialog/apocalypse/l1204_gyro_unfortunately.gtx create mode 100644 Data/Dialog/apocalypse/l1204_letsroll.gtx create mode 100644 Data/Dialog/apocalypse/l1204_note.gtx create mode 100644 Data/Dialog/distress/BA_surrendering.gtx create mode 100644 Data/Dialog/distress/ba_goneawhile.gtx create mode 100644 Data/Dialog/distress/bs_nearKiwi.gtx create mode 100644 Data/Dialog/distress/captain_cider.gtx create mode 100644 Data/Dialog/distress/captain_goodness.gtx create mode 100644 Data/Dialog/distress/captain_holdout.gtx create mode 100644 Data/Dialog/distress/captain_no.gtx create mode 100644 Data/Dialog/distress/captain_nostuff.gtx create mode 100644 Data/Dialog/distress/captain_nothanks.gtx create mode 100644 Data/Dialog/distress/captain_okay.gtx create mode 100644 Data/Dialog/distress/captain_seeyou.gtx create mode 100644 Data/Dialog/distress/captain_showit.gtx create mode 100644 Data/Dialog/distress/captain_shuttle.gtx create mode 100644 Data/Dialog/distress/captain_whyglum.gtx create mode 100644 Data/Dialog/distress/captain_winsome.gtx create mode 100644 Data/Dialog/distress/haiku_cider.gtx create mode 100644 Data/Dialog/distress/haiku_signal.gtx create mode 100644 Data/Dialog/distress/lady_badNews.gtx create mode 100644 Data/Dialog/distress/lady_bigBullies.gtx create mode 100644 Data/Dialog/distress/lady_dispatched.gtx create mode 100644 Data/Dialog/distress/lady_help.gtx create mode 100644 Data/Dialog/distress/lady_insist.gtx create mode 100644 Data/Dialog/distress/lady_must.gtx create mode 100644 Data/Dialog/distress/lady_no.gtx create mode 100644 Data/Dialog/distress/lady_please.gtx create mode 100644 Data/Dialog/distress/lady_poorCaptain.gtx create mode 100644 Data/Dialog/distress/lady_saved.gtx create mode 100644 Data/Dialog/distress/lady_stay.gtx create mode 100644 Data/Dialog/distress/lady_surrender.gtx create mode 100644 Data/Dialog/distress/lady_wait.gtx create mode 100644 Data/Dialog/distress/meanwhile_1.gtx create mode 100644 Data/Dialog/distress/meanwhile_2.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_bringIt.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_canAnswerAny.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes1.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes2.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes3.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes4.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes5.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes6.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_computes7.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_detectIntruder.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_idiotz.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_justClose.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_lovzHelping.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_notNeedBRAINIAC.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_sezAsk.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_sorry.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_surrender.gtx create mode 100644 Data/Dialog/intro_bs/brainiac_wait.gtx create mode 100644 Data/Dialog/intro_bs/bs_actually.gtx create mode 100644 Data/Dialog/intro_bs/bs_answerSomeQuestions.gtx create mode 100644 Data/Dialog/intro_bs/bs_gotAPoint.gtx create mode 100644 Data/Dialog/intro_bs/bs_hangin1.gtx create mode 100644 Data/Dialog/intro_bs/bs_hangin3.gtx create mode 100644 Data/Dialog/intro_bs/bs_hangin5.gtx create mode 100644 Data/Dialog/intro_bs/bs_hereGoes.gtx create mode 100644 Data/Dialog/intro_bs/bs_idea.gtx create mode 100644 Data/Dialog/intro_bs/bs_justYouAnMe.gtx create mode 100644 Data/Dialog/intro_bs/bs_likeButter.gtx create mode 100644 Data/Dialog/intro_bs/bs_presto.gtx create mode 100644 Data/Dialog/intro_bs/bs_reallyHard.gtx create mode 100644 Data/Dialog/intro_bs/bs_segashuating.gtx create mode 100644 Data/Dialog/intro_bs/bs_showMe.gtx create mode 100644 Data/Dialog/intro_bs/bs_slippery.gtx create mode 100644 Data/Dialog/intro_bs/bs_well.gtx create mode 100644 Data/Dialog/intro_bs/bs_wellSee.gtx create mode 100644 Data/Dialog/intro_bs/grunt_hangin2.gtx create mode 100644 Data/Dialog/intro_bs/grunt_hangin4.gtx create mode 100644 Data/Dialog/intro_bs/guard_freeze.gtx create mode 100644 Data/Dialog/intro_bs/guard_moveAlong.gtx create mode 100644 Data/Dialog/intro_bs/monitor_oneSecond.gtx create mode 100644 Data/Dialog/intro_bs/monitor_onlyCroutons.gtx create mode 100644 Data/Dialog/intro_bs/monitor_openDoor.gtx create mode 100644 Data/Dialog/intro_bs/monitor_sorry.gtx create mode 100644 Data/Dialog/intro_bs/soldier_how.gtx create mode 100644 Data/Dialog/intro_bs/soldier_yellow.gtx create mode 100644 Data/Dialog/intro_haiku/flour_anySign.gtx create mode 100644 Data/Dialog/intro_haiku/flour_headHome.gtx create mode 100644 Data/Dialog/intro_haiku/flour_poorIambic.gtx create mode 100644 Data/Dialog/intro_haiku/flour_poorQuatrain.gtx create mode 100644 Data/Dialog/intro_haiku/flour_sabotage.gtx create mode 100644 Data/Dialog/intro_haiku/flour_sendBS.gtx create mode 100644 Data/Dialog/intro_haiku/haiku_askOkay.gtx create mode 100644 Data/Dialog/intro_haiku/haiku_enterPrison.gtx create mode 100644 Data/Dialog/intro_haiku/haiku_goAhead.gtx create mode 100644 Data/Dialog/intro_haiku/haiku_theyNever.gtx create mode 100644 Data/Dialog/intro_haiku/haiku_warn.gtx create mode 100644 Data/Dialog/intro_haiku/quatrain.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_anySign.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_clues.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_holdOn.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_letsGo.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_loseForSure.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_notJustYet.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_smartestThing.gtx create mode 100644 Data/Dialog/intro_haiku/skippy_woowee.gtx create mode 100644 Data/Dialog/main_intro/blank.gtx create mode 100644 Data/Dialog/main_intro/flour1.gtx create mode 100644 Data/Dialog/main_intro/flour2.gtx create mode 100644 Data/Dialog/main_intro/flour3.gtx create mode 100644 Data/Dialog/main_intro/flour4.gtx create mode 100644 Data/Dialog/main_intro/flour5.gtx create mode 100644 Data/Dialog/main_intro/flour6.gtx create mode 100644 Data/Dialog/main_intro/flour7.gtx create mode 100644 Data/Dialog/main_intro/gyro_cornered1.gtx create mode 100644 Data/Dialog/main_intro/gyro_cornered2.gtx create mode 100644 Data/Dialog/main_intro/gyro_cornered3.gtx create mode 100644 Data/Dialog/main_intro/gyro_cornered4.gtx create mode 100644 Data/Dialog/main_intro/intercom.gtx create mode 100644 Data/Dialog/main_intro/skippy1.gtx create mode 100644 Data/Dialog/main_intro/skippy2.gtx create mode 100644 Data/Dialog/main_intro/skippy3.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_brainiac1.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_brainiac2.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_brainiac3.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_flour1.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_flour2.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_gyves1.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_gyves1_2.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_haiku1.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_haiku2.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_skippy1.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_skippy1_2.gtx create mode 100644 Data/Dialog/main_intro/skippycapture_skippy2.gtx create mode 100644 Data/Dialog/pause.gtx create mode 100644 Data/Dialog/talk/Indeed..gtx create mode 100644 Data/Dialog/talk/l0000_hero_honey.gtx create mode 100644 Data/Dialog/talk/l0002_bees.gtx create mode 100644 Data/Dialog/talk/l0002_croutons.gtx create mode 100644 Data/Dialog/talk/l0002_hero_no.gtx create mode 100644 Data/Dialog/talk/l0002_hero_spray.gtx create mode 100644 Data/Dialog/talk/l0002_village.gtx create mode 100644 Data/Dialog/talk/l0003_aboutjeb.gtx create mode 100644 Data/Dialog/talk/l0003_hero_jeb.gtx create mode 100644 Data/Dialog/talk/l0003_nevermind.gtx create mode 100644 Data/Dialog/talk/l0003_shootfast.gtx create mode 100644 Data/Dialog/talk/l0003_wolves.gtx create mode 100644 Data/Dialog/talk/l0004_howdypilgrim.gtx create mode 100644 Data/Dialog/talk/l0004_mindyourbusiness.gtx create mode 100644 Data/Dialog/talk/l0004_sure.gtx create mode 100644 Data/Dialog/talk/l0006_avacado.gtx create mode 100644 Data/Dialog/talk/l0006_fixbridge.gtx create mode 100644 Data/Dialog/talk/l0006_fixed.gtx create mode 100644 Data/Dialog/talk/l0006_hero_sayagain.gtx create mode 100644 Data/Dialog/talk/l0008_findspray.gtx create mode 100644 Data/Dialog/talk/l0010_crate.gtx create mode 100644 Data/Dialog/talk/l0010_foundmask.gtx create mode 100644 Data/Dialog/talk/l0010_mattermitter.gtx create mode 100644 Data/Dialog/talk/l0010_sign.gtx create mode 100644 Data/Dialog/talk/l0103_bs_figures.gtx create mode 100644 Data/Dialog/talk/l0103_bs_where.gtx create mode 100644 Data/Dialog/talk/l0103_forest.gtx create mode 100644 Data/Dialog/talk/l0103_gethoney.gtx create mode 100644 Data/Dialog/talk/l0103_hero_honeyresponse.gtx create mode 100644 Data/Dialog/talk/l0103_honey.gtx create mode 100644 Data/Dialog/talk/l0103_learn.gtx create mode 100644 Data/Dialog/talk/l0103_seenyoubefore.gtx create mode 100644 Data/Dialog/talk/l0103_shootinfast.gtx create mode 100644 Data/Dialog/talk/l0103_snakebitekit.gtx create mode 100644 Data/Dialog/talk/l0103_wrangling.gtx create mode 100644 Data/Dialog/talk/l0105_hero_wrangling.gtx create mode 100644 Data/Dialog/talk/l0106_headnorth.gtx create mode 100644 Data/Dialog/talk/l0106_hero_seethem.gtx create mode 100644 Data/Dialog/talk/l0106_heysonny.gtx create mode 100644 Data/Dialog/talk/l0106_sure.gtx create mode 100644 Data/Dialog/talk/l0108_sign.gtx create mode 100644 Data/Dialog/talk/l0205_forgive.gtx create mode 100644 Data/Dialog/talk/l0205_idiot.gtx create mode 100644 Data/Dialog/talk/l0205_okay.gtx create mode 100644 Data/Dialog/talk/l0205_west.gtx create mode 100644 Data/Dialog/talk/l0205_what.gtx create mode 100644 Data/Dialog/talk/l0304_spores.gtx create mode 100644 Data/Dialog/talk/l0405_final_word.gtx create mode 100644 Data/Dialog/talk/l0405_hero_reaction.gtx create mode 100644 Data/Dialog/talk/l0405_ho.gtx create mode 100644 Data/Dialog/talk/l0612_clearance.gtx create mode 100644 Data/Dialog/talk/l0612_controls.gtx create mode 100644 Data/Dialog/talk/l0612_duke.gtx create mode 100644 Data/Dialog/talk/l0612_go.gtx create mode 100644 Data/Dialog/talk/l0612_plan.gtx create mode 100644 Data/Dialog/talk/l0612_return.gtx create mode 100644 Data/Dialog/talk/l0912_ba_givepassword.gtx create mode 100644 Data/Dialog/talk/l0912_hero_brokenteleport.gtx create mode 100644 Data/Dialog/talk/l0912_hero_losing.gtx create mode 100644 Data/Dialog/talk/l0912_hero_revolt.gtx create mode 100644 Data/Dialog/talk/l0912_hero_startteleport_nopassword.gtx create mode 100644 Data/Dialog/talk/l0912_hero_startteleport_password.gtx create mode 100644 Data/Dialog/talk/l0912_justit.gtx create mode 100644 Data/Dialog/talk/l0912_killpatsy.gtx create mode 100644 Data/Dialog/talk/l0912_needpassword.gtx create mode 100644 Data/Dialog/talk/l0912_sign.gtx create mode 100644 Data/Dialog/talk/l0912_welcome.gtx create mode 100644 Data/Dialog/talk/l1000_follow.gtx create mode 100644 Data/Dialog/talk/l1000_freeze.gtx create mode 100644 Data/Dialog/talk/l1000_needbomb.gtx create mode 100644 Data/Dialog/talk/l1000_toolate.gtx create mode 100644 Data/Dialog/talk/l1010_amking.gtx create mode 100644 Data/Dialog/talk/l1010_cannotleave.gtx create mode 100644 Data/Dialog/talk/l1010_readytogo.gtx create mode 100644 Data/Dialog/talk/l1012_hero_readbook.gtx create mode 100644 Data/Dialog/talk/l1212_anytime.gtx create mode 100644 Data/Dialog/talk/l1212_makesure.gtx create mode 100644 Data/Dialog/talk/l1212_suckstobehim.gtx create mode 100644 Data/Dialog/talk/l1212_yeah.gtx create mode 100644 Data/Dialog/wedding/bs_driving.gtx create mode 100644 Data/Dialog/wedding/bs_explain.gtx create mode 100644 Data/Dialog/wedding/bs_explain2.gtx create mode 100644 Data/Dialog/wedding/bs_palace.gtx create mode 100644 Data/Dialog/wedding/captain_cake.gtx create mode 100644 Data/Dialog/wedding/captain_camp.gtx create mode 100644 Data/Dialog/wedding/captain_dosomething.gtx create mode 100644 Data/Dialog/wedding/captain_interrupt.gtx create mode 100644 Data/Dialog/wedding/captain_key.gtx create mode 100644 Data/Dialog/wedding/captain_okay.gtx create mode 100644 Data/Dialog/wedding/captain_tellyouwhat.gtx create mode 100644 Data/Dialog/wedding/captain_thanks.gtx create mode 100644 Data/Dialog/wedding/captain_thankyou.gtx create mode 100644 Data/Dialog/wedding/captain_why.gtx create mode 100644 Data/Dialog/wedding/flour_heyguys.gtx create mode 100644 Data/Dialog/wedding/gyro_ba.gtx create mode 100644 Data/Dialog/wedding/gyro_bs.gtx create mode 100644 Data/Dialog/wedding/gyro_difficult.gtx create mode 100644 Data/Dialog/wedding/gyro_haiku.gtx create mode 100644 Data/Dialog/wedding/gyro_notsofast.gtx create mode 100644 Data/Dialog/wedding/gyro_notyummy.gtx create mode 100644 Data/Dialog/wedding/gyro_recall.gtx create mode 100644 Data/Dialog/wedding/gyro_reveals.gtx create mode 100644 Data/Dialog/wedding/gyro_surrender.gtx create mode 100644 Data/Dialog/wedding/hero_reasons.gtx create mode 100644 Data/Dialog/wedding/lady_byallmeans.gtx create mode 100644 Data/Dialog/wedding/lady_dontbesilly.gtx create mode 100644 Data/Dialog/wedding/lady_radio.gtx create mode 100644 Data/Dialog/wedding/preacher_blah.gtx create mode 100644 Data/Dialog/wedding/preacher_married.gtx create mode 100644 Data/Dialog/wedding/preacher_pronounce.gtx create mode 100644 Data/Dialog/wedding/preacher_reasons.gtx create mode 100644 Data/Dialog/wedding/preacher_takebegonia.gtx create mode 100644 Data/Dialog/wedding/preacher_takesack.gtx create mode 100644 Data/Music/alarm.gbm.bin create mode 100644 Data/Music/beehive.gbm.bin create mode 100644 Data/Music/cowboy.gbm.bin create mode 100644 Data/Music/death.gbm.bin create mode 100644 Data/Music/fgbwar.gbm.bin create mode 100644 Data/Music/frosty.gbm.bin create mode 100644 Data/Music/hoedown.gbm.bin create mode 100644 Data/Music/intro_cinema.gbm.bin create mode 100644 Data/Music/jazzy.gbm.bin create mode 100644 Data/Music/jungle.gbm.bin create mode 100644 Data/Music/lady_flower.gbm.bin create mode 100644 Data/Music/main_in_game.gbm.bin create mode 100644 Data/Music/makefile create mode 100644 Data/Music/maybe_haiku.gbm.bin create mode 100644 Data/Music/moon_base_ba.gbm.bin create mode 100644 Data/Music/moon_base_haiku.gbm.bin create mode 100644 Data/Music/mysterious.gbm.bin create mode 100644 Data/Music/shroom.gbm.bin create mode 100644 Data/Music/something_happy.gbm.bin create mode 100644 Data/Music/spaceish.gbm.bin create mode 100644 Data/Music/takeoff.gbm.bin create mode 100644 Data/Music/wedding.gbm.bin create mode 100644 Data/Tiles/bgTiles1-228.bin create mode 100644 Data/Tiles/bgTiles1-256.bin create mode 100644 Data/Tiles/bgTiles1024-1279.bin create mode 100644 Data/Tiles/bgTiles1280-1535.bin create mode 100644 Data/Tiles/bgTiles1536-1791.bin create mode 100644 Data/Tiles/bgTiles1792-2047.bin create mode 100644 Data/Tiles/bgTiles257-512.bin create mode 100644 Data/Tiles/bgTiles513-768.bin create mode 100644 Data/Tiles/bgTiles769-979.bin create mode 100644 Data/Tiles/fgTiles2048-2219.bin create mode 100644 Data/Tiles/fgTiles2048-2253.bin create mode 100644 Data/Tiles/fgTiles2048-2292.bin create mode 100644 Data/Tiles/fgTiles2048-2296.bin create mode 100644 Data/Tiles/fgTiles2048-2297.bin create mode 100644 Data/Tiles/fgTiles2048-2300.bin create mode 100644 Data/Tiles/fgTiles2048-2302.bin create mode 100644 Data/Tiles/fgTiles2304-2559.bin create mode 100644 Data/discolights.dat create mode 100644 Data/font.bin create mode 100644 Media/FGBPreview.mp4 create mode 100644 Source/L0313.asm create mode 100644 Source/MAIN.ASM create mode 100644 Source/USER.ASM create mode 100644 Source/cinema.asm create mode 100644 Source/class.asm create mode 100644 Source/class.inc create mode 100644 Source/defs.inc create mode 100644 Source/gfx.asm create mode 100644 Source/gfx.inc create mode 100644 Source/items.inc create mode 100644 Source/l0000.asm create mode 100644 Source/l0001.asm create mode 100644 Source/l0002.asm create mode 100644 Source/l0003.asm create mode 100644 Source/l0004.asm create mode 100644 Source/l0005.asm create mode 100644 Source/l0006.asm create mode 100644 Source/l0007.asm create mode 100644 Source/l0008.asm create mode 100644 Source/l0009.asm create mode 100644 Source/l0010.asm create mode 100644 Source/l0011.asm create mode 100644 Source/l0012.asm create mode 100644 Source/l0013.asm create mode 100644 Source/l0014.asm create mode 100644 Source/l0015.asm create mode 100644 Source/l0103.asm create mode 100644 Source/l0104.asm create mode 100644 Source/l0105.asm create mode 100644 Source/l0106.asm create mode 100644 Source/l0107.asm create mode 100644 Source/l0108.asm create mode 100644 Source/l0109.asm create mode 100644 Source/l0110.asm create mode 100644 Source/l0111.asm create mode 100644 Source/l0112.asm create mode 100644 Source/l0113.asm create mode 100644 Source/l0114.asm create mode 100644 Source/l0115.asm create mode 100644 Source/l0200.asm create mode 100644 Source/l0201.asm create mode 100644 Source/l0203.asm create mode 100644 Source/l0204.asm create mode 100644 Source/l0205.asm create mode 100644 Source/l0211.asm create mode 100644 Source/l0212.asm create mode 100644 Source/l0213.asm create mode 100644 Source/l0214.asm create mode 100644 Source/l0215.asm create mode 100644 Source/l0300.asm create mode 100644 Source/l0301.asm create mode 100644 Source/l0302.asm create mode 100644 Source/l0303.asm create mode 100644 Source/l0304.asm create mode 100644 Source/l0305.asm create mode 100644 Source/l0306.asm create mode 100644 Source/l0307.asm create mode 100644 Source/l0308.asm create mode 100644 Source/l0309.asm create mode 100644 Source/l0310.asm create mode 100644 Source/l0311.asm create mode 100644 Source/l0312.asm create mode 100644 Source/l0314.asm create mode 100644 Source/l0315.asm create mode 100644 Source/l0400.asm create mode 100644 Source/l0401.asm create mode 100644 Source/l0402.asm create mode 100644 Source/l0403.asm create mode 100644 Source/l0404.asm create mode 100644 Source/l0405.asm create mode 100644 Source/l0406.asm create mode 100644 Source/l0407.asm create mode 100644 Source/l0408.asm create mode 100644 Source/l0409.asm create mode 100644 Source/l0410.asm create mode 100644 Source/l0411.asm create mode 100644 Source/l0412.asm create mode 100644 Source/l0413.asm create mode 100644 Source/l0500.asm create mode 100644 Source/l0501.asm create mode 100644 Source/l0502.asm create mode 100644 Source/l0503.asm create mode 100644 Source/l0504.asm create mode 100644 Source/l0505.asm create mode 100644 Source/l0506.asm create mode 100644 Source/l0507.asm create mode 100644 Source/l0508.asm create mode 100644 Source/l0509.asm create mode 100644 Source/l0510.asm create mode 100644 Source/l0512.asm create mode 100644 Source/l0600.asm create mode 100644 Source/l0601.asm create mode 100644 Source/l0602.asm create mode 100644 Source/l0603.asm create mode 100644 Source/l0604.asm create mode 100644 Source/l0605.asm create mode 100644 Source/l0606.asm create mode 100644 Source/l0607.asm create mode 100644 Source/l0608.asm create mode 100644 Source/l0609.asm create mode 100644 Source/l0610.asm create mode 100644 Source/l0612.asm create mode 100644 Source/l0700.asm create mode 100644 Source/l0701.asm create mode 100644 Source/l0702.asm create mode 100644 Source/l0703.asm create mode 100644 Source/l0704.asm create mode 100644 Source/l0705.asm create mode 100644 Source/l0706.asm create mode 100644 Source/l0707.asm create mode 100644 Source/l0708.asm create mode 100644 Source/l0709.asm create mode 100644 Source/l0710.asm create mode 100644 Source/l0711.asm create mode 100644 Source/l0712.asm create mode 100644 Source/l0800.asm create mode 100644 Source/l0801.asm create mode 100644 Source/l0802.asm create mode 100644 Source/l0803.asm create mode 100644 Source/l0804.asm create mode 100644 Source/l0805.asm create mode 100644 Source/l0806.asm create mode 100644 Source/l0807.asm create mode 100644 Source/l0808.asm create mode 100644 Source/l0809.asm create mode 100644 Source/l0810.asm create mode 100644 Source/l0811.asm create mode 100644 Source/l0812.asm create mode 100644 Source/l0900.asm create mode 100644 Source/l0901.asm create mode 100644 Source/l0902.asm create mode 100644 Source/l0903.asm create mode 100644 Source/l0904.asm create mode 100644 Source/l0905.asm create mode 100644 Source/l0906.asm create mode 100644 Source/l0907.asm create mode 100644 Source/l0908.asm create mode 100644 Source/l0909.asm create mode 100644 Source/l0910.asm create mode 100644 Source/l0911.asm create mode 100644 Source/l0912.asm create mode 100644 Source/l1000.asm create mode 100644 Source/l1001.asm create mode 100644 Source/l1002.asm create mode 100644 Source/l1003.asm create mode 100644 Source/l1004.asm create mode 100644 Source/l1005.asm create mode 100644 Source/l1006.asm create mode 100644 Source/l1007.asm create mode 100644 Source/l1008.asm create mode 100644 Source/l1009.asm create mode 100644 Source/l1010.asm create mode 100644 Source/l1011.asm create mode 100644 Source/l1012.asm create mode 100644 Source/l1100.asm create mode 100644 Source/l1101.asm create mode 100644 Source/l1102.asm create mode 100644 Source/l1103.asm create mode 100644 Source/l1104.asm create mode 100644 Source/l1105.asm create mode 100644 Source/l1111.asm create mode 100644 Source/l1112.asm create mode 100644 Source/l1200.asm create mode 100644 Source/l1201.asm create mode 100644 Source/l1202.asm create mode 100644 Source/l1203.asm create mode 100644 Source/l1204.asm create mode 100644 Source/l1212.asm create mode 100644 Source/l1300.asm create mode 100644 Source/l1301.asm create mode 100644 Source/l1302.asm create mode 100644 Source/l1304.asm create mode 100644 Source/l1312.asm create mode 100644 Source/l1400.asm create mode 100644 Source/l1401.asm create mode 100644 Source/l1402.asm create mode 100644 Source/l1403.asm create mode 100644 Source/l1412.asm create mode 100644 Source/l1500.asm create mode 100644 Source/l1502.asm create mode 100644 Source/l1503.asm create mode 100644 Source/l1504.asm create mode 100644 Source/l1512.asm create mode 100644 Source/levels.inc create mode 100644 Source/macro.inc create mode 100644 Source/map.asm create mode 100644 Source/music.asm create mode 100644 Source/object.asm create mode 100644 Source/sample.asm create mode 100644 Source/start.inc create mode 100644 Tools/MakeGBM/makegbm.cpp create mode 100644 Tools/MakeGBM/makegbm.exe create mode 100644 Tools/MakeGBM/makegbm.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ffc6eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.rogo +*.swp +.DS_Store +Build diff --git a/Assets/Dialog/Landing/landing.script b/Assets/Dialog/Landing/landing.script new file mode 100644 index 0000000..314865a --- /dev/null +++ b/Assets/Dialog/Landing/landing.script @@ -0,0 +1,84 @@ +hero_checkgate +haiku: +Did I see movement||Near the gate that|lies yonder||I should look|closely +bs: +Whoa! Did Captain|Flour just go|through that gate?|I'd better take a|closer look. +any: +This sucks.|Where's Captain|Flour? I'd better|check out that gate. + +guard_dontcomecloser +Ah...Okay, don't|come much closer! + +hero_whoareyou +bs: +What's all this? +haiku: +Oh pretty flowers||That bar the path|before me||Tell me who you are +any: +Who're you? + +guard_pansies +We're the Queen's|Royal Pansies. + +hero_move +haiku: +Bright, fragile|Pansy||Gentle child of|earth and sun||Make a path for me +bs: +Oh I'm sure you|are! Move it or lose|it. +any: +Move! I'm going|after my Captain! + +guard_notpossible +That, ah, may not|be possible. Lady|Flower told us to|guard this trail.|And guard it we|will, with our...ah...|guns, if necessary! + +hero_whatever +bs: +You, your guns,|and what army? Oh,|that army! Ya know,|now that I think|about it, I heard|those whatchacallit|blue pansies saying|smack about the|purple dudes. +haiku: +I weep for you all||To resist is to|perish||For I am Haiku +any: +Whatever! + +guard_really +Really? + +bs_absolutely +Absolutely. Now|it's none of my|business but you|better straighten|things out and show|'em who's in charge|before things get|out of hand. + +guard_yeah +Yeah, you're|right! Everybody|freeze! + +hero_closedgate +haiku: +The gate, tightly|locked||I must return to the|ship||The Appomattox +bs: +Ooh nasty, they|locked the gate! I'd|better go tell the|homeboys back at the|ship. +any: +The gate's locked!|I'd better go back|to the Appomattox|and tell them what|happened. + +hero_report +haiku: +The Captain is|gone||The gate is closed|and locked||We must fly after +bs: +Dudes, Captain got|snatched by that|flower chick and the|gate they went|through is locked,|but we could still|catch them if we|flew after them|right now. +any: +Guys! That crazy|weed has kidnapped|our Captain! Let's|fly after them! + +bs_tookkey +But Captain Flour|took the ignition|key! + +ba_whataboutspare +What about the|spare? + +bs_wasspare +That was the|spare!! + +ba_guns +Well the guns|still work. + +bs_finelotofgood +Fine lot of good|that will do! + +bs_cool +Cool... + diff --git a/Assets/Dialog/SwampThang/SwampThang.script b/Assets/Dialog/SwampThang/SwampThang.script new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Dialog/apocalypse/apocalypse.script b/Assets/Dialog/apocalypse/apocalypse.script new file mode 100644 index 0000000..d016c83 --- /dev/null +++ b/Assets/Dialog/apocalypse/apocalypse.script @@ -0,0 +1,63 @@ +l1104_whereisgyro +Brainstorming|begins|Where did the|General go|In his tiny ship? + +l1104_station +Looks like there's|a Crouton space|station not too far|from here...| + +l1104_apocalypse +...Space Station|"Apocalypse." I'll|bet he went there!|| + +l1104_letsgo +I'll show them an|apocalypse! Let's|go!|| + +l0012_bombs +bs: +This must be the|command core. It'll|have to wait,|though: sensors are|picking up four|bombs planted around|the station! I'd|better disarm them! +haiku: +See the command|core||Station scans reveal|four bombs||I must disarm them +ba: +This is the|command core.|Scanners show four|bombs planted around|the station. That's|four places I have|to go and rough|things up. Better|get started. + +l0012_defused +bs: +I defused this|bomb; on to the|next! +haiku: +This bomb is|defused||But it is not the|last one||On to another +ba: +This bomb's|disarmed. Where's|the next one? + +l0012_alldefused +bs: +That's the last! I|haven't seen Gyro|though; I'd better|get to the command|core and try to|track him from|there. +haiku: +That bomb was the|last||Now it's to the|command core||Need to find Gyro +ba: +I better head over|to the command core|and find Gyro. He's|outta bombs and he's|outta time. + +l1204_gyro_notthere +You've reached the|Command Core. Too|bad I'm not there!|I'm on Space Station|Armageddon far away! + +l1204_gyro_ofcourse +Apocalypse would|be the obvious place|for me to... retreat|to, so of course I|didn't go there! + +l1204_gyro_unfortunately +It all goes to|show why I'm a gen-|eral and you're not!|I'd love to chat but|unfortunately... + +l1204_gyro_explode +...the space station|is about to explode!|There's too much top|secret information|stored there. + +l1204_gyro_escape +Don't worry,|there's plenty of|time to escape. You|have about... 5|seconds!Hah-hah-hah! + +l1204_gyro_button +Hah-ha! Ha! Hum.|Actually, could you|press that blinking|red button over|there? Oh darn... + +l1204_gotitall +Scan shows inbound|Crouton warships!|They must be ticked|about losing that|data! We get it all? + +l1204_datahere +The data is here|All twelve|exabytes of it|That's really a lot| + +l1204_letsroll +Tight! Let's roll!|||| + diff --git a/Assets/Dialog/appomattox/appomattox.script b/Assets/Dialog/appomattox/appomattox.script new file mode 100644 index 0000000..a13c23d --- /dev/null +++ b/Assets/Dialog/appomattox/appomattox.script @@ -0,0 +1,3 @@ +pause +Paused||Press B to continue| + diff --git a/Assets/Dialog/distress/distress.script b/Assets/Dialog/distress/distress.script new file mode 100644 index 0000000..2dab3b8 --- /dev/null +++ b/Assets/Dialog/distress/distress.script @@ -0,0 +1,90 @@ +lady_badNews +Bee, we just heard|some distessing|news.|| + +lady_dispatched +The Council of|Planet B-12 has dis-|patched a starship|to the Crouton|Homeworld. + +lady_surrender +They're going to|sign a surrender|agreement. And they|sent Captain Flour|to do it! + +lady_bigBullies +Those Croutons are|nothing if not a|bunch of brutish|louts.| + +lady_poorCaptain +Our poor captain|will get himself|killed! We must take|action. Prepare our|royal yacht! + +captain_cider +Haiku, did you|remember the apple|cider?|| + +haiku_cider +I have the cider|That glistening gold|liquid|To warm our cold|souls + +captain_whyglum +Great! BA, why do|you look so glum?||| + +BA_surrendering +It sucks that|we're surrendering|after only two|weeks!| + +captain_winsome +Well, you win|some, you lose some.|BS, where are we|right now?| + +bs_nearKiwi +Near Planet Kiwi|and you-know-who.|Oh hello, there's|something on the|radar up ahead. + +haiku_signal +I have a signal|It's an urgent|distress call|From Lady Flower| + +captain_showit +Uh oh! Show it on|the big screen!||| + +lady_help +Help, Captain|Flour! Our ship is|being attacked by a|space gang!| + +captain_goodness +Oh my goodness!|We're on our way!||| + +lady_saved +Oh Captain, you|scared those ships|away just in time!|You saved us!| + +captain_seeyou +I did? Okay, see|you around!||| + +lady_wait +No, wait! Um, our|ship is badly|damaged! Can you|take us home?| + +captain_holdout +Do you think you|can hold out for a|few days? I kinda|have some important|business. + +lady_no +What?! No! We must|get back soon.|Sorry.|| + +captain_shuttle +BS, send over a|shuttle to pick up|Lady Flower. Haiku,|warm up some of that|apple cider! + +lady_stay +Thank you so much!|Can you stay?||| + +captain_nostuff +No, I have to go|do some stuff.||| + +lady_please +I would really|enjoy your company...|please stay.|| + +captain_nothanks +No thanks.|||| + +lady_must +You must stay.|||| + +captain_no +No.|||| + +lady_insist +We insist you|stay.||| + +captain_okay +Okay.|||| + +ba_goneawhile +The Captain's been|gone a while.|Somebody should go|check on him!| + diff --git a/Assets/Dialog/intro_bs/intro_bs.script b/Assets/Dialog/intro_bs/intro_bs.script new file mode 100644 index 0000000..6a2c483 --- /dev/null +++ b/Assets/Dialog/intro_bs/intro_bs.script @@ -0,0 +1,138 @@ +soldier_how +That entrance is|guarded! So how you|going to get in? + +bs_likeButter +Like butter,my|violent violet|friend. + +soldier_yellow +You mean yellow? + +bs_slippery +No,I mean|slippery! Watch|this... + +guard_freeze +Freeze milksop!|You're trespassing|on Crouton|territory! + +bs_actually +Actually I'm|turning myself in.|If you could just|let me by...? + +guard_moveAlong +That's different!|Move along! + +brainiac_detectIntruder +BRAINAIC detectz|intruder! (:-o + +bs_segashuating +Hey Brain, what's|up? How's it|segashuating for ya?|Don't get too comfy,|'cause I'm coming to|unplug your freakish|huge brain! + +brainiac_bringIt +BRAINIAC sez|bring it on!!|:) + +monitor_onlyCroutons +Freeze! What are|you doing here? Only|Croutons can go into|the computer room!|Move along! + +bs_idea +Hmm what's this?|Some crates,a|paintbrush,and some|paint... let's see,|that gives me an|idea! I'll just|empty this crate...|paint some eyes...|mouth... bad teeth...|and finally: + +bs_presto +Presto!|I'm a Crouton! + +bs_hangin1 +Yo homeslice,|what's up? + +grunt_hangin2 +Oh,hey there... I|haven't seen you|around before,|what's your name? + +bs_hangin3 +ba: +The name's CS,man.|So how's the war|going anyways? +any: +The name's BS,bro,|good to meet you! So|what's the word on|the war effort? + +grunt_hangin4 +Oh, it's good.|Their soldiers are|pretty tough but|their generals don't|have much nerve.|They'll probably|give up pretty soon. + +bs_hangin5 +You're tellin' me!|See ya round,man. + +monitor_openDoor +Hey there soldier!|Going in the|computer room? Hold|on... okay,door's|open! + +brainiac_wait +BRAINIAC sez|wait!! BRAINIAC|sez thiz croutonz an|imposter!! :( + +monitor_sorry +Sorry BRAINIAC!|Hold on, we'll get|him! + +brainiac_justClose +BRAINIAC sez no,|just cloze the|door!!! + +monitor_oneSecond +Okay, we'll just|grab him first! + +brainiac_idiotz +BRAINIAC thinkz|ur all idiotz!|:( + +bs_justYouAnMe +Okay Brainy it's|just you and me now.|You've sure been|causing a lot of|trouble 'round here. + +brainiac_sorry +BRAINIAC sorry.|:( + +bs_answerSomeQuestions +I'll bet! My|orders are to unplug|you for good but I|might just leave you|up and running if|you answer some|questions. + +brainiac_lovzHelping +BRAINIAC lovz|helping hiz|friendz.:) + +bs_showMe +Show me what you|know about my|planet's defenses.|Hmm that's pretty|accurate. Now show|me all the Crouton|forces. Ouch,that's|a lot. + +brainiac_notNeedBRAINIAC +BRAINIAC sez|Croutonz not|really need|BRAINIAC.:) BRAINIAC|sez Croutonz could|capture Planet B12|in their sleep.:) + +bs_gotAPoint +Hmm you've got a|point. Okay,one|more question - it's|a tough one though. + +brainiac_sezAsk +BRAINIAC sez ask|the question.:) + +bs_reallyHard +I dunno,this one's|really hard. + +brainiac_canAnswerAny +BRAINIAC can|answer any|question! :) + +bs_hereGoes +Here goes then:|how can we stop the|Croutons from taking|over Planet B12? + +brainiac_computes1 +###BRAINIAC idz|problem az|insanely NP-Hard :( + +brainiac_computes2 +###BRAINIAC|shutz down|non-essential|programz :) + +brainiac_computes3 +###BRAINIAC|overclockz self|:) + +brainiac_computes4 +###BRAINIAC|parallelizez|problem :) + +brainiac_computes5 +###BRAINIAC|uploadz data to|Crouton Net :) + +brainiac_computes6 +###BRAINIAC|checkz hiz email|:) + +brainiac_computes7 +###BRAINIAC| down-loadz data|from Crouton net :) + +bs_well +Well? + +brainiac_surrender +BRAINIAC sez|surrender iz the|only option. :( + +bs_wellSee +We'll see about|that! + diff --git a/Assets/Dialog/intro_haiku/intro_haiku.script b/Assets/Dialog/intro_haiku/intro_haiku.script new file mode 100644 index 0000000..e9b1fd5 --- /dev/null +++ b/Assets/Dialog/intro_haiku/intro_haiku.script @@ -0,0 +1,69 @@ +haiku_warn +bs: +Like the early|nightingale||I cry:||Watch out! +any: +Be careful my|friends!||The radar indicates|that||Enemies are near + +haiku_askOkay +bs: +Like black ravens||The bombs burst||Are you alive||Or what? +any: +Quatrain! Iambic!||Did you get hurt|over there||Or are you okay? + +quatrain +Well I can tell|you only this:|Our situation now|seems quite dire -|For though those|pesky bombs did miss|They seem to've|open'd a river of|fire! + +haiku_goAhead +bs: +Go on without me||I'll find a way||Like the three|fingered sea. +any: +You go on ahead.||I'll find another|way in||To the Crouton base. + +haiku_enterPrison +bs: +There over there||I see Major Skippy|in the cell,||Imprisoned.||Perhaps I can free|him if the guards||Don't see me. +any: +There's Major|Skippy||If the guards do not|see me||Perhaps I can free|him. + +skippy_clues +Howdy son! If|you can just hit|this yeller button|we can get out of|here. Mind those|guards, though, they|got eyes in their|backs! + +skippy_letsGo +Ho yeah I'm glad|to see you!|Let's hightail it!! + +skippy_holdOn +Oh hey there!|Sure is a lot of|commotion round|here... maybe you|should come back|when things have|settled down! + +skippy_woowee +Woowee that was a|close one!||| + +flour_anySign +Any sign|of Quatrain and|Iambic Pentameter?|| + +haiku_theyNever +They never|returned... I fear|they have met their|fate... We will mourn|their loss. + +flour_poorIambic +Oh poor Iambic|Pentameter! You|always knew how to|set my watch! I'll|miss you! + +flour_poorQuatrain +And poor Quatrain!|You made the most|sense of all the|ninjas! I'll miss|you too! + +flour_headHome +Well I guess it's|time to head back|home.|| + +skippy_notJustYet +Not just yet! We|have to get rid of|that infernal|computer of theirs!| + +skippy_smartestThing +I reckon it's just|about the smartest|thing in this whole|galaxy!| + +skippy_loseForSure +We'll lose for|sure if we let it|keep thinkin' up|plans like it does.| + +flour_sendBS +Okay let's send|BS! He's our best|computer guy and|he's really clever.| + +flour_sabotage +He can sabotage|the computer! + diff --git a/Assets/Dialog/main_intro/main_intro.script b/Assets/Dialog/main_intro/main_intro.script new file mode 100644 index 0000000..10387c7 --- /dev/null +++ b/Assets/Dialog/main_intro/main_intro.script @@ -0,0 +1,84 @@ +flour1 +As you all know,|the war with the|Croutons is going a|tad bit worse than|we had hoped for. + +flour2 +Here's our|position:||| + +flour3 +And our spies say|the Croutons are|here:|| + +flour4 +They're about to|launch their next|attack from a base|on this small moon|called Cobala: + +skippy1 +Captain Flour,|that there moon|looks kinda|familiar...| + +flour5 +That's our home|planet's moon, Major|Skippy!|| + +skippy2 +I figgered I seen|it somewhere.||| + +flour6 +So if we're going|to do something we|should do it now.|Major Skippy, your|orders? + +skippy3 +I reckon let's|round up a bunch of|fellers and go shoot|up the moon base!| + +flour7 +Yes, Sir!|||| + +intercom +"Attention! We are|approaching the LZ.|Landing party|proceed to the|dropship.|Red alert!"|(Press B) + +gyro_cornered1 +Okay! Okay!|I give up!||| + +gyro_cornered2 +I guess we're no|match for the mighty|forces of Planet|B12!| + +gyro_cornered3 +I'm General Gyro.|Tell you what:|I'll trade you some|information in|return for my life. + +gyro_cornered4 +I'll show your|commanding officer|all the secret|battle plans that|are in our computer! + +blank +|||| + +skippycapture_gyves1 +This is|BRAINIAC, our|supercomputer.|| + +skippycapture_gyves1_2 +BRAINIAC, why|don't you tell|our new friends here|anything they want|to know? + +skippycapture_brainiac1 +BRAINIAC givez it|to you straight.|:)|| + +skippycapture_skippy1 +Well hot dang!|||| + +skippycapture_skippy1_2 +So, "BRAINIAC,"|just what were you|fellers plannin to|do here on the moon|base? + +skippycapture_brainiac2 +BRAINIAC sez we|gonna capture big|B12 officer, gonna|make him tell us|lotz of stuff :) + +skippycapture_skippy2 +And just how were|you thinkin you'd do|that?|| + +skippycapture_brainiac3 +BRAINIAC sez gonna|make him think he|capture the base,|gonna trap him|later. ROFL! :) + +skippycapture_flour1 +Oh my gosh,|Major Skippy's been|captured! We have to|rescue him! Haiku?| + +skippycapture_haiku1 +Yes, Sir, what is|it?|My group and I stand|ready|To do our duty. + +skippycapture_flour2 +Take your merry|band of ninjas down|to the moon base,|sneak in, and rescue|Major Skippy! + +skippycapture_haiku2 +I will take|Quatrain,|Iambic Pentameter,|And perhaps|Free Verse. + diff --git a/Assets/Dialog/pause.script b/Assets/Dialog/pause.script new file mode 100644 index 0000000..a13c23d --- /dev/null +++ b/Assets/Dialog/pause.script @@ -0,0 +1,3 @@ +pause +Paused||Press B to continue| + diff --git a/Assets/Dialog/talk/talk.script b/Assets/Dialog/talk/talk.script new file mode 100644 index 0000000..8b3a42c --- /dev/null +++ b/Assets/Dialog/talk/talk.script @@ -0,0 +1,409 @@ +l0000_hero_honey +bs: +Let's see what old|queenie has tucked|away... aha, some|honey! I'll just|snag that! +haiku: +Is that candy? No.||Soda? No. Fruit? No.|Wax? No.||It is sweet honey +any: +What's this? I got|stung all those|times for lousy|honey? Give me a|break! + +l0002_bees +Hey. Watch out,|there's bees|everywhere. You|might think about|getting some bug|spray to keep them|disoriented. + +l0002_hero_spray +bs: +Not a problem,|friend-o; those bees|mess with me and|they'll be in a|world of hurt. Where|did you say the bug|spray was again? +haiku: +Stealth and clever|tricks||Is the ninja way of|life||Where to find the|spray +ba: +How can I get|some? + +l0002_village +There's some at my|village down south,|past Sunset. I'd|show you myself but|I have to hide out|and shoot some folks|if they walk by.|Have you met anyone|named Biss, Bah, or...|what was it... Poem? + +l0002_hero_no +bs: +Nope! +haiku: +Well-no not at all||No... no. I haven't|seen them||Even a little +ba: +Why do you wanna|shoot 'em? + +l0002_croutons +ba: +Oh there's a|secret deal going on|between us tree-folk|and the croutons...|very hush-hush. You|didn't hear this|from me but I|wouldn't be|surprised if that|insufferable Lady|Flower and her lot|aren't around too|much longer! +any: +Oh well; keep an|eye out! + +l0003_wolves +Howdy, partner.|Billy said he saw|some wolves slinkin'|about, so keep an|eye out. Sneaky|devils, those|wolves! + +l0003_shootfast +Out here in the|green pastures life|can be pretty rough|and tumble. Between|the wolves and the|bees ya have ter|shoot fast or die|tryin'. If yer|lookin' fer lessons|ol' Jeb can learn|ya. + +l0003_hero_jeb +haiku: +Jeb? Jeb did you|say?||Tell me more about|this Jeb||Where can he be|found? +any: +Jeb? + +l0003_nevermind +Never mind, ya|don't look the type. + +l0003_aboutjeb +Yep, ol' Jeb. He's|one acre over|eastwise. + +l0004_howdypilgrim +Howdy, pilgrim.|This here's the|start of the green|pastures, loveliest|country ya ever|seen! We been havin'|some problems with|Trakktors lately-|would ya like ter|help out? + +l0004_sure +bs: +Those blue sucky|things? Sure, I'll|help. +haiku: +The Trakktors are|strange||They are blue and|they vacuum||So I will help you +any: +Whatever. + +l0004_mindyourbusiness +Well I reckon ya|can help best by|mindin' yer own|business and movin'|along! We don't need|a bunch of strangers|makin' a fuss. And|we don't take kindly|ter sheep-rustlers|'round here neither! + +l0006_avacado +Ich zerquetsche|Sie mag ein avacado! + +l0006_hero_sayagain +bs: +Exsqueeze me? +haiku: +What language is|that?||I am a simple Ninja||I don't understand +any: +How about I crush|your face, rock-|brain?! + +l0006_fixbridge +Oh, so sorry! We|were on our way to|fix bridge when we|find tool shed|infested with bees!|Can you help us get|rid of bees? Middle|house. + +l0006_fixed +Thank you for|getting rid of bees|long enough for we|to grab tools! We|fixed the bridge,|you can cross it!|Kreuzen Sie es, wenn|Sie sich trauen. + +l0008_findspray +bs: +Ah, some cheapo|bug spray. The label|reads: intoxicates|bees and other bugs|while providing a|full day's supply of|vitamin C! +haiku: +I take this bug|spray||And somewhere along|the path||The bees are|confused +any: +Bug spray. Can.|Cool. + +l0010_mattermitter +bs: +Wonder-Port 400|mattermitter:|activate! +haiku: +Oh see: a lever||I wonder what it|will do?||Why don't we find|out? +any: +Clear!!! + +l0010_foundmask +bs: +Here's a gas mask|shaped to fit... a|giant mouse head!|Weird! Fits okay on|me though. +haiku: +What hidden|meaning||And unspoken tragedy||A mouse head gas|mask +any: +Here's a gas mask.|I'll save it for|later. + +l0010_crate +bs: +What's this? A|bunch of ammo. Way|too big for my gun...|I'll leave it. +haiku: +A box of ammo||Extremely large|caliber||Not interested +ba: +Hmm, a crate of|Magnus .50 caliber|high-impact rounds.|Lock and load! + +l0105_hero_wrangling +bs: +Oh no way, there's|a wrangling iron|under the hive!|Score! +haiku: +What's that on the|ground||It's metallic and|twisted||A wrangling iron +any: +What the heck is|this under the hive?|It's a stupid|wrangling iron! + +l0103_shootinfast +Jeb be my name,|shootin' fast be my|game. + +l0103_wrangling +Jeb be my name,|shootin' fast be my|game. If ya want|ter learn I can|teach ya, 'ceptin'|I'm too worried|about losin' my|wranglin' iron ter|concentrate right|now. + +l0103_bs_where +Okay first off|what exactly is a|wrangling iron? You|know what: never|mind. I don't want|to know. Just tell|me where this thing|is and I'll go grab|it for you. + +l0103_forest +Well, thank ya|kindly! It so|happens I let it|drop beneath a bee|hive in the rainy|forest. + +l0103_bs_figures +Bees. Typical. + +l0103_learn +There's my|wranglin' iron!|Thank ya! Lemme|learn ya how ter|shoot fast. First ya|drawl like .this.|and then you shoot|like .that. Got it?|See ya round,|partner! + +l0103_honey +My name's Lil' Ed.|I sure do love|honey! Lordy, but I|love that stuff! And|do ya know what the|best honey of all|is? Queen Bee honey,|that's right! + +l0103_hero_honeyresponse +bs: +I think I see|where this is going. +haiku: +Very interesting||I love sticky sweet|honey||And you love it too +any: +I'm more of a|saccharin person|myself. + +l0103_gethoney +There's a lil'|hive up yonder|northwise, got some|good Queen Bee|honey. I've got a|snake bite kit fer|the feller brave|enough to get me|some o' that honey. + +l0103_snakebitekit +Ya brought me some|honey! That there's|mighty good stuff.|Here's that snake|bite kit fer yer|trouble. + +l0103_seenyoubefore +My name's Lil' Ed.|I sure do love... wait|a minute, I seen you|before. Hey, I|already gave ya a|snake bite kit - let|me be! + +l0106_heysonny +Hey sonny yer|tearin' through here|a mite fast, ain't|ya? You'd best slow|down and watch out|for snakes; if you|don't have a snake|bite kit they're|deadly! + +l0106_hero_seethem +bs: +Hey yourself, old|dude. Did you like|see anybody come|through here just|now? +haiku: +I look for my|captain||A bag of flour,|kidnapped||By a begonia +ba: +Did you see a|begonia and a bag of|flour come through|here? The begonia|might have had a|gun. + +l0106_sure +Sure! I seen Lady|Flower and her new|gentleman friend|strollin' through,|headed fer the|palace. Heard there|was goin' ter be a|weddin! + +l0106_headnorth +To get on ter the|palace just head|north one acre and|then due east fer|four. You can't|scarcely miss it! + +l0108_sign +"This is Landing|Zone +@@@. Press|start in a landing|zone to see its|coordinates." + +l0205_idiot +Ein idiot sagt what? + +l0205_what +bs: +What? +haiku: +What was that you|said||I did not quite|understand||Your foreign|language +any: +You talking to me? + +l0205_forgive +Oh forgive me! How|you say... the|bridge is out. I|wait for my friends|from Sunset Village|to help fix, but|they not come long|time. You tell them,|yes? + +l0205_okay +bs: +Sure. Eh, where's|this Sunset Village? +haiku: +I will tell your|friends||When I find Sunset|Village||To give you a hand +any: +Whatever. Which|way? + +l0205_west +Just travel two|acres west, one|south. Yellow|houses, lots of|bats. Goodby, my|friend! Der|Auslander wird|vermutlich verloren. + +l0304_spores +bs: +Whoa, freakadelic!|These spores are|giving me a|headache; if it gets|any worse I might|need an oxy mask or|something. +haiku: +The silent fungus||Releasing spores in|the air||I should find a|filter +any: +Nrarg! Spores...|hurting head...|must... go back...|find... gas mask! + +l0405_ho +Ho, miscreant!|Thou shalt not pass!|Milady's wedding|draws nigh and I|will not permit|scoundrels through|the gates. + +l0405_hero_reaction +bs: +Verily! Why don't|you get off your|high horse, drop the|oldskool guard|routine, and let me|sneak a peek at the|wedding? +haiku: +Please sir let me|pass||To stop that|wedding, perhaps||Another way in +ba: +Scoundrel?! I'll|show you scoundrel! + +l0405_final_word +bs: +Oh yeah? Well why|don't you just... stop|being a... stupid blue|guy and... go away! +haiku: +Are thine ears|shut?! Verily I say:|'tis no way in! The|west gate is closed,|and the east gate,|and so too the south|gate! +any: +Nay, stay thy|wrath, Barium. Me|and mine fellows far|outnumber thee and|would surely be|victorious in|battle. + +l0612_plan +bs: +Scary! This must|be where the armies|teleport in from the|Crouton Homeworld!|That control panel|on the far wall|looks promising... +haiku: +A sinister place||It is a teleport|chamber||I see some controls +any: +Nice teleport|chamber. Better blow|it up. Those|controls on the far|wall might do the|trick. + +l0612_clearance +bs: +Oops! Looks like I|need Zeta-level|clearance to use|these controls! I|could maybe forge a|Group 6 access but|that never works|right. +haiku: +Access is denied||I need high level|clearance||Like Zeta Clearance +any: +Grr... says I need|Zeta Clearance to|use these controls.|Looks like I'll be|visiting some|Crouton outposts! + +l0612_controls +bs: +Okay it's locking|on to Planet|Crouton. In 90|seconds I can jump|in one of these|stations and blow up|their generators|from the other side. +haiku: +In ninety seconds||I will enter a|station||Bound for Crouton|World +any: +Too many buttons...|okay... setting|coordinates for|Planet Crouton... blow|up the generators|real good. Better|get to a teleport|chamber... Delay of 90|seconds?! Roids! + +l0612_go +bs: +Here we go! +haiku: +I'm set for travel||To distant Crouton|Homeworld||It is beginning +any: +...88 Mississippi,|89 Mississippi, 90|Mississipi! Let's|go! + +l0612_duke +bs: +Wait!|What's that? Oh no!|That stupid monkey|is messing with the|controls! +haiku: +An anomaly||Is there someone|tampering?||An orangutan +any: +Hold on... Someone's|screwing with the|controls! It's a|monkey! + +l0612_return +bs: +Ah, good old Kiwi|Firma! I guess|that'll stop the|teleporters for a|while and give those|grenade guys a|break! +haiku: +Haiku has returned||The teleporters|silent||Grenades have free|time +any: +I came. I saw. I'm|back. + +l0912_sign +bs: +Hmm,|"Monkey Library." +haiku: +Here's a little|sign||It reads "Monkey|Library"||That is what it says +any: +"Monkey Library."|Very cute. I hate|monkeys and I hate|reading. + +l0912_welcome +Welcome, comrad,|to the Monkey|Homeworld. It's been|under Crouton rule,|but the monkeys are|revolting! + +l0912_hero_revolt +bs: +Yes they are! How|do you get out of|this joint? +haiku: +It's a nice planet||I must leave to|travel to||The Crouton|Homeworld +any: +This isn't the|Crouton Homeworld!|That's where I was|trying to go. + +l0912_justit +That's just it:the|monkeys destroyed|the outbound|teleport generators!|What happened is|that my identical|robotic twin Patsy-|who's in the disco|right now-will time|travel into the past|twenty minutes from|now and start the|revolution! + +l0912_hero_losing +bs: +You're losing me,|doc. +haiku: +That sounds very|good||But I do not|understand||Any word you said +ba: +You're talking|jibber-jabber! + +l0912_killpatsy +Just go into the|disco right now and|shoot Patsy in the|orange shirt! He|won't mind, and I|can fix him later!|Then you can|teleport to planet|Crouton! + +l0912_hero_brokenteleport +bs: +Hmm this rig seems|broken. +haiku: +In the teleport||I am vexed and|frustrated||It does not function +any: +This gimmick's|broken! That chaps|my hide. + +l0912_hero_startteleport_nopassword +bs: +Fire up this ride,|daddy-o! +haiku: +Set coordinates||For the Crouton Home|Planet||Bid monkeys goodbye +any: +Activate teleport! + +l0912_needpassword +I'm sorry, you|need a password! + +l0912_hero_startteleport_password +bs: +Fire up this ride,|daddy-o!|Password is Gravy. +haiku: +Set coordinates||For the Crouton Home|Planet||Password is Gravy +any: +Activate teleport! + +l0912_ba_givepassword +I'll give you a|password: shut up|and do it! + +l1000_needbomb +bs: +This gate is sooo|not jake. I'm gonna|need a really big|bomb or something to|blow it up! +haiku: +This is a huge|gate||And I cannot get|past it||Maybe a big bomb? +grenade: +Your end is|near, O evil|ones. I am the bomb! +any: +Gonna need a big|bomb to get through|here! Oh yeah. + +l1000_freeze +bs: +Hey! Back away|from the space ship,|General Wacko! +haiku: +You crazy crouton||If you know what's|good for you||You'll hold it right|there +any: +It's over, Gyro! + +l1000_toolate +bs: +Too late! And by|the way, it's|General "Gyro,"|though I suspect you|knew that! +haiku: +Too late! I'm|outta here! +any: +When monkeys|fly, BA! You're|too late; I'm outta|here! + +l1000_follow +bs: +Woo but he's|slippery! We have to|follow him! +haiku: +Gyro has escaped||We won't let him|get away||We will follow him +any: +It's never too|late. + +l1010_amking +I am King|Grenade. Maybe|you need some help?|Maybe you want to|blow something up?|I am the bomb. + +l1010_cannotleave +But I cannot|leave now. Every|day, more Croutons|teleport here from|their homeworld. You|need my help? I need|your help. Find the|teleport generators,|destroy them! + +l1010_readytogo +You have|destroyed the|teleport generators!|I shall go with you,|help you now. I will|wait for you in your|space ship. + +l1012_hero_readbook +"Monkeys and|Croutons have been|enemies since|ancient times. While|Croutons are|smarter, they're|also lazier. For|instance, 'Gravy'|has been the Crouton|password for over|four centuries now..." + +l1212_anytime +bs: +Get ready, gang.|That annoying|blue guy should be|coming through from|Kiwi any minute now!|We're ready for him|this time! +haiku: +Get ready, gang.|That weird green|guy should be coming|through from Kiwi|any minute now!|We're ready for him|this time! +any: +Get ready, gang.|That stupid red|guy should be coming|through from Kiwi|any minute now!|We're ready for him|this time! + +l1212_yeah +Yeah! Yeah! + +l1212_makesure +Just make sure|he doesn't make|it up North and blow|up the teleport|generators. + +l1212_suckstobehim +Sucks to be him|when he comes|through this|teleport! + diff --git a/Assets/Dialog/wedding/wedding.script b/Assets/Dialog/wedding/wedding.script new file mode 100644 index 0000000..6c124ca --- /dev/null +++ b/Assets/Dialog/wedding/wedding.script @@ -0,0 +1,110 @@ +preacher_blah +Blah, blah, blah,|blah. Blah blah.||| + +preacher_reasons +Can anyone think|of any reasons why|these two should not|be joined in Holy|Moly? + +hero_reasons +bs: +Totally! Homeboy|Captain here was|snatched against his|will-being!| +haiku: +Yes.Dog chases cat|But cat hates it,|like captain|What a strange|offspring +any: +Yeah! Captain|don't wanna!||| + +captain_thanks +haiku: +Eh? Anyways...|thanks for coming.|Actually I've kinda|changed my mind|about, uh, you know. +any: +Oh, hey there. Um,|thanks for coming.|Actually I've kinda|changed my mind|about, uh, you know. + +captain_cake +There's lots of|swell cake and punch|here, so if we could|sort of keep going...| + +lady_byallmeans +By all means!|It's all been so|fast we've neglected|to invite your|friends,naughty boy. + +lady_radio +Why don't we radio|the Appomattox and|have the rest of the|crew come and join|us? + +preacher_takebegonia +Do you, Captain|Flour, take this|begonia to be your|lawfully wedded|wife? + +gyro_bs +PSST! BS! Come|here a minute and|check out my new|calculator!| + +preacher_takesack +And do you, Lady|Flower, take this|sack of flour to be|your lawfully wedded|husband? + +gyro_ba +PSST! BA! You|wanna see a video of|a space station|getting eaten by a|giant camel? + +preacher_pronounce +I now pronounce|you man and wife.|You may plant a wet|one.| + +gyro_haiku +PSST! Haiku! I|think I just saw|Quatrain over here|behind the bushes!| + +preacher_married +Okay you guys are|married now. It's|time to party!|| + +gyro_notsofast +Not so fast!|||| + +captain_why +Why not, my dainty|flower friend?||| + +gyro_reveals +Aha! I'm not a|flower at all! I'm|General Gyro, and I|have a little|present for you! + +captain_thankyou +Why thank you,|General Gyro! Is it|yummy?|| + +gyro_notyummy +No it's not yummy!|It's your friends!|I've captured your|whole gang and|locked them up! + +gyro_recall +If you'll recall|you were on your way|to surrender to the|Crouton Empire.| + +gyro_surrender +I simply want you|to sign this|surrender form and|I'll return your|crew. Otherwise... + +gyro_difficult +I've landed eight|platoons of troops|in the kingdom and|they'll be making|life... difficult! + +captain_okay +Oh. Er, okay, I|guess. What do you|think, dear?|| + +lady_dontbesilly +Don't be silly,|Captain. Go beat up|the guards and|rescue your friends!| + +flour_heyguys +Hey guys, what's|up? Let's go back|down and grab some|cake!| + +bs_explain +...saw someone|sneaking around and|I was pretty sure it|was Gyro.| + +bs_explain2 +So I got up from|the wedding real|quiet-like and went|to teach him a|lesson... + +captain_interrupt +Sorry to interrupt|but the misses and I|have to take off on|our honeymoon!| + +captain_tellyouwhat +Tell you what,|though: General Gyro|sure seems to be|causing a lot of|trouble. + +captain_key +Here's the key to|the Appomattox; why|don't you guys fly|around...| + +captain_dosomething +...And see if you|can't do something|about him and his|Crouton armies!| + +captain_camp +The misses says|their main base is|probably in an old|warehouse in the|frozen north-east! + +bs_driving +Well she starts up|fine but she seems|to be burning a lot|of oil.| + +bs_palace +We could fly to|the palace and start|looking there. I|think the coordi-|nates were *}}%. + diff --git a/Assets/Music/alarm.gbm b/Assets/Music/alarm.gbm new file mode 100644 index 0000000..030ebb6 --- /dev/null +++ b/Assets/Music/alarm.gbm @@ -0,0 +1,58 @@ +//FGB +//Alarm/panic +//Jacob Stevens +notesPerSecond 10 + +track 1 //countermelody + + counterA + + .repeat + counterB, counterB + jmp .repeat + +track 2 //melody + + melodyA + .repeat + melodyB, melodyC + jmp .repeat + +track 3 //bass + bassA + .repeat + bassB,bassB,bassB,bassB + jmp .repeat + +track 1 +counterA: +E5 D5# D5 C5# + +track 1 +counterB: +C5,h5 F5#,h5 +D5#,h D5 C5# + +track 2 +melodyA: +A5# A5 G5# G5 + +track 2 +melodyB: +F5#,h F5#,h +F5#,h A5,h +A6,h A5,h +D5#,h D6#,h + +track 2 +melodyC: +-16 + +track 3 +bassA: +E4 D4# D4 C4# + +track 3 +bassB: +C4 C4# D4 D4# +E4 D4# D4 C4# \ No newline at end of file diff --git a/Assets/Music/beehive.gbm b/Assets/Music/beehive.gbm new file mode 100644 index 0000000..600cbe3 --- /dev/null +++ b/Assets/Music/beehive.gbm @@ -0,0 +1,132 @@ +//FGB +//Bee Hive +//Jacob Stevens +notesPerSecond 10 //one note equals one sixteenth + +track 1 //countermelody + + counterA,counterB,counterC + + .repeat + + counterD,counterD,counterD,counterD + counterE,counterE + + jmp .repeat + +track 2 //melody + + melodyA,melodyB,melodyC + + .repeat + + melodyD,melodyE,melodyD,melodyE + melodyF,melodyF + + jmp .repeat + +track 3 //bass + + bassA,bassB,bassC + + .repeat + + bassD,bassD,bassD,bassD + bassE,bassE + + jmp .repeat + +//counter +track 1 +counterA: +D5# E5 F5 F5# + +track 1 +counterB: +G5 G5 -2 +-2 F5# F5# +G5 G5 -2 +-2 F5# F5# + +track 1 +counterC: +G5 G5 F5# F5# +G5 G5 F5# F5# +G5 G5 F5# F5# +G5 G5 F5# F5# + +track 1 +counterD: +-16 + +track 1 +counterE: +C6,h7 +C6#,h3 D6,h3 + +//melody +track 2 +melodyA: +-4 + +track 2 +melodyB: +-16 + +track 2 +melodyC: +-8 +C6# F6# B6 F7# +F7 C7 C7# F6# + +track 2 +melodyD: +G6,h5 F6#,h +G6,h5 F6#,h + +track 2 +melodyE: +G6,h A6# D7 +A6#,h A6# A6 +G6# G6 F6# F6 +E6 D6# D6 C6# + +track 2 +melodyF: +C6,h G6 F6# +G6,h C7,h +G6# G6 G6#,h +A6,h D7,h + +//bass +track 3 +bassA: +G3# A3 A3# B3 + +track 3 +bassB: +C4 C4 -2 +-2 C4# C4# +C4 C4 -2 +-2 C4# C4# + +track 3 +bassC: +C4 C4 C4# C4# +C4 C4 C4# C4# +C4 C4 C4# C4# +C4 C4 C4# C4# + +track 3 +bassD: +C4,h3 +C5,h C4,h +B3,h B4,h +A3#,h A4#,h + +track 3 +bassE: +C4,h3 +C5,h C4,h +C4#,h C5#,h +D4,h D5,h \ No newline at end of file diff --git a/Assets/Music/cowboy.gbm b/Assets/Music/cowboy.gbm new file mode 100644 index 0000000..4179006 --- /dev/null +++ b/Assets/Music/cowboy.gbm @@ -0,0 +1,121 @@ +//FGB +//Cowboy +//Jacob Stevens +notesPerSecond 4 //quarter = 80, one note equals one triplet + +track 1 //countermelody + instrument1 0044A23286 + + counterA,counterA + + .repeat + counterA,counterB,counterA,counterB + counterC,counterD,counterE,counterF + counterA + jmp .repeat + +track 2 //melody + + melodyA,melodyB + + .repeat + melodyC,melodyD,melodyE,melodyG + melodyH,melodyJ,melodyK,melodyL + melodyB + jmp .repeat + +//counter +track 1 +counterA: +C5,h G4 +A4,h G4 +C5,h G4 +A4,h G4 + +track 1 +counterB: +F4,h C4 +D4,h C4 +F4,h C4 +D4,h C4 + +track 1 +counterC: +C5,h2 +E5,h G5 +B4,h2 +D5,h G5 + +track 1 +counterD: +A4,h2 +C5,h E5 +F4,h2 +A4,h C5 + +track 1 +counterE: +G4,h8 +G4,h2 + +track 1 +counterF: +C4,h G4 +A4,h G4 +C5,h G4 +A4,h G4 + +//melody +track 2 +melodyA: +-12 + +track 2 +melodyB: +-11 +G6 + +track 2 +melodyC: +G6,h5 +E6,h2 +C6,h2 + +track 2 +melodyD: +G5,h A5,h6 +G6,h2 + +track 2 +melodyE: +G6,h5 +E6,h2 +G6,h2 + +track 2 +melodyG: +A6,h8 +C6,h D6 + +track 2 +melodyH: +E6,h2 E6,h2 +D6,h2 +E6,h +D6 + +track 2 +melodyJ: +C6,h B5 +C6,h +A5,h3 +A5,h2 + +track 2 +melodyK: +G5,h2 C6,h2 D6,h +C6,h3 + +track 2 +melodyL: +C6,h11 diff --git a/Assets/Music/death.gbm b/Assets/Music/death.gbm new file mode 100644 index 0000000..0b07d32 --- /dev/null +++ b/Assets/Music/death.gbm @@ -0,0 +1,115 @@ +//FGB +//death tune +//Jacob Stevens +notesPerSecond 4 //quarter = 120, one note equals one eighth + +track 1 //countermelody + instrument1 0044A23286 + .repeat + counterA,counterA,counterA,counterA + counterB,counterB,counterC,counterD + counterE,counterF,counterE,counterG + counterE,counterF,counterE,counterG + jmp .repeat + +track 2 //melody + .repeat + melodyA,melodyA,melodyB,melodyC + melodyA,melodyA,melodyB,melodyC + melodyD,melodyE,melodyF,melodyG + melodyD,melodyH,melodyJ,melodyG + jmp .repeat + +track 3 //bass + .repeat + bassA,bassA,bassB,bassC + bassA,bassA,bassB,bassC + bassC,bassD,bassC,bassC + bassC,bassD,bassC,bassC + jmp .repeat + +//counter melody +track 1 +counterA: +-8 + +track 1 +counterB: +D6,h2 E6,h2 E6,h + +track 1 +counterC: +D6,h2 C6,h2 A5#,h + +track 1 +counterD: +C6,h7 + +track 1 +counterE: +E5,h3 G5,h3 + +track 1 +counterF: +D5,h3 F5,h3 + +track 1 +counterG: +C6,h3 E6,h3 + +//melody +track 2 +melodyA: +B5,h2 C6,h2 G5,h + +track 2 +melodyB: +A5#,h2 A5,h2 G5,h + +track 2 +melodyC: +C5,h7 + +track 2 +melodyD: +G6,h2 E6 C6,h G5,h + +track 2 +melodyE: +A5#,h3 A5,h A5# A5 + +track 2 +melodyF: +G5,h C6,h5 + +track 2 +melodyG: +-8 + +track 2 +melodyH: +A5#,h3 +A5,h +C6 D6 + +track 2 +melodyJ: +E6,h7 + +//bass +track 3 +bassA: +C4 G4 C5,h5 + +track 3 +bassB: +G4 A5# D6,h5 + +track 3 +bassC: +C4 G4 C5 C5,h G4 C5 G4 + +track 3 +bassD: +A3# F4 A4# A4#,h F4 A4# F4 + diff --git a/Assets/Music/fgbwar.gbm b/Assets/Music/fgbwar.gbm new file mode 100644 index 0000000..0c793a3 --- /dev/null +++ b/Assets/Music/fgbwar.gbm @@ -0,0 +1,148 @@ +//FGB +//War +//Jacob Stevens + +notesPerSecond 10 + +track 1 //countermelody + .repeat + + counterA,counterA,counterA,counterA + counterB,counterB,counterB,counterB + counterC,counterD,counterA,counterA + counterA,counterA,counterB,counterB + counterB,counterB,counterC,counterD + counterE + + jmp .repeat + +track 2 //melody + .repeat + + melodyA,melodyA,melodyA,melodyA + melodyA,melodyA,melodyB,melodyB + melodyB,melodyB,melodyA,melodyA + melodyA,melodyA,melodyA,melodyA + melodyB,melodyB,melodyB,melodyB + melodyC + + jmp .repeat + +track 3 //bass + .repeat + + bassA,bassA,bassB,bassB + bassB,bassB,bassB,bassB + bassB,bassB,bassA,bassA + bassB,bassB,bassB,bassB + bassB,bassB,bassB,bassB + bassC + + jmp .repeat + +track 4 //percussion + .repeat + + percA,percA,percA,percA + percA,percA,percA,percA + percA,percA,percA,percA + percA,percA,percA,percA + percA,percA,percA,percA + percB + + jmp .repeat + +//countermelody + +track 1 +counterA: +-20 + +track 1 +counterB: +C7,h5 G6,h5 +F6#,h3 +A6#,h B6,h + +track 1 +counterC: +C7 B6 A6# A6 G6# G6 +F6# F6 E6 D6# D6 C6# +C6 B5 A5# A5 +G5# G5 F5# F5 + +track 1 +counterD: +F5# G5 G5# A5 A5# B5 +C6 C6# D6 D6# E6 F6 +F6# G6 G6# A6 +A6# B6 C7 C7# + +track 1 +counterE: +C7 C7 -2 -2 +D7# D7# -2 +C7 C7 -2 -2 +D7# D7# C7 C7 +D7# D7# C7 C7 +D7# D7# C7 C7 + +//melody +track 2 +melodyA: +-20 + +track 2 +melodyB: +C5 D5# F5 F5# G5 G5# +C6 A5 G5# G5 F5# D5# +F5# D5# C5 D5# +A4# C5# D5 F5 + +track 2 +melodyC: +F5# F5# -2 -2 +A5 A5 -2 +F5# F5# -2 -2 +A5 A5 F5# F5# +A5 A5 F5# F5# +A5 A5 F5# F5# + +//bass +track 3 +bassA: +C4,h5 +C4,h5 +F4,h3 +A3#,h3 + +track 3 +bassB: +C4,h C5,h C5,h +C4,h C5,h C5,h +F4#,h F5#,h +A3#,h A4#,h + +track 3 +bassC: +C4 C4 -2 -2 C4 C4 -2 +C4 C4 -2 -2 +C4 C4 C4 C4 +C4 C4 C4 C4 +C4 C4 C4 C4 + +//percussion + +track 4 +percA: +ta,- sn,- sn,- +ta,- sn,- sn,- +ta,- sn,- +ta,- sn,- + +track 4 +percB: +sn - sn - sn - sn - +sn - sn - sn - sn - +sn - sn - sn - sn - +sn - sn - diff --git a/Assets/Music/frosty.gbm b/Assets/Music/frosty.gbm new file mode 100644 index 0000000..3e85025 --- /dev/null +++ b/Assets/Music/frosty.gbm @@ -0,0 +1,253 @@ +//FGB +//Frosty +//Jacob Stevens +notesPerSecond 9 //quarter ~ 140, one note equals one sixteenth + +track 1 //countermelody + + counterA,counterB + + .repeat + counterC,counterC,counterC,counterD + counterD,counterE,counterF,counterC + counterC,counterD,counterD,counterE + counterG,counterG,counterH,counterJ + counterC + jmp .repeat + +track 2 //melody + + melodyA, melodyB + + .repeat + melodyC,melodyC,melodyD,melodyE + melodyF,melodyG,melodyC,melodyC + melodyD,melodyE,melodyF,melodyG + melodyH,melodyJ,melodyK,melodyL + melodyM + jmp .repeat + +track 3 //bass + + bassA, bassB + + .repeat + bassC,bassC,bassC,bassD + bassD,bassD,bassC,bassC + bassC,bassD,bassD,bassD + bassC,bassE,bassF,bassG + bassC + jmp .repeat + +track 4 //percussion + + percA,percB + .repeat + percC + jmp .repeat + +//counter melody segments + +track 1 +counterA: +-16 + +track 1 +counterB: +-8 +F5,h3 +E5,h3 + +track 1 +counterC: +-2 D5#,h +-2 D5#,h +-2 D5#,h +-2 D5#,h + +track 1 +counterD: +-2 F5,h +-2 F5,h +-2 D5#,h +-2 D5#,h + +track 1 +counterE: +-2 G5,h +-2 F5,h +-2 E5,h +-2 E5,h + +track 1 +counterF: +-2 E5,h +-2 E5,h +-2 D5#,h +-2 D5#,h + +track 1 +counterG: +-2 E5,h +-2 E5,h +-2 E5,h +-2 E5,h + +track 1 +counterQ: +-2 E5,h +-2 E5,h +-2 F5,h +-2 F5,h + +track 1 +counterH: +-2 E5,h +-2 E5,h +-2 F5,h +-2 F5,h + +track 1 +counterJ: +-2 G5,h +-2 G5,h +-2 F5,h +-2 B5,h + +//melody segments +track 2 +melodyA: +D6#,h D6,h +C6,h2 A5# +C6,h A5#,h +G5#,h2 G5 + +track 2 +melodyB: +F5,h D5#,h +C5#,h2 D5# +C5#,h3 +C5,h3 + +track 2 +melodyC: +-16 + +track 2 +melodyD: +G6,h3 +D6#,h2 F6 +G6,h C7,h3 B6 C7 + +track 2 +melodyE: +C7#,h C7#,h +C7#,h C7#,h +C7,h5 B6 C7 + +track 2 +melodyF: +C7#,h C7#,h +C7#,h C7#,h +C7,h C7,h +C7,h C7,h + +track 2 +melodyG: +A6#,h G6#,h +G6,h F6,h +E6,h7 + +track 2 +melodyH: +-8 +G6 F6 E6 F6 +G6,h C7,h + +track 2 +melodyJ: +G6,h C7,h +G6,h3 +G6# G6 F6 G6 +G6#,h G6#,h + +track 2 +melodyK: +G6,h7 +F6 D6# D6 C6 +A5#,h D6,h + +track 2 +melodyL: +D6# F6 G6 G6# +A6#,h D6#,h +D6 F6 A6 D7 +G6 D6 B5 G5 + +track 2 +melodyM: +C6,h15 + +//bass sections + +track 3 +bassA: +-16 + +track 3 +bassB: +-8 +C4#,h3 C4,h3 + +track 3 +bassC: +C4,h C5,h +G3,h C5,h +C4,h C5,h +G3,h C5,h + +track 3 +bassD: +C4#,h C5#,h +G3#,h C5#,h +C4,h C5,h +G3,h C5,h + +track 3 +bassE: +C4,h C5,h +G3,h C5,h +F4,h F5,h +C4,h F5,h + +track 3 +bassF: +C4,h C5,h +G3,h C5,h +A3#,h A4#,h +F4,h A4#,h + +track 3 +bassG: +D4#,h D5#,h +A3#,h D5#,h +D4,h D5,h +G3,h G4,h + +//percussion sections +track 4 +percA: +-16 + +track 4 +percB: +-8 +sn,-3 +sn,-3 + +track 4 +percC: +-2 sn,- +-2 sn,- +-2 sn,- +-2 sn,- \ No newline at end of file diff --git a/Assets/Music/hoedown.gbm b/Assets/Music/hoedown.gbm new file mode 100644 index 0000000..37a3540 --- /dev/null +++ b/Assets/Music/hoedown.gbm @@ -0,0 +1,153 @@ +//FGB +//Hoedown!!! (Mad Coyboys) +//Jacob Stevens +notesPerSecond 10 //one note equals one sixteenth + +track 1 //countermelody + + counterA + + .repeat + + counterB,counterC,counterB,counterB + counterB,counterD,counterE,counterB + + jmp .repeat + +track 2 //melody + + melodyA + + .repeat + + melodyB,melodyC,melodyB,melodyD + melodyB,melodyE,melodyF,melodyG + + jmp .repeat + +track 3 //bass + + bassA + + .repeat + + bassB,bassC,bassB,bassD + bassB,bassE,bassF,bassB + + jmp .repeat + +//counter +track 1 +counterA: +-4 + +track 1 +counterB: +-2 G5,h +-2 G5,h +-2 G5,h +-2 G5,h + +track 1 +counterC: +-2 A5,h +-2 A5,h +-2 A5,h +-2 A5,h + +track 1 +counterD: +-2 F5,h +-2 F5,h +-2 F5,h +-2 F5,h + +track 1 +counterE: +B5,h3 +B5,h3 +-2 G5,h +-2 G5,h + +//melody +track 2 +melodyA: +D6 E6 F6 F6# + +track 2 +melodyB: +G6,h G6 G6 +G6,h G6,h +A6,h G6,h +E6,h C6,h + +track 2 +melodyC: +G5,h +A5,h7 +-2 +D6 E6 F6 F6# + +track 2 +melodyD: +D6,h11 +-2 F6 F6# + +track 2 +melodyE: +A6,h A6 A6 +A6,h A6,h +B6,h A6,h +F6,h D6,h + +track 2 +melodyF: +G6 A6 G6,h +G6 A6 G6,h +G6 A6 G6 F6 +D6 B5 G5 B5 + +track 2 +melodyG: +C6,h11 +D6 E6 F6 F6# + +//bass +track 3 +bassA: +-4 + +track 3 +bassB: +C4,h E5,h +G3,h E5,h +C4,h E5,h +G3,h E5,h + +track 3 +bassC: +F4,h F5,h +C5,h F5,h +F4,h F5,h +C5,h F5,h + +track 3 +bassD: +G3,h B4,h +D4,h B4,h +G3,h B4,h +D4,h B4,h + +track 3 +bassE: +D4,h A4,h +A3,h A4,h +D4,h A4,h +A3,h A4,h + +track 3 +bassF: +G4,h3 +G4,h3 +G3,h B4,h +D4,h B4,h \ No newline at end of file diff --git a/Assets/Music/intro_cinema.gbm b/Assets/Music/intro_cinema.gbm new file mode 100644 index 0000000..69daef3 --- /dev/null +++ b/Assets/Music/intro_cinema.gbm @@ -0,0 +1,286 @@ +//FGB +//Introduction (Cinema) Music +//Jacob Stevens +notesPerSecond 5 //quarter = 80, one note equals one sixteenth + +track 1 //countermelody + .repeat + instrument1 0044F23286 + counterA,counterB,counterC,counterC + counterA,counterB,counterD,counterE + counterA,counterB,counterC,counterC + counterA,counterB,counterD,counterF + counterD,counterF,counterG,counterH + jmp .repeat + +track 2 //melody + .repeat + instrument2 80F70887 + melodyA + melodyB + melodyC + melodyA + melodyD + melodyE + melodyF + melodyA + melodyB + melodyC + melodyA + melodyD + melodyG + melodyH + melodyG + melodyJ + melodyK + melodyL + jmp .repeat + +track 3 //bass + .repeat + bassA,bassB,bassC,bassC + bassA,bassB,bassD,bassD + bassA,bassB,bassC,bassC + bassA,bassB,bassD,bassE + bassD,bassE,bassD,bassA + jmp .repeat + +track 4 //percussion + .repeat + percA + jmp .repeat + + +///////Counter Melody Segments + +track 1 +counterA: +G5,h7 +D5#,h7 + +track 1 +counterB: +C5,h7 +G5,h7 + +track 1 +counterC: +B5,h7 +G5,h3 +D5,h3 + +track 1 +counterD: +E5,h7 +E5,h3 +E5,h +A4 +C5# + +track 1 +counterE: +E5,h7 +E5,h3 +E5,h +A4 +E5 + +track 1 +counterF: +D5,h7 +B5,h3 +G5,h1 +B4 +D5 + +track 1 +counterG: +A5,h15 + +track 1 +counterH: +-16 + +/////////Melody Segments +track 2 +melodyA: +C6,h7 +G5,h5 +C6,h + +track 2 +melodyB: +G6#,h5 +G6 +F6 +D6#,h5 +C6,h + +track 2 +melodyC: +D6,h27 +G5,h +G5,h + +track 2 +melodyD: +G6#,h5 +G6 +F6 +D6#,h5 +D6,h + +track 2 +melodyE: +C6#,h15 + +track 2 +melodyF: +C6,h7 +C6,h3 +C6,h +A5 +B5 + +track 2 +melodyG: +C6# +C6#,h +C6# +C6# +C6#,h +C6# +C6# +C6#,h +C6# +C6# +C6#,h +C6# + +track 2 +melodyH: +D6 +D6,h +D6 +D6 +D6,h +D6 +D6 +D6,h +D6 +D6 +D6,h +D6 + +track 2 +melodyJ: +D6 +D6,h +D6 +D6 +D6,h +D6 +G6 +G6,h +G6 +G6 +G6,h +G6 + +track 2 +melodyK: +A6 +A6,h +A6 +A6 +A6,h +A6 +A6,h7 + +track 2 +melodyL: +-16 + +/////////Bass Segments +track 3 +bassA: +C4 +C4 +C4,h +C4,h +C4 +C4 +C4 +C4 +C4,h +C4,h +C4 +C4 + +track 3 +bassB: +G4# +G4# +G4#,h +G4#,h +G4# +G4# +D4# +D4# +D4#,h +D4#,h +D4# +D4# + +track 3 +bassC: +G4 +G4 +G4,h +G4,h +G4 +G4 +G4 +G4 +G4,h +G4,h +G4 +G4 + +track 3 +bassD: +A4 +A4 +A4,h +A4,h +A4 +A4 +A4 +A4 +A4,h +A4,h +A4 +A4 + +track 3 +bassE: +G4 +G4 +G4,h +G4,h +G4 +G4 +G4 +G4 +G4,h +G4,h +G4 +G3 + +/////////Percussion Segments +track 4 +PercA: +sn,sn,sn,- +sn,-,sn,sn +sn,sn,sn,- +sn,-,sn,sn diff --git a/Assets/Music/jazzy.gbm b/Assets/Music/jazzy.gbm new file mode 100644 index 0000000..6de53aa --- /dev/null +++ b/Assets/Music/jazzy.gbm @@ -0,0 +1,225 @@ +//FGB +//Jazzy (BS?) +//Jacob Stevens +notesPerSecond 8 //quarter = 120, one note equals one sixteenth + +track 1 //countermelody + + counterA,counterA + + .repeat + counterB,counterC,counterB,counterC + counterB,counterC,counterB,counterC + counterB,counterC,counterD,counterE + counterD,counterF + jmp .repeat + +track 2 //melody + + melodyA,melodyA + + .repeat + + melodyB,melodyC,melodyB,melodyC + melodyB,melodyC,melodyD,melodyE + melodyD,melodyE,melodyF,melodyG + melodyF,melodyH + + jmp .repeat + +track 3 //bass + + bassA,bassB + + .repeat + + bassC,bassD,bassC,bassD + bassE,bassF,bassE,bassF + bassE,bassF,bassG,bassH + bassJ,bassK + + jmp .repeat + +track 4 //percussion + + percA,percA + + .repeat + percA,percA,percA,percA + percB,percB,percB,percB + percB,percB,percB,percB + percB,percB + jmp .repeat + +//counter +track 1 +counterA: +-16 + +track 1 +counterB: +-4 +C6,h2 C6 +C6 C6 C6,h +-4 + +track 1 +counterC: +-4 +D6#,h2 D6# +D6# D6# D6#,h +-4 + +track 1 +counterD: +G5,h2 G5 +G5,h2 G5 +E5,h2 E5 +E5,h2 E5 + +track 1 +counterE: +F5,h2 F5 +F5,h2 F5 +B4,h2 B4 +B4,h2 B4 + +track 1 +counterF: +F5,h2 F5 +F5,h2 F5 +B4,h2 B4 +-4 + +//melody +track 2 +melodyA: +-16 + +track 2 +melodyB: +-4 +A5#,h2 A5# +A5# A5# A5#,h +-4 + +track 2 +melodyC: +-4 +C6,h2 C6 +C6 C6 C6,h +-4 + +track 2 +melodyD: +- C6 F6 F6# +G6,h2 D6# +E6 C6,h6 + +track 2 +melodyE: +- C6 D6# E6 +F6,h2 D6# +F6 D6# F6 D6# +F6# G6,h2 + +track 2 +melodyF: +B6 A6# A6 G6# +G6,h2 D6# +E6 D6# D6 C6# +C6,h3 + +track 2 +melodyG: +A6 G6# G6 F6# +F6,h2 A5# +B5 A5# A5 G5# +G5,h3 + +track 2 +melodyH: +A6 G6# G6 F6# +F6 G6# A6 A6# +B6 A6# A6 G6# +G6,h3 + +//bass +track 3 +bassA: +-16 + +track 3 +bassB: +-12 +G5 A5#,h2 + +track 3 +bassC: +C6,h3 +-8 +G5 A5#,h2 + +track 3 +bassD: +F5,h3 +-8 +G5 A5#,h2 + +track 3 +bassE: +C5,h C5,h +A5#,h2 C5 +C6 C6 C6,h +A5#,h G5,h + +track 3 +bassF: +F5,h F5,h +D6#,h2 F5 +F6 F6 F6,h +G5 A5#,h2 + +track 3 +bassG: +E6,h3 +E5,h3 +A5,h3 +A6,h3 + +track 3 +bassH: +D6,h3 +D5,h3 +G5,h3 +G6,h3 + +track 3 +bassJ: +E6,h3 +E5,h3 +A5,h3 +A6,h3 + +track 3 +bassK: +D6,h3 +D5,h3 +G5,h3 +G5 A5#,h2 + +//perc +track 4 +percA: +rd,-3 +rd,-2 rd +rd,-3 +rd,-2 rd + + +track 4 +percB: +rd rd rd,- +sn sn,- sn +rd,- rd rd +sn sn,- sn \ No newline at end of file diff --git a/Assets/Music/jungle.gbm b/Assets/Music/jungle.gbm new file mode 100644 index 0000000..5877082 --- /dev/null +++ b/Assets/Music/jungle.gbm @@ -0,0 +1,153 @@ +//FGB +//Jungle? (Maybe Swamp) +//Jacob Stevens 1901 +notespersecond 9 //one note = sixteenth +transpose -2 + +track 1 + + .repeat + + counterA,counterB,counterA,counterB + counterC,counterD,counterC,counterD + counterF,counterG,counterA,counterB + counterF,counterG,counterA,counterB + + jmp .repeat + +track 2 + .repeat + + melodyA,melodyB,melodyC,melodyB + melodyA,melodyB,melodyD,melodyB + melodyE,melodyF,melodyG,melodyB + melodyE,melodyF,melodyA,melodyB + + jmp .repeat + +track 3 + .repeat + + bassA,bassB,bassA,bassB + bassC,bassD,bassC,bassD + bassE,bassF,bassA,bassB + bassE,bassF,bassA,bassB + + jmp .repeat + +//counter +track 1 +counterA: +G5,h2 G5,h2 G5,h3 G5#,h +G5,h G5,h + +track 1 +counterB: +G5,h2 G5 +G5,h G5,h3 G5#,h +G5,h G5,h + +track 1 +counterC: +C5,h2 C5,h2 C5,h3 C5#,h +C5,h C5,h + +track 1 +counterD: +C5,h2 C5 +C5,h C5,h3 C5#,h +C5,h C5,h + +//track 1 //unused +//counterE: + +track 1 +counterF: +G5,h2 G5 +G5,h3 +-8 + +track 1 +counterG: +A5#,h2 A5# +A5#,h3 +G5#,h2 G5# +G5#,h3 + +//melody + +track 2 +melodyA: +C6 C6# C6,h +-12 + +track 2 +melodyB: +-16 + +track 2 +melodyC: +C6 C6# D6# C6# +C6 C6# C6 A5# +C6 C6# C6 A5# +C6,h3 + +track 2 +melodyD: +C6 C6# D6# F6 +F6# F6 D6# C6# +C6 A5# G5# F5# +F5 D5# F5,h + +track 2 +melodyE: +C6,h5 C6# D6# +F6 G6 G6# G6 +F6 G6 G6# G6 + +track 2 +melodyF: +D6#,h F6 G6 +G6# G6 F6 D6# +C6#,h D6# F6 +G6 F6 D6# C6# + +track 2 +melodyG: +C6,h15 + +//bass +track 3 +bassA: +C4,h2 C4,h2 C4,h3 C4#,h +C4,h C4,h + +track 3 +bassB: +C4,h2 C4 +C4,h C4,h3 C4#,h +C4,h C4,h + +track 3 +bassC: +F4,h2 F4,h2 F4,h3 F4#,h +F4,h F4,h + +track 3 +bassD: +F4,h2 F4 +F4,h F4,h3 F4#,h +F4,h F4,h + +track 3 +bassE: +C4,h2 C4 +C4,h3 +-8 + +track 3 +bassF: +D4#,h2 D4# +D4#,h3 +C4#,h2 C4# +C4#,h3 \ No newline at end of file diff --git a/Assets/Music/lady_flower.gbm b/Assets/Music/lady_flower.gbm new file mode 100644 index 0000000..f929443 --- /dev/null +++ b/Assets/Music/lady_flower.gbm @@ -0,0 +1,128 @@ +//FGB +//lady flower +//Jacob Stevens +notesPerSecond 4 //quarter = 120, one note equals one eighth + +track 1 //countermelody + instrument1 0044A23286 + + counterA + + .repeat + + counterB,counterC,counterB,counterC + counterD,counterE,counterD,counterF + counterB,counterC,counterB,counterC + counterD,counterE,counterD,counterF + counterH,counterJ,counterK,counterB + counterH,counterJ,counterK,counterL + counterH,counterJ,counterB,counterC + jmp .repeat + +track 2 //melody + instrument2 80F70887 + + melodyA + + .repeat + melodyB,melodyB,melodyC,melodyD + melodyC,melodyE,melodyB,melodyB + melodyC,melodyD,melodyC,melodyF + melodyG,melodyG,melodyH,melodyJ + melodyG,melodyG,melodyH,melodyK + melodyL,melodyM,melodyM,melodyN + jmp .repeat + +//counter +track 1 +counterA: +-2 + +track 1 +counterB: +C4 E4 G4 B4 E5 G5 + +track 1 +counterC: +B5 G5 E5 B4 G4 E4 + +track 1 +counterD: +D4 F4 A4 D5 F5 A5 + +track 1 +counterE: +D6 B5 G5 F5 D5 B4 + +track 1 +counterF: +G3 B3 D4 F4 G4 B4 + +track 1 +counterH: +F3 A3 C4 F4 A4 C5 + +track 1 +counterJ: +F5 C5 A4 F4 C4 A3 + +track 1 +counterK: +C4# F4 G4# B5# F5 G5# + +track 1 +counterL: +D3# F3 A3# D4# F4 A4# + +//melody +track 2 +melodyA: +E6,h + +track 2 +melodyB: +E6,h9 D6 E6 + +track 2 +melodyC: +F6 E6 D6 C6 B5 A5 + +track 2 +melodyD: +G5,h3 D6,h + +track 2 +melodyE: +G5,h D5,h D6,h + +track 2 +melodyF: +G5,h D5,h D6,h + +track 2 +melodyG: +F6,h2 E6 D6 E6 + +track 2 +melodyH: +F6 D6# C6# D6# F6 D6# + +track 2 +melodyJ: +E6,h5 + +track 2 +melodyK: +G6 D6# F6 G6 D6# G6 + +track 2 +melodyL: +A6,h5 + +track 2 +melodyM: +-6 + +track 2 +melodyN: +-4 E6,h \ No newline at end of file diff --git a/Assets/Music/main_in_game.gbm b/Assets/Music/main_in_game.gbm new file mode 100644 index 0000000..bed093d --- /dev/null +++ b/Assets/Music/main_in_game.gbm @@ -0,0 +1,771 @@ +//FGB +//Main In-Game Music +//Jacob Stevens +notesPerSecond 30 //quarter ~= 160, one note equals 1/12 of 1 beat + +track 1 //countermelody + + counterA,counterB,counterB,counterB,counterC //intro + + .repeat + instrument1 0044F23286 + counter1A,counter1B,counter1C,counter1D //counter set 1 + counter1A,counter1B,counter1C,counter1E + counter1F,counter1G,counter1C,counter1E + counter1F,counter1G,counter1H,counter1F + counter1J,counter1K,counter1L + + counter2A,counter2B,counter2C,counter2D //counter set 2 + counter2A,counter2B,counter2C,counter2E + counter2F,counter2G,counter2H,counter2J + counter2F,counter2K,counter2L,counter2M + counter2N,counter2O,counter2P + + counter3A,counter3B,counter3A,counter3A //counter set 3 + counter3A,counter3B,counter3A,counter3A + counter3C,counter3D,counter3A,counter3A + counter3C,counter3E,counter3F,counter3G + counter3H,counter3J,counter3K + + jmp .repeat + +track 2 //melody + + melodyA,melodyA,melodyB,melodyC,melodyD //intro + instrument2 80F70887 + .repeat + melodyE,melodyF,melodyG,melodyE //main repeating melody + melodyH,melodyJ,melodyK,melodyL + melodyM,melodyN,melodyO,melodyP + melodyQ + jmp .repeat + +track 3 //bass + + bassA,bassA,bassA,bassA,bassB //bass intro + + .repeat + + bass1A,bass1B,bass1A,bass1C //bass set 1 + bass1A,bass1B,bass1A,bass1C + bass1D,bass1E,bass1J,bass1J + bass1K,bass1L,bass1M,bass1N + bass1F,bass1G,bass1H + + bass2A,bass2B,bass2A,bass2C //bass set 2 + bass2A,bass2B,bass2A,bass2C + bass2D,bass2E,bass2F,bass2F + bass2D,bass2G,bass2H,bass2J + bass2K,bass2L,bass2M + + bass3A,bass3B,bass3A,bass3A //bass set 3 + bass3A,bass3B,bass3A,bass3A + bass3C,bass3C,bass3A,bass3A + bass3C,bass3D,bass3E,bass3F + bass3G,bass3H,bass3J + + jmp .repeat + +track 4 //percussion + + percA,percA,percA,percA,percB //percussion intro + + .repeat + + percC,percC,percC,percD //perc 1 + percC,percC,percC,percD + percE,percF,percB,percB + percE,percF,percD,percD + percF,percA,percG + + percC,percC,percC,percD //perc 2 (same as 1) + percC,percC,percC,percD + percE,percF,percB,percB + percE,percF,percD,percD + percF,percA,percG + + perc3A,perc3B,perc3A,perc3A //perc 3 + perc3A,perc3B,perc3A,perc3A + perc3C,perc3C,perc3A,perc3A + perc3C,perc3D,perc3C,perc3C + perc3C,perc3E,perc3F + + + + jmp .repeat + +//counter melody track +//intro segments +track 1 +counterA: +-48 + +track 1 +counterB: +C5,h11 +C5,h3 C5,h3 C5,h3 +C5,h11 +C5,h3 C5,h3 C5,h3 + +track 1 +counterC: +G4,h11 +G4,h3 G4,h3 G4,h3 +G4,h11 +G4,h3 G4,h3 G4,h3 + +//counter set 1 +track 1 +counter1A: +C5,h23 +E5,h23 + +track 1 +counter1B: +D5,h23 +F5,h23 + +track 1 +counter1C: +E5,h23 +G5,h23 + +track 1 +counter1D: +C6,h23 +G5,h23 + +track 1 +counter1E: +C6,h23 +E5,h23 + +track 1 +counter1F: +F5,h23 +G5#,h23 + +track 1 +counter1G: +C5,h23 +G5#,h23 + +track 1 +counter1H: +A5#,h23 +G5,h23 + +track 1 +counter1J: +G5#,h23 +G5,h23 + +track 1 +counter1K: +A5,h23 +F5,h23 + +track 1 +counter1L: +A5,h23 +C6,h23 + +//counter set 2 + +track 1 +counter2A: +E5,h11 +G4,h11 +C5,h11 +E5,h11 + +track 1 +counter2B: +F5,h11 +D5,h11 +A4#,h11 +D5,h11 + +track 1 +counter2C: +E5,h11 +C5,h11 +E5,h11 +G5,h11 + +track 1 +counter2D: +C6,h11 +G5,h11 +C6,h11 +G6,h11 + +track 1 +counter2E: +C6,h11 +G5,h11 +C6,h11 +C6,h5 E6,h5 + +track 1 +counter2F: +F6,h5 C6,h5 +G5#,h5 C6,h5 +G5#,h5 F5,h5 +C5,h5 F5,h5 + +track 1 +counter2G: +G5#,h5 F5,h5 +G5#,h5 C6,h5 +F6,h5 C6,h5 +D6#,h5 C6#,h5 + +track 1 +counter2H: +C6,h2 D6,h2 G6,h5 +C6,h5 G5,h5 +E5,h5 G5,h5 +C6,h5 G5,h5 + +track 1 +counter2J: +E5,h5 C5,h5 +E5,h5 G5,h5 +C6,h2 G5,h2 C6,h2 E6,h2 +C6,h2 G5,h2 C6,h2 E6,h2 + +track 1 +counter2K: +G5#,h5 F5,h5 +G5#,h5 C6,h5 +F6,h5 C6,h5 +D6#,h5 F6,h5 + +track 1 +counter2L: +G5,h5 A5#,h5 +A5#,h5 G5,h5 +A5#,h5 A5#,h5 +G5,h5 A5#,h5 + +track 1 +counter2M: +G5#,h5 F5,h5 +F5,h5 G5#,h5 +F5,h5 F5,h5 +G5#,h5 F5,h5 + +track 1 +counter2N: +C5#,h5 F5,h5 +G5#,h5 C6#,h5 +D6#,h5 A5#,h5 +A5#,h2 G5,h2 D5#,h2 G5,h2 + +track 1 +counter2O: +A5,h11 +A5,h3 C6,h3 F6,h3 +A6,h11 +A6,h3 F6,h3 C6,h3 + +track 1 +counter2P: +A5,h11 +A5,h3 C6,h3 F6,h3 +A6,h11 +C6,h3 C6,h3 C6,h3 + +//counter set 3 + +track 1 +counter3A: +G5,h5 -6 +-6 C6,h5 +G5,h5 G5,h5 +-12 + +track 1 +counter3B: +-6 F5,h5 +-6 F5,h2 F5,h2 +-6 F5,h5 +-6 F5,h5 + +track 1 +counter3C: +G5#,h5 -6 +-6 C5,h5 +G5#,h2 G5#,h2 -6 +C5,h11 + +track 1 +counter3D: +G5#,h5 -6 +-6 C5,h5 +G5#,h2 G5#,h2 -6 +G5#,h11 + +track 1 +counter3E: +G5#,h5 -6 +-6 C5,h5 +G5#,h2 G5#,h2 -6 +-12 + +track 1 +counter3F: +A5#,h5, -6 +-6 G5,h5 +A5#,h2 A5#,h2 -6 +G5,h11 + +track 1 +counter3G: +G5#,h5 -6 +-6 F5,h5 +G5#,h2 G5#,h2 -6 +F5,h11 + +track 1 +counter3H: +G5#,h5 -6 +-6 F5,h5 +G5#,h2 G5#,h2 -6 +G5#,h11 + +track 1 +counter3J: +A5,h11 +A5,h3 C6,h3 F6,h3 +A6,h11 +A6,h3 F6,h3 C6,h3 + +track 1 +counter3K: +A5,h11 +A5,h3 C6,h3 F6,h3 +A6,h11 +C6,h3 C6,h3 C6,h3 + +//melody track +track 2 +melodyA: +-48 + +track 2 +melodyB: +F4,h11 +F4,h3 F4,h3 F4,h3 +A4#,h11 +A4#,h3 A4#,h3 A4#,h3 + +track 2 +melodyC: +D5#,h3 D5#,h3 D5#,h3 +G5#,h3 G5#,h3 G5#,h3 +C6#,h3 C6#,h3 C6#,h3 +F6#,h3 F6#,h3 F6#,h3 + +track 2 +melodyD: +G6,h11 +G6,h3 G6,h3 G6,h3 +G6,h11 +G6,h3 G6,h3 G6,h3 + +track 2 +melodyE: +G6,h11 +E6,h11 +C6,h11 +G5,h11 + +track 2 +melodyF: +A5#,h23 +A5,h11 +A5#,h5 A5,h5 + +track 2 +melodyG: +G5,h11 +C6,h83 + +track 2 +melodyH: +A5#,h23 +A5,h11 +A5#,h5 C6,h5 + +track 2 +melodyJ: +E6,h83 +F6,h5 G6,h5 + +track 2 +melodyK: +G6#,h83 +G6,h5 F6,h5 + +track 2 +melodyL: +E6,h2 F6,h2 G6,h77 +F6,h5 G6,h5 + +track 2 +melodyM: +G6#,h83 +G6,h5 G6#,h5 + +track 2 +melodyN: +A6#,h17 +D6#,h17 +D7#,h11 + +track 2 +melodyO: +C7#,h35 +C7,h5 A6#,h5 + +track 2 +melodyP: +G6#,h23 +G6#,h23 + +track 2 +melodyQ: +A6,h95 + +//track 3 +//intro +track 3 +bassA: +C4,h11 +C4,h3 C4,h3 C4,h3 +C4,h11 +C4,h3 C4,h3 C4,h3 + +track 3 +bassB: +G3,h11 +G3,h3 G3,h3 G3,h3 +G3,h11 +G3,h3 G3,h3 G3,h3 + +//bass 1 +track 3 +bass1A: +C4,h11 +C5,h3 C4,h3 C4,h3 +C4,h11 +C5,h3 C4,h3 C4,h3 + +track 3 +bass1B: +A3#,h11 +A4#,h3 A3#,h3 A3#,h3 +A3#,h11 +A4#,h3 A3#,h3 A3#,h3 + +track 3 +bass1C: +C4,h11 +C5,h3 C4,h3 C4,h3 +C4,h3 G4,h3 C5,h3 +G5,h3 C5,h3 G4,h3 + +track 3 +bass1D: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F5,h5 F4,h5 + +track 3 +bass1E: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F4,h5 G4,h5 + +track 3 +bass1F: +D5#,h17 D5#,h5 +E5#,h17 E5#,h5 + +track 3 +bass1G: +F4,h11 +F4,h3 F4,h3 F4,h3 +F4,h11 +F4,h3 F4,h3 F4,h3 + +track 3 +bass1H: +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 + +track 3 +bass1J: +C4,h17 C4,h5 +G4,h5 G4,h5 +C5,h5 C5,h5 + +track 3 +bass1K: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F5,h5 F4,h5 + +track 3 +bass1L: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F4,h5 E4,h5 + +track 3 +bass1M: +D4#,h17 +A3#,h17 +D4#,h11 + +track 3 +bass1N: +C4#,h17 G3#,h5 +C4#,h17 G3#,h5 + +//bass 2 +track 3 +bass2A: +C4,h11 +C5,h3 C4,h3 C4,h3 +C4,h11 +C5,h3 C4,h3 C4,h3 + +track 3 +bass2B: +A3#,h11 +A4#,h3 A3#,h3 A3#,h3 +A3#,h11 +A4#,h3 A3#,h3 A3#,h3 + +track 3 +bass2C: +C4,h11 +C5,h3 C4,h3 C4,h3 +C4,h3 G4,h3 C5,h3 +G5,h3 C5,h3 G4,h3 + +track 3 +bass2D: +F4,h17 +C5,h17 +C4,h11 + +track 3 +bass2E: +F4,h17 +C5,h17 +F4,h5 G4,h5 + +track 3 +bass2F: +C4,h17 C4,h5 +G4,h5 G5,h5 +C5,h5 C5,h5 + +track 3 +bass2G: +F4,h17 +C5,h17 +F4,h5 E4,h5 + +track 3 +bass2H: +D4#,h17 +A3#,h17 +D4#,h11 + +track 3 +bass2J: +C4#,h17 G3#,h5 +C4#,h17 G3#,h5 + +track 3 +bass2K: +D5#,h17 D5#,h5 +E5#,h17 E5#,h5 + +track 3 +bass2L: +F4,h11 +F4,h3 F4,h3 F4,h3 +F4,h11 +F4,h3 F4,h3 F4,h3 + +track 3 +bass2M: +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 + +//bass 3 +track 3 +bass3A: +C4,h5 -6 +-6 G4,h5 +C4,h5 C4,h5 +-12 + +track 3 +bass3B: +-6 A3#,h5 +-6 A3#,h2 A3#,h2 +-6 A3#,h5 +-6 A3#,h5 + +track 3 +bass3C: +F4,h5 -6 +-6 C4,h5 +F4,h2 F4,h2 -6 +C4,h11 + +track 3 +bass3D: +F4,h5 -6 +-6 C4,h5 +F4,h2 F4,h2 -6 +-12 + +track 3 +bass3E: +D4#,h5 -6 +-6 A3#,h5 +D4#,h2 D4#,h2 -6 +A3#,h11 + +track 3 +bass3F: +C4#,h5 -6 +-6 G3#,h5 +C4#,h2 C4#,h2 -6 +G3#,h11 + +track 3 +bass3G: +C4#,h5 -6 +-6 G3#,h5 +C4#,h2 C4#,h2 -6 +D4#,h11 + +track 3 +bass3H: +F4,h11 +F4,h3 F4,h3 F4,h3 +F4,h11 +F4,h3 F4,h3 F4,h3 + +track 3 +bass3J: +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 + +//percussion +//perc 1 +track 4 +percA: +sn,-11 +sn,-3 sn,-3 sn,-3 +sn,-11 +sn,-3 sn,-3 sn,-3 + +track 4 +percB: +sn,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 + +track 4 +percC: +bs,-11 +sn,-3 sn,-3 sn,-3 +bs,-11 +sn,-3 sn,-3 sn,-3 + +track 4 +percD: +bs,-5 sn,-5 +sn,-5 bs,-5 +sn,-5 sn,-5 +sn,-2 sn,-2 sn,-5 + +track 4 +percE: +bs,-5 bs,-5 +sn,-5 sn,-5 +bs,-5 bs,-5 +sn,-5 sn,-5 + +track 4 +percF: +sn,-5 sn,-5 +tb,-5 tb,-5 +ta,-5 ta,-5 +bs,-2 sn,-2 sn,-5 + +track 4 +percG: +bs,-3 sn,-3 sn,-3 +bs,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 + +//perc 3 +track 4 +perc3A: +sn,-5 -6 +-6 sn,-5 +sn,-5 sn,-5 +-12 + +perc3B: +-6 sn,-5 +-6 sn,-2 sn,-2 +-6 sn,-5 +-6 sn,-5 + +perc3C: +sn,-5 -6 +-6 sn,-5 +sn,-5 sn,-5 +sn,-11 + +perc3D: +sn,-5 -6 +-6 sn,-5 +sn,-2 sn,-2 -6 +-12 + +perc3E: +sn,-11 +sn,-3 sn,-3 sn,-3 +sn,-11 +sn,-3 sn,-3 sn,-3 + +perc3F: +bs,-3 sn,-3 sn,-3 +bs,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 +sn,-3 sn,-3 sn,-3 diff --git a/Assets/Music/maybe_haiku.gbm b/Assets/Music/maybe_haiku.gbm new file mode 100644 index 0000000..944c6a9 --- /dev/null +++ b/Assets/Music/maybe_haiku.gbm @@ -0,0 +1,287 @@ +//FGB +//Haiku? +//Jacob Stevens +notesPerSecond 8 + +track 1 //countermelody + + instrument1 0044B23286 + + counterrest,counterrest,counterA,counterB //intro + counterC,counterD,counterA,counterB + counterC,counterD + + .repeat + + counterE,counterE,counterF,counterF //main + counterE,counterE,counterF,counterF + counterG,counterH,counterL,counterJ + counterK,counterK,counterL,counterL + + jmp .repeat + +track 2 //melody + + instrument2 80F70887 + + melodyA,melodyA,melodyB,melodyC //intro + melodyD,melodyE,melodyB,melodyC + melodyD,melodyE + + .repeat + + melodyB,melodyC,melodyD,melodyE //main + melodyB,melodyC,melodyD,melodyE2 + melodyF,melodyG,melodyF,melodyG + melodyH,melodyJ,melodyK,melodyA + + jmp .repeat + +track 3 //bass + + bassXA,bassXA,bassXA,bassXA //intro + bassXB,bassXB,bassXA,bassXA + bassXB,bassXC + + .repeat + + bassA,bassA,bassB,bassB //main + bassA,bassA,bassB,bassC + bassD,bassE,bassD,bassE + bassF,bassF,bassG,bassG + + jmp .repeat + +track 4 //percussion + + percA,percB,percC,percC //intro + percC,percC,percC,percC + percC,percC + + .repeat + + percD,percD,percD,percD + percD,percD,percD,percD + percD,percD,percD,percD + percD,percD,percD,percD + + jmp .repeat + +//counter +track 1: +counterrest: +-16 + +track 1 +counterA: +C6,h7 +E5,h7 + +track 1 +counterB: +G5,h7 +E5,h7 + +track 1 +counterC: +F5,h7 +G5#,h7 + +track 1 +counterD: +G5#,h7 +F5,h7 + +track 1 +counterE: +C5 G4 E4 G4 +C5 G4 E4 G4 +C5 G4 E4 G4 +C5 G4 E4 G4 + +track 1 +counterF: +C5# G4# F4 G4# +C5# G4# F4 G4# +C5# G4# F4 G4# +C5# G4# F4 G4# + +track 1 +counterG: +A5,h7 +A5,h7 + +track 1 +counterH: +A5#,h7 +A5#,h7 + +track 1 +counterJ: +A5# F5# C5# A4# +A5# F5# C5# A4# +A5# F5# C5# A4# +A5# F5# C5# A4# + +track 1 +counterK: +C5# G5# F4 G5# +C5# G5# F4 G5# +C5# G5# F4 G5# +C5# G5# F4 G5# + +track 1 +counterL: +A5 F5 C5 A4 +A5 F5 C5 A4 +A5 F5 C5 A4 +A5 F5 C5 A4 + +//melody +track 2 +melodyA: +-16 + +track 2 +melodyB: +G6,h5 E6,h +C6,h7 + +track 2 +melodyC: +-4 +E6,h3 +C6,h3 +E6,h3 + +track 2 +melodyD: +C6#,h5 F6,h +G6#,h7 + +track 2 +melodyE: +-4 +F6,h3 +G6#,h3 +A6#,h A6 G6# + +track 2 +melodyE2: +D6#,h5 G6,h +A6#,h7 + +track 2 +melodyF: +F6,h F6 A6 +C7,h F6 A6 +C7,h C7,h +C7,h A6 F6 + +track 2 +melodyG: +F6#,h F6# A6# +C7#,h F6# A6# +C7#,h C7#,h +C7#,h A6# F6# + +track 2 +melodyH: +F6,h D6#,h +F6,h D6# A5# +G5,h A5#,h5 + +track 2 +melodyJ: +-2 D6#,h +F6,h D6# A5# +G5,h A5#,h +D6#,h E6,h + +track 2 +melodyK: +F6,h15 + +//bass +track 3 +bassXA: +C5,h C5,h3 G4,h +C5,h C5,h5 + +track 3 +bassXB: +C5#,h C5#,h3 G4#,h +C4#,h C4#,h5 + +track 3 +bassXC: +C5#,h C5#,h3 G4#,h +C5#,h +F3# G3 G3# A3 A3# B3 + +track 3 +bassA: +C4,h C4,h +C5,h C4,h +C4,h C5,h +C4,h C5,h + +track 3 +bassB: +C4#,h C4#,h +C5#,h C4#,h +C4#,h C5#,h +C4#,h C5#,h + +track 3 +bassC: +D4#,h D4#,h +D5#,h D4#,h +D4#,h D5#,h +D4#,h D5#,h + +track 3 +bassD: +F4,h F4,h F4,h F4,h +F4,h F4,h F4,h F4,h + +track 3 +bassE: +F4#,h F4#,h F4#,h F4#,h +F4#,h F4#,h F4#,h F4#,h + +track 3 +bassF: +C4#,h C4#,h C4#,h C4#,h +D4#,h D4#,h D4#,h D4#,h + +track 3 +bassG: +F4,h F4,h C4,h C4,h +F4,h F4,h C4,h C4,h + +//percussion +track 4 +percA: +-16 + +track 4 +percB: +sn,-3 +sn,-3 +sn,- sn,- +sn,- sn sn + +track 4 +percC: +sn,- sn,- +sn sn sn,- +sn,- sn,- +sn sn sn,- + +track 4 +percD: +sn sn sn sn +sn,- sn sn +sn sn sn,- +sn,- sn sn \ No newline at end of file diff --git a/Assets/Music/moon_base_ba.gbm b/Assets/Music/moon_base_ba.gbm new file mode 100644 index 0000000..6250acf --- /dev/null +++ b/Assets/Music/moon_base_ba.gbm @@ -0,0 +1,369 @@ +//FGB +//Moon Base (BA) Music +//Jacob Stevens +notesPerSecond 8 //quarter = 120, one note equals one sixteenth + +track 1 //countermelody + counterA,counterB,counterA,counterC //intro + counterD,counterE,counterF + + .repeat + counterA,counterA,counterA,counterA //main + counterA,counterG,counterF,counterH + counterA,counterA,counterA,counterA + counterG,counterF,counterH,counterA + counterA,counterJ,counterK,counterL + counterM,counterN,counterJ,counterK + counterL,counterM,counterN + jmp .repeat + +track 2 //melody + + //melodyA,melodyB,melodyA,melodyC //intro + + melbassA,melbassB,melbassA,melbassC //new intro + melodyA,melodyD,melodyE + + .repeat + melodyA,melodyA,melodyF,melodyG //main + melodyH,melodyJ,melodyK,melodyL + melodyA,melodyF,melodyG,melodyH + melodyJ,melodyK,melodyL,melodyA + melodyA,melodyM,melodyN,melodyO + melodyP,melodyQ,melodyM,melodyN + melodyO,melodyP,melodyN + jmp .repeat + +track 3 //bass + bassRest,bassRest,bassRest,bassRest //intro + bassA,bassA,bassC + + .repeat + bassD,bassD,bassD,bassD //main + bassD,bassD,bassE,bassD + bassD,bassD,bassD,bassD + bassD,bassF,bassG,bassH + bassJ,bassK,bassK,bassK + bassK,bassK,bassK,bassK + bassK,bassK,bassL + jmp .repeat + +track 4 //percussion + + percA,percA,percA,percA //intro + percA,percA,percA + + .repeat + percB,percB,percB,percB //main + percB,percB,percC,percB + percB,percB,percB,percB + percB,percC,percC,percC + percC,percD,percD,percD + percD,percD,percD,percD + percD,percD,percD + + jmp .repeat + +//counter melody +track 1 +counterA: +-16 + +track 1 +counterB: +-4 +C7,h3 +C7,h3 +C7,h3 + +track 1 +counterC: +C7,h C6,h +C7,h C6,h +C7,h C6,h +C7,h C6,h + +track 1 +counterD: +D5#,h C5,h +F5#,h D5#,h +A5,h F5#,H +C6,h A5,h + +track 1 +counterE: +D6#,h C6,h +F6#,h D6#,h +A6,h A6#,h +C7,h A6,h + +track 1 +counterF: +C7,h3 +C7,h3 +C7,h C7,h +C7,h C7 C7 + +track 1 +counterG: +F6# F6 E6 D6# +G6# G6 F6# F6 +A6# A6 G6# G6 +C7 B6 A6# A6 + +track 1 +counterH: +C7,h3 +-12 + +track 1 +counterJ: +B6,h -2 +-12 + +track 1 +counterK: +B6,h B6,h +-12 + +track 1 +counterL: +B6 B6 B6,h +B6,h B6,h +-8 + +track 1 +counterM: +B6,h F6,h +B6,h F6,h +B6,h F6,h +B6 B6 F6,h + +track 1 +counterN: +B6,h15 + +//melody +track 2 +melbassA: +C5,h A4#,h +D5#,h C5,h +F5#,h D5#,h +C5,h A4#,h + +track 2 +melbassB: +C5,h C5,h +F7#,h3 +F7#,h3 +F7#,h3 + +track 2 +melbassC: +C5,h C5,h +F6#,h F7#,h +F6#,h F7#,h +F6#,h F7#,h + +track 2 +melodyA: +-16 + +track 2 +melodyB: +-4 +F7#,h3 +F7#,h3 +F7#,h3 + +track 2 +melodyC: +F6#,h F7#,h +F6#,h F7#,h +F6#,h F7#,h +F6#,h F7#,h + +track 2 +melodyD: +C6 C6 C5#,h +C6 C6 C5#,h +C6 C6 C5#,h +C6 C6 C5#,h + +track 2 +melodyE: +F6#,h3 +F6#,h3 +F6#,h F6#,h +F6#,h F6# F6# + +track 2 +melodyF: +C6,h5 A5# C6 +D6#,h C6#,h +G5#,h A5#,h + +track 2 +melodyG: +C6,h5 A5# C6 +D6#,h C6#,h +F6#,h F6,h + +track 2 +melodyH: +F6#,h5 +F6 F6# +A6# A6 G6# G6 +C7 B6 A6# A6 + +track 2 +melodyJ: +D7# D7 C7# C7 +F7# F7 E7 D7# +A7# A7 G7# G7 +C8 B7 A7# A7 + +track 2 +melodyK: +C8,h3 +C8,h3 +C8,h C8,h +C8 C8 C8,h + +track 2 +melodyL: +C8,h3 +-12 + +track 2 +melodyM: +F6,h -2 +-12 + +track 2 +melodyN: +F6,h F6,h +-12 + +track 2 +melodyO: +F6 F6 F6,h +F6,h F6,h +-8 + +track 2 +melodyP: +F6,h B5,h +F6,h B5,h +F6,h B5,h +F6 F6 B5,h + +track 2 +melodyQ: +F6,h15 + +//bass +track 3 +bassRest: +-16 + +track 3 +bassA: +C5,h A4#,h +D5#,h C5,h +F5#,h D5#,h +C5,h A4#,h + +track 3 +bassB: +C5,h C5,h +-12 + +track 3 +bassC: +C6,h C5,h +C6,h C5,h +C6 F5# C5,h +C6 F5# C5,h + +track 3 +bassD: +C4 C4 C5 C4 +F4# F4# F5# F4# +D4# D4# D5# D4# +C4# C4# C5# C4# + +track 3 +bassE: +C4 B3 A3# D4# +C4 F4# F4 G4 +D4# C4# G3 A3# +D4# C4# G3 A3# + +track 3 +bassF: +C4 B3 A3# D4# +C4 F4# F4 G4 +D4# C4# G3 A3# +D4# C4# G3 A3# + +track 3 +bassG: +C4 B3 A3# D4# +C4 F4# F4 G4 +D4# C4# G3 A3# +D4# C4# G3 A3# + +track 3 +bassH: +C4 B3 A3# D4# +C4 F4# F4 G4 +G4 C5 A4# A4 +G4# G4 F4# F4 + +track 3 +bassJ: +F4# A4# A4 G4# +D5# D5 C5# C5 +A4# F4# D4# A3# +C4# D4 D4# E4 + +track 3 +bassK: +F4 F4 F5 F4 +B4 B4 B5 B4 +G4# G4# G5# G4# +F4# F4# F5# F4# + +track 3 +bassL: +F4 F4 F5 F4 +B4 B4 B5 B4 +G4# G4# G5# G4# +F4# D4# D4 C4# + +//percussion +track 4 +percA: +-16 + +track 4 +percB: +bs bs bs,- +sn,- bs,- +bs bs bs,- +sn,h sn sn + +track 4 +percC: +bs bs sn sn +tb tb ta ta +bs bs sn sn +tb tb ta ta + +track 4 +percD: +-2 sn - +-2 sn sn +sn,- sn sn +sn sn sn,- diff --git a/Assets/Music/moon_base_haiku.gbm b/Assets/Music/moon_base_haiku.gbm new file mode 100644 index 0000000..416e7e4 --- /dev/null +++ b/Assets/Music/moon_base_haiku.gbm @@ -0,0 +1,301 @@ +//FGB +//Moon Base (Haiku) Music +//Jacob Stevens +notesPerSecond 9 //quarter = 140, one note equals one sixteenth + +track 1 //countermelody + instrument1 0044A23286 + counterA,counterB,counterC,counterD //intro + counterE,counterE + + .repeat + counterF,counterG,counterF,counterG //main + counterH,counterH,counterJ,counterJ + counterH,counterH,counterJ,counterK + counterE,counterE + jmp .repeat + +track 2 //melody + instrument2 80F70887 + melodyA,melodyB,melodyC,melodyD //intro + melodyE,melodyF + + .repeat + melodyG,melodyH,melodyG,melodyJ //main + melodyK,melodyL,melodyM,melodyN + melodyO,melodyP,melodyQ,melodyR + melodyS,melodyF + jmp .repeat + +track 3 //bass + + bassA,bassB,bassB,bassC //intro + bassD,bassD + + .repeat + bassE,bassF,bassE,bassF //main + bassG,bassG,bassH,bassH + bassG,bassG,bassH,bassJ + bassD,bassD + jmp .repeat + +track 4 //percussion + + percA,percB,percB,percC + percC,percD + + .repeat + percC,percC,percC,percC + percC,percD,percD,percD + percD,percD,percD,percD + percD,percD + jmp .repeat + +//counter +track 1 +counterA: +-2 + +track 1 +counterB: +G6,h D6#,h +C6,h D6#,h +C6,h G5,h +D5#,h G5,h + +track 1 +counterC: +D5#,h C5,h +D5#,h G5#,h +C6,h G5#,h +C6,h D6#,h + +track 1 +counterD: +F5,h D5,h +F5,h A5#,h +D6,h A5#,h +D6,h F6#,h + +track 1 +counterE: +E6 C6 G5 E5 +C6 G5 E5 C5 +G5 E5 C5 G4 +E5 C5 G4 E4 + +track 1 +counterF: +G5 E5 C5 G4 +G5 E5 C5 G4 +G5 E5 C5 G4 +G5 E5 C5 G4 + +track 1 +counterG: +A5 F5# D5 A4 +A5 F5# D5 A4 +A5 F5# D5 A4 +A5 F5# D5 A4 + +track 1 +counterH: +G5 D5 A4# G4 +G5 D5 A4# G4 +G5 D5 A4# G4 +G5 D5 A4# G4 + +track 1 +counterJ: +G5# D5# C5 G4# +G5# D5# C5 G4# +G5# D5# C5 G4# +G5# D5# C5 G4# + +track 1 +counterK: +A5# F5 D5 A4 +A5# F5 D5 A4 +A5# F5 D5 A4 +A5# F5 D5 A4 + +//melody +track 2 +melodyA: +A6# B6 + +track 2 +melodyB: +C7,h G6,h +D6#,h G6,h +D6#,h C6,h +G5,h C6,h + +track 2 +melodyC: +G5#,h D5#,h +G5#,h C6,h +D6#,h C6,h +D6#,h G6#,h + +track 2 +melodyD: +A5#,h F5,h +A5#,h D6,h +F6,h D6,h +F6,h A6#,h + +track 2 +melodyE: +C7,h15 + +track 2 +melodyF: +-16 + +track 2 +melodyG: +-2 C6,h +D6,h E6,h +G6,h E6,h5 + +track 2 +melodyH: +F6#,h D6,h +F6#,h A6,h +D7,h7 + +track 2 +melodyJ: +D6,h A5,h +D6,h F6#,h +A6,h3 +A6,h3 + +track 2 +melodyK: +A6#,h5 G6,h +D6,h7 + +track 2 +melodyL: +A6#,h5 G6,h +D6,h3 A6#,h3 + +track 2 +melodyM: +C7,h5 G6#,h +D6#,h7 + +track 2 +melodyN: +C7,h5 G6#,h +D6#,h3 G6#,h3 + +track 2 +melodyO: +G6,h5 D6,h +A5#,h7 + +track 2 +melodyP: +G6,h3 +D6,h3 +A5#,h3 +G5,h3 + +track 2 +melodyQ: +G5#,h5 +C6,h +D6#,h7 + +track 2 +melodyR: +A5#,h3 +D6,h3 +F6,h7 + +track 2 +melodyS: +E6,h15 + +//bass +track 3 +bassA: +-2 + +track 3 +bassB: +-16 + +track 3 +bassC: +A4#,h A4#,h +A4#,h A4# A4# +A4#,h A4#,h +A4#,h A4# A4# + +track 3 +bassD: +C4,h3 +C4,h C4,h +C4,h C4,h +C4,h C4 C4 + +track 3 +bassE: +C4,h E4 E4 +G4,h C5,h +C4,h C5 C5 +G4,h E4,h + +track 3 +bassF: +D4,h F4# F4# +A4,h D5,h +D4,h D5 D5 +A4,h F4#,h + +track 3 +bassG: +G3,h A3# A3# +D4,h G4,h +G3,h G4 G4 +D4,h A3,h + +track 3 +bassH: +G3#,h C4 C4 +D4#,h G5,h +G3#,h G4 G4 +D4#,h C4,h + +track 3 +bassJ: +A3#,h D4 D4 +F4,h A4#,h +A3#,h A4# A4# +F4,h D4,h + +//perc +track 4 +percA: +-2 + +track 4 +percB: +-16 + +track 4 +percC: +sn,- sn,- +sn,- sn sn +sn,- sn,- +sn,- sn sn + +track 4 +percD: +sn sn sn sn +-2 sn,- -2 sn,- +-2 sn sn diff --git a/Assets/Music/mysterious.gbm b/Assets/Music/mysterious.gbm new file mode 100644 index 0000000..b70818e --- /dev/null +++ b/Assets/Music/mysterious.gbm @@ -0,0 +1,199 @@ +//FGB +//Mysterious +//Jacob Stevens +notesPerSecond 4 //one note equals one eigth +transpose -4 + +track 1 //countermelody + + counterA,counterB + + .repeat + + counterA,counterB,counterC,counterD + counterC,counterD,counterA,counterB + counterA,counterB,counterC,counterD + counterC,counterD,counterE,counterF + counterE,counterF,counterG,counterH + counterA,counterB + + jmp .repeat + +track 2 //melody + + melodyA,melodyA + + .repeat + + melodyA,melodyA,melodyA,melodyA + melodyA,melodyA,melodyB,melodyB + melodyB,melodyB,melodyC,melodyC + melodyC,melodyC,melodyD,melodyE + melodyD,melodyE,melodyF,melodyG + melodyH,melodyA + + jmp .repeat + +track 3 //bass + + bassA,bassA + + .repeat + + bassB,bassC,bassD,bassE + bassD,bassF,bassB,bassC + bassB,bassC,bassD,bassE + bassD,bassG,bassH,bassJ + bassH,bassJ,bassK,bassL + bassB,bassC + + jmp .repeat + +//countermelody + +track 1 +counterA: +C5, D5# +G5 C6 +D6# G6 + +track 1 +counterB: +G6# G6 +D6# C6 +G5 D5# + +track 1 +counterC: +F5 G5# +C6 F6 +G6# C7 + +track 1 +counterD: +C7# C7 +G6# F6 +C6 G5# + +track 1 +counterE: +A5 D5 +-4 + +track 1 +counterF: +D6# G6 +E6 B5 +F6 G6# + +track 1 +counterG: +F6# A6 +G6 D6 +G6# B6 + +track 1 +counterH: +A6 G6# +G6 F6# +F6 E6 + +//melody +track 2 +melodyA: +-6 + +track 2 +melodyB: +C6 G6# G6 +C6 G6# G6 + +track 2 +melodyC: +F6 C6# C6 +F6 C6# C6 + +track 2 +melodyD: +G6# D6 +-4 + +track 2 +melodyE: +A5# D6# +B5 F5# +G5# C6 + +track 2 +melodyF: +C6# F6# +D6 A5# +D6# G6# + +track 2 +melodyG: +A5 A5# +B5 D5# +D5 C5# + +track 2 +melodyH: +C5,h5 + +//bass +track 3 +bassA: +-6 + +track 3 +bassB: +C4,h5 + +track 3 +bassC: +C5,h3 +G4,h + +track 3 +bassD: +G4#,h5 + +track 3 +bassE: +F4,h5 + +track 3 +bassF: +F4,h3 A3#,h + +track 3 +bassG: +A4#,h C5,h C5,h + +track 3 +bassH: +D5 D4 +D4 D4 +D4 D4 + +track 3 +bassJ: +D5# D4# +E5 E4 +E5 F4 + +track 3 +bassK: +F4# F5# +G4 G5 +G4# G5# + +track 3 +bassL: +A4 A4# +B4 D4# +D4 C4# + +track 3 +bassZ: +C5 \ No newline at end of file diff --git a/Assets/Music/shroom.gbm b/Assets/Music/shroom.gbm new file mode 100644 index 0000000..29743f3 --- /dev/null +++ b/Assets/Music/shroom.gbm @@ -0,0 +1,172 @@ +//FGB +//Shroom Hallucination +//Jacob Stevens +notesPerSecond 30 //quarter ~= 160, one note equals 1/12 of 1 beat + +track 1 //countermelody + + + melodyA + instrument1 6B80F20084 + melodyA + instrument1 6BC0F20084 + melodyB + instrument1 6B40F20084 + melodyC + instrument1 6B00F20084 + melodyD + + .repeat + instrument1 6B00F20084 + melodyE + instrument1 6B40F20084 + melodyF + instrument1 6B80F20084 + melodyG + instrument1 6BC0F20084 + melodyE + instrument1 6B40F20084 + melodyH + instrument1 6BC0F20084 + melodyJ + instrument1 6B00F20084 + melodyK + instrument1 6BC0F20084 + melodyL + instrument1 6B00F20084 + melodyM + instrument1 6B80F20084 + melodyN + instrument1 6BC0F20084 + melodyO + instrument1 6B00F20084 + melodyP + instrument1 6BC0F20084 + melodyQ + jmp .repeat + +track 2 //melody + instrument2 80F70887 + .repeat + wholeTone + jmp .repeat + +track 3 //bass + + .repeat + bass + jmp .repeat + +track 4 //percussion + + .repeat + perc + jmp .repeat + +//melody track +track 1 +melodyA: +-48 + +track 1 +melodyB: +F4,h11 +F4,h3 F4,h3 F4,h3 +A4#,h11 +A4#,h3 A4#,h3 A4#,h3 + +track 1 +melodyC: +D5#,h3 D5#,h3 D5#,h3 +G5#,h3 G5#,h3 G5#,h3 +C6#,h3 C6#,h3 C6#,h3 +F6#,h3 F6#,h3 F6#,h3 + +track 1 +melodyD: +G6,h11 +G6,h3 G6,h3 G6,h3 +G6,h11 +G6,h3 G6,h3 G6,h3 + +track 1 +melodyE: +G6,h11 +E6,h11 +C6,h11 +G5,h11 + +track 1 +melodyF: +A5#,h23 +A5,h11 +A5#,h5 A5,h5 + +track 1 +melodyG: +G5,h11 +C6,h83 + +track 1 +melodyH: +A5#,h23 +A5,h11 +A5#,h5 C6,h5 + +track 1 +melodyJ: +G6,h83 +F6,h5 E6,h5 + +track 1 +melodyK: +G6#,h83 +G6,h5 F6,h5 + +track 1 +melodyL: +E6,h2 F6,h2 G6,h77 +F6,h5 G6,h5 + +track 1 +melodyM: +G6#,h83 +G6,h5 G6#,h5 + +track 1 +melodyN: +A6#,h17 +D6#,h17 +D7#,h11 + +track 1 +melodyO: +C7#,h35 +C7,h5 A6#,h5 + +track 1 +melodyP: +G6#,h23 +G6#,h23 + +track 1 +melodyQ: +A6,h95 + +track 2 +wholeTone: +C5,h5 D5,h5 +E5,h5 F5#,h5 +G5#,h5 A5#,h5 + +C6,h5 A5#,h5 +G5#,h5 F5#,h5 +E5,h5 D5,h5 + +track 3 +bass: +E4,h5 C4,h5 A3#,h5 + +track 4 +perc: +sn -2 sn -2 bs -2 rd -2 ta -2 tb -2 diff --git a/Assets/Music/something_happy.gbm b/Assets/Music/something_happy.gbm new file mode 100644 index 0000000..635e381 --- /dev/null +++ b/Assets/Music/something_happy.gbm @@ -0,0 +1,14 @@ +//FGB +//nothing +//Jacob Stevens +notesPerSecond 9 //quarter = 140, one note equals one sixteenth + +track 1 //countermelody + + .repeat + melodyA + jmp .repeat + +track 1 +melodyA: +C5 E5 G5 E5 diff --git a/Assets/Music/spaceish.gbm b/Assets/Music/spaceish.gbm new file mode 100644 index 0000000..8169e96 --- /dev/null +++ b/Assets/Music/spaceish.gbm @@ -0,0 +1,224 @@ +//FGB +//Space-ish Music +//Jacob Stevens +notesPerSecond 12 + +track 2 //countermelody + + instrument2 44F23286 + + counterA,counterA + + .repeat + + counterA,counterA,counterA,counterA + counterA,counterA,counterB,counterA + counterA,counterA,counterA,counterB + counterC,counterC,counterD,counterD + counterE,counterE,counterF,counterG + counterA,counterA,counterA,counterA + counterA,counterA,counterB,counterA + counterA,counterA,counterA,counterB + counterC,counterC,counterD,counterD + counterE,counterE,counterH,counterH + counterE,counterE,counterF,counterG + + jmp .repeat + +track 1 //melody + + instrument1 0080F70887 + + melodyA,melodyA + + .repeat + + melodyA,melodyA,melodyA,melodyA + melodyB,melodyC,melodyD,melodyB + melodyC,melodyE,melodyF,melodyG + melodyG,melodyH,melodyA,melodyA + melodyA,melodyA,melodyB,melodyC + melodyD,melodyB,melodyC,melodyE + melodyF,melodyG,melodyG,melodyJ + melodyJ,melodyG,melodyG,melodyH + + jmp .repeat + +track 3 //bass + + bassZ,bassZ + + .repeat + + bassA,bassA,bassA,bassA + bassA,bassA,bassB,bassA + bassA,bassA,bassA,bassB + bassC,bassC,bassD,bassD + bassE,bassE,bassE,bassE + bassA,bassA,bassA,bassA + bassA,bassA,bassB,bassA + bassA,bassA,bassA,bassB + bassC,bassC,bassD,bassD + bassE,bassE,bassF,bassF + bassE,bassE,bassE,bassE + + jmp .repeat + +//countermelody + +track 2 +counterA: +C6,h G6,h +C7,h G6,h +A5#,h G6,h +A6#,h G6,h + +track 2 +counterB: +A5#,h F6,h +A6#,h F6,h +A5#,h F6,h +A6#,h F6,h + +track 2 +counterC: +A5#,h D6#,h +A6#,h D6#,h +A5#,h D6#,h +A6#,h D6#,h + +track 2 +counterD: +G5#,h C6#,h +G6#,h C6#,h +G5#,h C6#,h +G6#,h C6#,h + +track 2 +counterE: +D7#,h A6#,h +G6,h D6#,h +D7#,h A6#,h +G6,h D6#,h + +track 2 +counterF: +D7# A6# G6 D6# +A6# G6 D6# A5# +G7 D6# A5# G5 +D6# A5# G5 D5# + +track 2 +counterG: +D6# A5# G5 D5# +G7 D6# A5# G5 +A6# G6 D6# A5# +D7# A6# G6 D6# + +track 2 +counterH: +C7#,h G6#,h +F6,h C6#,h +C7#,h G6#,h +F6,h C6#,h + +//melody +track 1 +melodyA: +-16 + +track 1 +melodyB: +C6,h27 +A5#,h C6,h + +track 1 +melodyC: +D6,h3 +A5#,h3 +A5#,h D6,h5 + +track 1 +melodyD: +C6,h31 + +track 1 +melodyE: +D6#,h D6,h +C6,h A5#,h +G5,h9 +A5#,h +D6#,h A5#,h +G5,h A5#,h +D6#,h G6,h + +track 1 +melodyF: +F6,h D6#,h +C6#,h C6,h +G5#,h9 +C6#,h +F6,h C6#,h +G6#,h C6#,h +F6,h G6,h + +track 1 +melodyG: +G6,h5 +G5,h5 +G6,h3 + +track 1 +melodyH: +G6,h31 + +track 1 +melodyJ: +F6,h5 +F6,h5 +F6,h3 + +//bass +track 3 +bassZ: +-16 + +track 3 +bassA: +C4,h C4,h +C5,h C5,h +A3#,h A3#,h +A4#,h A4#,h + +track 3 +bassB: +A3#,h A3#,h +A4#,h A4#,h +A3#,h A3#,h +A4#,h A4#,h + +track 3 +bassC: +D4#,h D4#,h +D5#,h D5#,h +D4#,h D4#,h +D5#,h D5#,h + +track 3 +bassD: +C4#,h C4#,h +C5#,h C5#,h +C4#,h C4#,h +C5#,h C5#,h + +track 3 +bassE: +D4#,h D5#,h D5#,h +D4#,h D5#,h D5#,h +D4#,h D5#,h + +track 3 +bassF: +C4#,h C5#,h C5#,h +C4#,h C5#,h C5#,h +C4#,h C5#,h diff --git a/Assets/Music/takeoff.gbm b/Assets/Music/takeoff.gbm new file mode 100644 index 0000000..5905e82 --- /dev/null +++ b/Assets/Music/takeoff.gbm @@ -0,0 +1,1307 @@ +//FGB +//Appomattox takeoff sequence +//Jacob Stevens + +notesPerSecond 10 + +track 1 //countermelody + + .counterMain1 //section 1 + .counterA1 + counterA + cmp r0,1 + jmp eq,.counterB1 + cmp r0,2 + jmp eq,.counterB2 + cmp r0,3 + jmp eq,.counterB3 + cmp r0,4 + jmp eq,.counterB4 + cmp r0,5 + jmp eq,.counterB5 + .counterB1 + counterB + cmp r0,1 + jmp eq,.counterC1 + cmp r0,2 + jmp eq,.counterC2 + cmp r0,3 + jmp eq,.counterC3 + cmp r0,4 + jmp eq,.counterC4 + cmp r0,5 + jmp eq,.counterC5 + .counterC1 + counterC + cmp r0,1 + jmp eq,.counterD1 + cmp r0,2 + jmp eq,.counterD2 + cmp r0,3 + jmp eq,.counterD3 + cmp r0,4 + jmp eq,.counterD4 + cmp r0,5 + jmp eq,.counterD5 + .counterD1 + counterD + cmp r0,1 + jmp eq,.counterE1 + cmp r0,2 + jmp eq,.counterE2 + cmp r0,3 + jmp eq,.counterE3 + cmp r0,4 + jmp eq,.counterE4 + cmp r0,5 + jmp eq,.counterE5 + .counterE1 + counterE + cmp r0,1 + jmp eq,.counterF1 + cmp r0,2 + jmp eq,.counterF2 + cmp r0,3 + jmp eq,.counterF3 + cmp r0,4 + jmp eq,.counterF4 + cmp r0,5 + jmp eq,.counterF5 + .counterF1 + counterF + cmp r0,1 + jmp eq,.counterA1 + cmp r0,2 + jmp eq,.counterA2 + cmp r0,3 + jmp eq,.counterA3 + cmp r0,4 + jmp eq,.counterA4 + cmp r0,5 + jmp eq,.counterA5 + jmp counterMain1 + + .counterMain2 //section 2 + .counterA2 + counterA + cmp r0,1 + jmp eq,.counterB1 + cmp r0,2 + jmp eq,.counterB2 + cmp r0,3 + jmp eq,.counterB3 + cmp r0,4 + jmp eq,.counterB4 + cmp r0,5 + jmp eq,.counterB5 + .counterB2 + counterB + cmp r0,1 + jmp eq,.counterC1 + cmp r0,2 + jmp eq,.counterC2 + cmp r0,3 + jmp eq,.counterC3 + cmp r0,4 + jmp eq,.counterC4 + cmp r0,5 + jmp eq,.counterC5 + .counterC2 + counterC + cmp r0,1 + jmp eq,.counterD1 + cmp r0,2 + jmp eq,.counterD2 + cmp r0,3 + jmp eq,.counterD3 + cmp r0,4 + jmp eq,.counterD4 + cmp r0,5 + jmp eq,.counterD5 + .counterD2 + counterD + cmp r0,1 + jmp eq,.counterE1 + cmp r0,2 + jmp eq,.counterE2 + cmp r0,3 + jmp eq,.counterE3 + cmp r0,4 + jmp eq,.counterE4 + cmp r0,5 + jmp eq,.counterE5 + .counterE2 + counterE + cmp r0,1 + jmp eq,.counterF1 + cmp r0,2 + jmp eq,.counterF2 + cmp r0,3 + jmp eq,.counterF3 + cmp r0,4 + jmp eq,.counterF4 + cmp r0,5 + jmp eq,.counterF5 + .counterF2 + counterF + cmp r0,1 + jmp eq,.counterA1 + cmp r0,2 + jmp eq,.counterA2 + cmp r0,3 + jmp eq,.counterA3 + cmp r0,4 + jmp eq,.counterA4 + cmp r0,5 + jmp eq,.counterA5 + jmp counterMain2 + + .counterMain3 //section 3 + .counterA3 + counterA + cmp r0,1 + jmp eq,.counterB1 + cmp r0,2 + jmp eq,.counterB2 + cmp r0,3 + jmp eq,.counterB3 + cmp r0,4 + jmp eq,.counterB4 + cmp r0,5 + jmp eq,.counterB5 + .counterB3 + counterB + cmp r0,1 + jmp eq,.counterC1 + cmp r0,2 + jmp eq,.counterC2 + cmp r0,3 + jmp eq,.counterC3 + cmp r0,4 + jmp eq,.counterC4 + cmp r0,5 + jmp eq,.counterC5 + .counterC3 + counterC + cmp r0,1 + jmp eq,.counterD1 + cmp r0,2 + jmp eq,.counterD2 + cmp r0,3 + jmp eq,.counterD3 + cmp r0,4 + jmp eq,.counterD4 + cmp r0,5 + jmp eq,.counterD5 + .counterD3 + counterD + cmp r0,1 + jmp eq,.counterE1 + cmp r0,2 + jmp eq,.counterE2 + cmp r0,3 + jmp eq,.counterE3 + cmp r0,4 + jmp eq,.counterE4 + cmp r0,5 + jmp eq,.counterE5 + .counterE3 + counterE + cmp r0,1 + jmp eq,.counterF1 + cmp r0,2 + jmp eq,.counterF2 + cmp r0,3 + jmp eq,.counterF3 + cmp r0,4 + jmp eq,.counterF4 + cmp r0,5 + jmp eq,.counterF5 + .counterF3 + counterF + cmp r0,1 + jmp eq,.counterA1 + cmp r0,2 + jmp eq,.counterA2 + cmp r0,3 + jmp eq,.counterA3 + cmp r0,4 + jmp eq,.counterA4 + cmp r0,5 + jmp eq,.counterA5 + jmp counterMain3 + + .counterMain4 //section 4 + .counterA4 + counterA + cmp r0,1 + jmp eq,.counterB1 + cmp r0,2 + jmp eq,.counterB2 + cmp r0,3 + jmp eq,.counterB3 + cmp r0,4 + jmp eq,.counterB4 + cmp r0,5 + jmp eq,.counterB5 + .counterB4 + counterB + cmp r0,1 + jmp eq,.counterC1 + cmp r0,2 + jmp eq,.counterC2 + cmp r0,3 + jmp eq,.counterC3 + cmp r0,4 + jmp eq,.counterC4 + cmp r0,5 + jmp eq,.counterC5 + .counterC4 + counterC + cmp r0,1 + jmp eq,.counterD1 + cmp r0,2 + jmp eq,.counterD2 + cmp r0,3 + jmp eq,.counterD3 + cmp r0,4 + jmp eq,.counterD4 + cmp r0,5 + jmp eq,.counterD5 + .counterD4 + counterD + cmp r0,1 + jmp eq,.counterE1 + cmp r0,2 + jmp eq,.counterE2 + cmp r0,3 + jmp eq,.counterE3 + cmp r0,4 + jmp eq,.counterE4 + cmp r0,5 + jmp eq,.counterE5 + .counterE4 + counterE + cmp r0,1 + jmp eq,.counterF1 + cmp r0,2 + jmp eq,.counterF2 + cmp r0,3 + jmp eq,.counterF3 + cmp r0,4 + jmp eq,.counterF4 + cmp r0,5 + jmp eq,.counterF5 + .counterF4 + counterF + cmp r0,1 + jmp eq,.counterA1 + cmp r0,2 + jmp eq,.counterA2 + cmp r0,3 + jmp eq,.counterA3 + cmp r0,4 + jmp eq,.counterA4 + cmp r0,5 + jmp eq,.counterA5 + jmp counterMain4 + + .counterMain5 //section 5 + .counterA5 + counterG + cmp r0,1 + jmp eq,.counterB1 + cmp r0,2 + jmp eq,.counterB2 + cmp r0,3 + jmp eq,.counterB3 + cmp r0,4 + jmp eq,.counterB4 + cmp r0,5 + jmp eq,.counterB5 + .counterB5 + counterH + cmp r0,1 + jmp eq,.counterC1 + cmp r0,2 + jmp eq,.counterC2 + cmp r0,3 + jmp eq,.counterC3 + cmp r0,4 + jmp eq,.counterC4 + cmp r0,5 + jmp eq,.counterC5 + .counterC5 + counterJ + cmp r0,1 + jmp eq,.counterD1 + cmp r0,2 + jmp eq,.counterD2 + cmp r0,3 + jmp eq,.counterD3 + cmp r0,4 + jmp eq,.counterD4 + cmp r0,5 + jmp eq,.counterD5 + .counterD5 + counterK + cmp r0,1 + jmp eq,.counterE1 + cmp r0,2 + jmp eq,.counterE2 + cmp r0,3 + jmp eq,.counterE3 + cmp r0,4 + jmp eq,.counterE4 + cmp r0,5 + jmp eq,.counterE5 + .counterE5 + counterL + cmp r0,1 + jmp eq,.counterF1 + cmp r0,2 + jmp eq,.counterF2 + cmp r0,3 + jmp eq,.counterF3 + cmp r0,4 + jmp eq,.counterF4 + cmp r0,5 + jmp eq,.counterF5 + .counterF5 + counterM + cmp r0,1 + jmp eq,.counterA1 + cmp r0,2 + jmp eq,.counterA2 + cmp r0,3 + jmp eq,.counterA3 + cmp r0,4 + jmp eq,.counterA4 + cmp r0,5 + jmp eq,.counterA5 + jmp counterMain5 + + +track 2 //melody + .melodyMain1 //section 1 + .melodyA1 + melodyA + cmp r0,1 + jmp eq,.melodyB1 + cmp r0,2 + jmp eq,.melodyB2 + cmp r0,3 + jmp eq,.melodyB3 + cmp r0,4 + jmp eq,.melodyB4 + cmp r0,5 + jmp eq,.melodyB5 + .melodyB1 + melodyB + cmp r0,1 + jmp eq,.melodyC1 + cmp r0,2 + jmp eq,.melodyC2 + cmp r0,3 + jmp eq,.melodyC3 + cmp r0,4 + jmp eq,.melodyC4 + cmp r0,5 + jmp eq,.melodyC5 + .melodyC1 + melodyC + cmp r0,1 + jmp eq,.melodyD1 + cmp r0,2 + jmp eq,.melodyD2 + cmp r0,3 + jmp eq,.melodyD3 + cmp r0,4 + jmp eq,.melodyD4 + cmp r0,5 + jmp eq,.melodyD5 + .melodyD1 + melodyD + cmp r0,1 + jmp eq,.melodyE1 + cmp r0,2 + jmp eq,.melodyE2 + cmp r0,3 + jmp eq,.melodyE3 + cmp r0,4 + jmp eq,.melodyE4 + cmp r0,5 + jmp eq,.melodyE5 + .melodyE1 + melodyE + cmp r0,1 + jmp eq,.melodyF1 + cmp r0,2 + jmp eq,.melodyF2 + cmp r0,3 + jmp eq,.melodyF3 + cmp r0,4 + jmp eq,.melodyF4 + cmp r0,5 + jmp eq,.melodyF5 + .melodyF1 + melodyF + cmp r0,1 + jmp eq,.melodyA1 + cmp r0,2 + jmp eq,.melodyA2 + cmp r0,3 + jmp eq,.melodyA3 + cmp r0,4 + jmp eq,.melodyA4 + cmp r0,5 + jmp eq,.melodyA5 + jmp melodyMain1 + + .melodyMain2 //section 2 + .melodyA2 + melodyA + cmp r0,1 + jmp eq,.melodyB1 + cmp r0,2 + jmp eq,.melodyB2 + cmp r0,3 + jmp eq,.melodyB3 + cmp r0,4 + jmp eq,.melodyB4 + cmp r0,5 + jmp eq,.melodyB5 + .melodyB2 + melodyB + cmp r0,1 + jmp eq,.melodyC1 + cmp r0,2 + jmp eq,.melodyC2 + cmp r0,3 + jmp eq,.melodyC3 + cmp r0,4 + jmp eq,.melodyC4 + cmp r0,5 + jmp eq,.melodyC5 + .melodyC2 + melodyC + cmp r0,1 + jmp eq,.melodyD1 + cmp r0,2 + jmp eq,.melodyD2 + cmp r0,3 + jmp eq,.melodyD3 + cmp r0,4 + jmp eq,.melodyD4 + cmp r0,5 + jmp eq,.melodyD5 + .melodyD2 + melodyD + cmp r0,1 + jmp eq,.melodyE1 + cmp r0,2 + jmp eq,.melodyE2 + cmp r0,3 + jmp eq,.melodyE3 + cmp r0,4 + jmp eq,.melodyE4 + cmp r0,5 + jmp eq,.melodyE5 + .melodyE2 + melodyE + cmp r0,1 + jmp eq,.melodyF1 + cmp r0,2 + jmp eq,.melodyF2 + cmp r0,3 + jmp eq,.melodyF3 + cmp r0,4 + jmp eq,.melodyF4 + cmp r0,5 + jmp eq,.melodyF5 + .melodyF2 + melodyF + cmp r0,1 + jmp eq,.melodyA1 + cmp r0,2 + jmp eq,.melodyA2 + cmp r0,3 + jmp eq,.melodyA3 + cmp r0,4 + jmp eq,.melodyA4 + cmp r0,5 + jmp eq,.melodyA5 + jmp melodyMain2 + + .melodyMain3 //section 3 + .melodyA3 + melodyG + cmp r0,1 + jmp eq,.melodyB1 + cmp r0,2 + jmp eq,.melodyB2 + cmp r0,3 + jmp eq,.melodyB3 + cmp r0,4 + jmp eq,.melodyB4 + cmp r0,5 + jmp eq,.melodyB5 + .melodyB3 + melodyH + cmp r0,1 + jmp eq,.melodyC1 + cmp r0,2 + jmp eq,.melodyC2 + cmp r0,3 + jmp eq,.melodyC3 + cmp r0,4 + jmp eq,.melodyC4 + cmp r0,5 + jmp eq,.melodyC5 + .melodyC3 + melodyJ + cmp r0,1 + jmp eq,.melodyD1 + cmp r0,2 + jmp eq,.melodyD2 + cmp r0,3 + jmp eq,.melodyD3 + cmp r0,4 + jmp eq,.melodyD4 + cmp r0,5 + jmp eq,.melodyD5 + .melodyD3 + melodyK + cmp r0,1 + jmp eq,.melodyE1 + cmp r0,2 + jmp eq,.melodyE2 + cmp r0,3 + jmp eq,.melodyE3 + cmp r0,4 + jmp eq,.melodyE4 + cmp r0,5 + jmp eq,.melodyE5 + .melodyE3 + melodyL + cmp r0,1 + jmp eq,.melodyF1 + cmp r0,2 + jmp eq,.melodyF2 + cmp r0,3 + jmp eq,.melodyF3 + cmp r0,4 + jmp eq,.melodyF4 + cmp r0,5 + jmp eq,.melodyF5 + .melodyF3 + melodyM + cmp r0,1 + jmp eq,.melodyA1 + cmp r0,2 + jmp eq,.melodyA2 + cmp r0,3 + jmp eq,.melodyA3 + cmp r0,4 + jmp eq,.melodyA4 + cmp r0,5 + jmp eq,.melodyA5 + jmp melodyMain3 + + .melodyMain4 //section 4 + .melodyA4 + melodyN + cmp r0,1 + jmp eq,.melodyB1 + cmp r0,2 + jmp eq,.melodyB2 + cmp r0,3 + jmp eq,.melodyB3 + cmp r0,4 + jmp eq,.melodyB4 + cmp r0,5 + jmp eq,.melodyB5 + .melodyB4 + melodyO + cmp r0,1 + jmp eq,.melodyC1 + cmp r0,2 + jmp eq,.melodyC2 + cmp r0,3 + jmp eq,.melodyC3 + cmp r0,4 + jmp eq,.melodyC4 + cmp r0,5 + jmp eq,.melodyC5 + .melodyC4 + melodyP + cmp r0,1 + jmp eq,.melodyD1 + cmp r0,2 + jmp eq,.melodyD2 + cmp r0,3 + jmp eq,.melodyD3 + cmp r0,4 + jmp eq,.melodyD4 + cmp r0,5 + jmp eq,.melodyD5 + .melodyD4 + melodyQ + cmp r0,1 + jmp eq,.melodyE1 + cmp r0,2 + jmp eq,.melodyE2 + cmp r0,3 + jmp eq,.melodyE3 + cmp r0,4 + jmp eq,.melodyE4 + cmp r0,5 + jmp eq,.melodyE5 + .melodyE4 + melodyR + cmp r0,1 + jmp eq,.melodyF1 + cmp r0,2 + jmp eq,.melodyF2 + cmp r0,3 + jmp eq,.melodyF3 + cmp r0,4 + jmp eq,.melodyF4 + cmp r0,5 + jmp eq,.melodyF5 + .melodyF4 + melodyS + cmp r0,1 + jmp eq,.melodyA1 + cmp r0,2 + jmp eq,.melodyA2 + cmp r0,3 + jmp eq,.melodyA3 + cmp r0,4 + jmp eq,.melodyA4 + cmp r0,5 + jmp eq,.melodyA5 + jmp melodyMain4 + + .melodyMain5 //section 5 + .melodyA5 + melodyN + cmp r0,1 + jmp eq,.melodyB1 + cmp r0,2 + jmp eq,.melodyB2 + cmp r0,3 + jmp eq,.melodyB3 + cmp r0,4 + jmp eq,.melodyB4 + cmp r0,5 + jmp eq,.melodyB5 + .melodyB5 + melodyO + cmp r0,1 + jmp eq,.melodyC1 + cmp r0,2 + jmp eq,.melodyC2 + cmp r0,3 + jmp eq,.melodyC3 + cmp r0,4 + jmp eq,.melodyC4 + cmp r0,5 + jmp eq,.melodyC5 + .melodyC5 + melodyP + cmp r0,1 + jmp eq,.melodyD1 + cmp r0,2 + jmp eq,.melodyD2 + cmp r0,3 + jmp eq,.melodyD3 + cmp r0,4 + jmp eq,.melodyD4 + cmp r0,5 + jmp eq,.melodyD5 + .melodyD5 + melodyQ + cmp r0,1 + jmp eq,.melodyE1 + cmp r0,2 + jmp eq,.melodyE2 + cmp r0,3 + jmp eq,.melodyE3 + cmp r0,4 + jmp eq,.melodyE4 + cmp r0,5 + jmp eq,.melodyE5 + .melodyE5 + melodyR + cmp r0,1 + jmp eq,.melodyF1 + cmp r0,2 + jmp eq,.melodyF2 + cmp r0,3 + jmp eq,.melodyF3 + cmp r0,4 + jmp eq,.melodyF4 + cmp r0,5 + jmp eq,.melodyF5 + .melodyF5 + melodyS + cmp r0,1 + jmp eq,.melodyA1 + cmp r0,2 + jmp eq,.melodyA2 + cmp r0,3 + jmp eq,.melodyA3 + cmp r0,4 + jmp eq,.melodyA4 + cmp r0,5 + jmp eq,.melodyA5 + jmp melodyMain5 + +track 3 //bass + .bassMain1 //section 1 + .bassA1 + bassA + cmp r0,1 + jmp eq,.bassB1 + cmp r0,2 + jmp eq,.bassB2 + cmp r0,3 + jmp eq,.bassB3 + cmp r0,4 + jmp eq,.bassB4 + cmp r0,5 + jmp eq,.bassB5 + .bassB1 + bassB + cmp r0,1 + jmp eq,.bassC1 + cmp r0,2 + jmp eq,.bassC2 + cmp r0,3 + jmp eq,.bassC3 + cmp r0,4 + jmp eq,.bassC4 + cmp r0,5 + jmp eq,.bassC5 + .bassC1 + bassC + cmp r0,1 + jmp eq,.bassD1 + cmp r0,2 + jmp eq,.bassD2 + cmp r0,3 + jmp eq,.bassD3 + cmp r0,4 + jmp eq,.bassD4 + cmp r0,5 + jmp eq,.bassD5 + .bassD1 + bassD + cmp r0,1 + jmp eq,.bassE1 + cmp r0,2 + jmp eq,.bassE2 + cmp r0,3 + jmp eq,.bassE3 + cmp r0,4 + jmp eq,.bassE4 + cmp r0,5 + jmp eq,.bassE5 + .bassE1 + bassE + cmp r0,1 + jmp eq,.bassF1 + cmp r0,2 + jmp eq,.bassF2 + cmp r0,3 + jmp eq,.bassF3 + cmp r0,4 + jmp eq,.bassF4 + cmp r0,5 + jmp eq,.bassF5 + .bassF1 + bassF + cmp r0,1 + jmp eq,.bassA1 + cmp r0,2 + jmp eq,.bassA2 + cmp r0,3 + jmp eq,.bassA3 + cmp r0,4 + jmp eq,.bassA4 + cmp r0,5 + jmp eq,.bassA5 + jmp bassMain1 + + .bassMain2 //section 2 + .bassA2 + bassG + cmp r0,1 + jmp eq,.bassB1 + cmp r0,2 + jmp eq,.bassB2 + cmp r0,3 + jmp eq,.bassB3 + cmp r0,4 + jmp eq,.bassB4 + cmp r0,5 + jmp eq,.bassB5 + .bassB2 + bassH + cmp r0,1 + jmp eq,.bassC1 + cmp r0,2 + jmp eq,.bassC2 + cmp r0,3 + jmp eq,.bassC3 + cmp r0,4 + jmp eq,.bassC4 + cmp r0,5 + jmp eq,.bassC5 + .bassC2 + bassJ + cmp r0,1 + jmp eq,.bassD1 + cmp r0,2 + jmp eq,.bassD2 + cmp r0,3 + jmp eq,.bassD3 + cmp r0,4 + jmp eq,.bassD4 + cmp r0,5 + jmp eq,.bassD5 + .bassD2 + bassK + cmp r0,1 + jmp eq,.bassE1 + cmp r0,2 + jmp eq,.bassE2 + cmp r0,3 + jmp eq,.bassE3 + cmp r0,4 + jmp eq,.bassE4 + cmp r0,5 + jmp eq,.bassE5 + .bassE2 + bassL + cmp r0,1 + jmp eq,.bassF1 + cmp r0,2 + jmp eq,.bassF2 + cmp r0,3 + jmp eq,.bassF3 + cmp r0,4 + jmp eq,.bassF4 + cmp r0,5 + jmp eq,.bassF5 + .bassF2 + bassM + cmp r0,1 + jmp eq,.bassA1 + cmp r0,2 + jmp eq,.bassA2 + cmp r0,3 + jmp eq,.bassA3 + cmp r0,4 + jmp eq,.bassA4 + cmp r0,5 + jmp eq,.bassA5 + jmp bassMain2 + + .bassMain3 //section 3 + .bassA3 + bassG + cmp r0,1 + jmp eq,.bassB1 + cmp r0,2 + jmp eq,.bassB2 + cmp r0,3 + jmp eq,.bassB3 + cmp r0,4 + jmp eq,.bassB4 + cmp r0,5 + jmp eq,.bassB5 + .bassB3 + bassH + cmp r0,1 + jmp eq,.bassC1 + cmp r0,2 + jmp eq,.bassC2 + cmp r0,3 + jmp eq,.bassC3 + cmp r0,4 + jmp eq,.bassC4 + cmp r0,5 + jmp eq,.bassC5 + .bassC3 + bassJ + cmp r0,1 + jmp eq,.bassD1 + cmp r0,2 + jmp eq,.bassD2 + cmp r0,3 + jmp eq,.bassD3 + cmp r0,4 + jmp eq,.bassD4 + cmp r0,5 + jmp eq,.bassD5 + .bassD3 + bassK + cmp r0,1 + jmp eq,.bassE1 + cmp r0,2 + jmp eq,.bassE2 + cmp r0,3 + jmp eq,.bassE3 + cmp r0,4 + jmp eq,.bassE4 + cmp r0,5 + jmp eq,.bassE5 + .bassE3 + bassL + cmp r0,1 + jmp eq,.bassF1 + cmp r0,2 + jmp eq,.bassF2 + cmp r0,3 + jmp eq,.bassF3 + cmp r0,4 + jmp eq,.bassF4 + cmp r0,5 + jmp eq,.bassF5 + .bassF3 + bassM + cmp r0,1 + jmp eq,.bassA1 + cmp r0,2 + jmp eq,.bassA2 + cmp r0,3 + jmp eq,.bassA3 + cmp r0,4 + jmp eq,.bassA4 + cmp r0,5 + jmp eq,.bassA5 + jmp bassMain3 + + .bassMain4 //section 4 + .bassA4 + bassG + cmp r0,1 + jmp eq,.bassB1 + cmp r0,2 + jmp eq,.bassB2 + cmp r0,3 + jmp eq,.bassB3 + cmp r0,4 + jmp eq,.bassB4 + cmp r0,5 + jmp eq,.bassB5 + .bassB4 + bassH + cmp r0,1 + jmp eq,.bassC1 + cmp r0,2 + jmp eq,.bassC2 + cmp r0,3 + jmp eq,.bassC3 + cmp r0,4 + jmp eq,.bassC4 + cmp r0,5 + jmp eq,.bassC5 + .bassC4 + bassJ + cmp r0,1 + jmp eq,.bassD1 + cmp r0,2 + jmp eq,.bassD2 + cmp r0,3 + jmp eq,.bassD3 + cmp r0,4 + jmp eq,.bassD4 + cmp r0,5 + jmp eq,.bassD5 + .bassD4 + bassK + cmp r0,1 + jmp eq,.bassE1 + cmp r0,2 + jmp eq,.bassE2 + cmp r0,3 + jmp eq,.bassE3 + cmp r0,4 + jmp eq,.bassE4 + cmp r0,5 + jmp eq,.bassE5 + .bassE4 + bassL + cmp r0,1 + jmp eq,.bassF1 + cmp r0,2 + jmp eq,.bassF2 + cmp r0,3 + jmp eq,.bassF3 + cmp r0,4 + jmp eq,.bassF4 + cmp r0,5 + jmp eq,.bassF5 + .bassF4 + bassM + cmp r0,1 + jmp eq,.bassA1 + cmp r0,2 + jmp eq,.bassA2 + cmp r0,3 + jmp eq,.bassA3 + cmp r0,4 + jmp eq,.bassA4 + cmp r0,5 + jmp eq,.bassA5 + jmp bassMain4 + + .bassMain5 //section 5 + .bassA5 + bassG + cmp r0,1 + jmp eq,.bassB1 + cmp r0,2 + jmp eq,.bassB2 + cmp r0,3 + jmp eq,.bassB3 + cmp r0,4 + jmp eq,.bassB4 + cmp r0,5 + jmp eq,.bassB5 + .bassB5 + bassH + cmp r0,1 + jmp eq,.bassC1 + cmp r0,2 + jmp eq,.bassC2 + cmp r0,3 + jmp eq,.bassC3 + cmp r0,4 + jmp eq,.bassC4 + cmp r0,5 + jmp eq,.bassC5 + .bassC5 + bassJ + cmp r0,1 + jmp eq,.bassD1 + cmp r0,2 + jmp eq,.bassD2 + cmp r0,3 + jmp eq,.bassD3 + cmp r0,4 + jmp eq,.bassD4 + cmp r0,5 + jmp eq,.bassD5 + .bassD5 + bassK + cmp r0,1 + jmp eq,.bassE1 + cmp r0,2 + jmp eq,.bassE2 + cmp r0,3 + jmp eq,.bassE3 + cmp r0,4 + jmp eq,.bassE4 + cmp r0,5 + jmp eq,.bassE5 + .bassE5 + bassL + cmp r0,1 + jmp eq,.bassF1 + cmp r0,2 + jmp eq,.bassF2 + cmp r0,3 + jmp eq,.bassF3 + cmp r0,4 + jmp eq,.bassF4 + cmp r0,5 + jmp eq,.bassF5 + .bassF5 + bassM + cmp r0,1 + jmp eq,.bassA1 + cmp r0,2 + jmp eq,.bassA2 + cmp r0,3 + jmp eq,.bassA3 + cmp r0,4 + jmp eq,.bassA4 + cmp r0,5 + jmp eq,.bassA5 + jmp bassMain5 + + +//countermelody +track 1 +counterA: +G5,h E5,h C5,h + +track 1 +counterB: +G5,h G5,h E5,h + +track 1 +counterC: +C5,h G5,h + +track 1 +counterD: +A5,h F5#,h D5,h + +track 1 +counterE: +F5#,h A5,h F5#,h + +track 1 +counterF: +D5,h F5#,h + +track 1 +counterG: +C7 G6 E6 C6 G6 C6 + +track 1 +counterH: +E7 C7 G6 E6 G6 E6 + +track 1 +counterJ: +G6 E6 C6 G5 + +track 1 +counterK: +F7# D7 A6 F6# A6 F6# + +track 1 +counterL: +A7 F7# D7 A6 D7 A7 + +track 1 +counterM: +D7 A6 F6# D6 + +//melody +track 2 +melodyA: +-6 + +track 2 +melodyB: +-6 + +track 2 +melodyC: +-4 + +track 2 +melodyD: +-6 + +track 2 +melodyE: +-6 + +track 2 +melodyF: +-4 + +track 2 +melodyG: +C6,h G5,h E5,h + +track 2 +melodyH: +C6,h C6,h G5,h + +track 2 +melodyJ: +E5,h C6,h + +track 2 +melodyK: +D6,h A5,h F5#,h + +track 2 +melodyL: +A5,h D6,h A5,h + +track 2 +melodyM: +F5#,h A5,h + +track 2 +melodyN: +E6,h C6 D6 E6,h + +track 2 +melodyO: +G6,h E6,h C6 D6 + +track 2 +melodyP: +E6,h G6,h + +track 2 +melodyQ: +F6# D6 A5 F5# D5,h + +track 2 +melodyR: +F6# D6 F6# D6 A5 F5# + +track 2 +melodyS: +D5,h F5#,h + +//bass +track 3 +bassA: +-6 + +track 3 +bassB: +-6 + +track 3 +bassC: +-4 + +track 3 +bassD: +-6 + +track 3 +bassE: +-6 + +track 3 +bassF: +-4 + +track 3 +bassG: +C4,h5 + +track 3 +bassH: +C4,h5 + +track 3 +bassJ: +C4,h3 + +track 3 +bassK: +D4,h5 + +track 3 +bassL: +D4,h5 + +track 3 +bassM: +D4,h3 diff --git a/Assets/Music/wedding.gbm b/Assets/Music/wedding.gbm new file mode 100644 index 0000000..0c9f4a7 --- /dev/null +++ b/Assets/Music/wedding.gbm @@ -0,0 +1,516 @@ +//FGB +//Main In-Game Music +//Jacob Stevens +notesPerSecond 30 //quarter ~= 160, one note equals 1/12 of 1 beat + +track 1 //countermelody + + counter1,counter1,counter2,counter3 + counter4 + + .repeat + instrument1 0044F23286 + + counter5,counter6,counter7 + counter8,counter9,counter10,counter11 + counter12,counter13,counter6,counter7 + counter8,counter9,counter10,counter14 + counter6,counter15,counter16,counter17 + counter18,counter19,counter20,counter21 + counter22,counter23,counter24,counter25 + counter26,counter27,counter28,counter29 + counter30 + + jmp .repeat + +track 2 //melody + melody1,melody2,melody2,melody2 + melody3 + + .repeat + instrument2 80F70887 + + melody4,melody5,melody6,melody5 + melody7,melody8,melody9,melody10 + melody4,melody5,melody6,melody5 + melody7,melody8,melody11,melody5 + melody12,melody13,melody14,melody15 + melody12,melody16,melody12,melody17 + melody18,melody19,melody12,melody17 + melody18,melody19,melody20,melody21 + melody22,melody23,melody24,melody25 + + jmp .repeat + +track 3 //bass + + bass1,bass1,bass1,bass1, + bass2 + + .repeat + + bass3,bass4,bass5,bass4 + bass6,bass7,bass8,bass9 + bass6,bass4,bass5,bass4 + bass6,bass7,bass10,bassA + bass11,bass12,bass13,bass14 + bass11,bass12,bass11,bass11 + bass15,bass16,bass17,bass17 + bass15,bass18,bass19,bass20 + bass21,bass22,bass23,bass24 + + jmp .repeat + + +//counter melody segments + +track 1 +counter1: +-48 + +track 1 +counter2: +F4,h11 +F4,h3 F4,h3 F4,h3 +A4#,h11 +A4#,h3 A4#,h3 A4#,h3 + +track 1 +counter3: +D5#,h3 D5#,h3 D5#,h3 +G5#,h3 G5#,h3 G5#,h3 +C6#,h3 C6#,h3 C6#,h3 +F6#,h3 F6#,h3 F6#,h3 + +track 1 +counter4: +G6,h11 +G6,h3 G6,h3 G6,h3 +G6,h11 +-12 + +track 1 +counter5: +-24 +E5,h17 E5,h5 + +track 1 +counter6: +E5,h47 + +track 1 +counter7: +E5,h23 +D5,h17 B4,h5 + +track 1 +counter8: +C5,h47 + +track 1 +counter9: +E5,h23 +G5,h17 C6,h5 + +track 1 +counter10: +B5,h23 +C6,h17 A5,h5 + +track 1 +counter11: +C5,h23 +C5,h17 C5,h5 + +track 1 +counter12: +C5,h23 +B4,h23 + +track 1 +counter13: +C5,h23 +E5,h17 E5,h5 + +track 1 +counter14: +C5,h23 +B5,h17 G5,h5 + +track 1 +counter15: +E5,h11 +G5,h8 G5,h2 +G5,h23 + +track 1 +counter16: +D5,h11 +F5,h8 F5,h2 +F5,h23 + +track 1 +counter17: +D5#,h11 +G5#,h8 C6,h2 +D6#,h11 +C6,h8 G5#,h2 + +track 1 +counter18: +G5,h23 +D5,h23 + +track 1 +counter19: +G6,h11 +E6,h11 +C6,h11 +G5,h11 + +track 1 +counter20: +A5#,h23 +A5,h11 +A5#,h5 A5,h5 + +track 1 +counter21: +G5,h11 +C6,h35 + +track 1 +counter22: +-36 +F6,h5 G6,h5 + +track 1 +counter23: +G6#,h83 G6,h5 F6,h5 + +track 1 +counter24: +E6,h2 F6,h2 G6,h77 +F6,h5 G6,h5 + +track 1 +counter25: +G6#,h83 G6,h5 A6,h5 + +track 1 +counter26: +A6#,h17 D6#,h17 +D7#,h11 + +track 1 +counter27: +C7#,h35 +C7,h5 A6#,h5 + +track 1 +counter28: +G6#,h23 +G6#,h23 + +track 1 +counter29: +A6,h95 + +track 1 +counter30: +A6,h11 +-36 + +//melody sections +track 2 +melody1: +-48 + +track 2 +melody2: +C5,h11 +C5,h3 C5,h3 C5,h3 +C5,h11 +C5,h3 C5,h3 C5,h3 + + +track 2 +melody3: +G4,h11 +G4,h3 G4,h3 G4,h3 +G4,h11 +G5,h3 G5,h3 G5,h3 + +track 2 +melody4: +G5,h23 +C6,h17 C6,h5 + +track 2 +melody5: +C6,h47 + +track 2 +melody6: +G5,h23 +D6,h17 B5,h5 + +track 2 +melody7: +G5,h23 +C6,h17 E6,h5 + +track 2 +melody8: +G6,h23 +E6,h17 C6,h5 + +track 2 +melody9: +A5,h23 +B5,h17 C6,h5 + +track 2 +melody10: +D6,h47 + +track 2 +melody11: +A5,h23 +D6,h17 B5,h5 + +track 2 +melody12: +G5,h11 +C6,h8 C6,h2 +C6,h23 + +track 2 +melody13: +G5,h11 +D6,h8 A5#,h2 +C6,h23 + +track 2 +melody14: +G5#,h11 +C6,h8 D6#,h2 +G6#,h11 +D6#,h8 C6,h2 + +track 2 +melody15: +C6,h23 +B5,h23 + +track 2 +melody16: +G5,h11 +D6,h8 A5#,h2 +F5,h23 + +track 2 +melody17: +G5,h11 +D6,h8 B5,h2 +C6,h23 + +track 2 +melody18: +F5,h11 +G5#,h8 G5#,h2 +G5#,h23 + +track 2 +melody19: +F5,h11 C6,h8 G5#,h2 +F5,h23 + +track 2 +melody20: +A5#,h11 +D6#,h8 D6#,h2 +D6#,h23 + +track 2 +melody21: +G5#,h11 +C6#,h8 C6,h2 +C6#,h23 + +track 2 +melody22: +G5#,h11 C6#,h8 C6#,h2 +C6#,h23 + +track 2 +melody23: +C6,h11 +F6,h8 F6,h2 +F6,h23 + +track 2 +melody24: +C6,h11 +G6,h8 E6,h2 +F6,h23 + +track 2 +melody25: +F6,h11 +G5,h3 G5,h3 G5,h3 +G5,h11 +G5,h3 G5,h3 G5,h3 + +//BASS +track 3 +bass1: +C4,h11 +C4,h3 C4,h3 C4,h3 +C4,h11 +C4,h3 C4,h3 C4,h3 + + +track 3 +bass2: +G3,h11 +G3,h3 G3,h3 G3,h3 +G3,h11 +G3,h3 G3,h3 G3,h3 + +track 3 +bass3: +G3,h23 +C4,h17 C4,h5 + +track 3 +bass4: +C4,h47 + +track 3 +bass5: +C4,h23 +G4,h17 G4,h5 + +track 3 +bass6: +C4,h23 +C4,h17 C4,h5 + +track 3 +bass7: +E4,h23 +A4,h17 A4,h5 + +track 3 +bass8: +F4,h23 +F4,h17 F4,h5 + +track 3 +bass9: +G4,h47 + +track 3 +bass10: +F4,h23 +G4,h17 G4,h5 + +track 3 +bassA: +C4,h23 +C4,h5 C4,h5 +C5,h3 C4,h3 C4,h3 + + +track 3 +bass11: +C4,h11 +C5,h3 C4,h3 C4,h3 +C4,h11 +C5,h3 C4,h3 C4,h3 + +track 3 +bass12: +A3#,h11 +A4#,h3 A3#,h3 A3#,h3 +A3#,h11 +A4#,h3 A3#,h3 A3#,h3 + +track 3 +bass13: +G3#,h11 +G4#,h3 G3#,h3 G3,h3 +G3#,h11 +G4#,h3 G3#,h3 G3,h3 + +track 3 +bass14: +G3,h5 G4,h5 +G4,h5 G3,h5 +G4,h5 G4,h5 +G4,h3 G4,h3 G4,h3 + +track 3 +bass15: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F5,h5 F4,h5 + +track 3 +bass16: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F5,h5 G4,h5 + +track 3 +bass17: +C4,h17 C4,h5 +G4,h5 G4,h5 +C5,h5 C5,h5 + +track 3 +bass18: +F4,h5 F5,h5 +F4,h5 F4,h5 +F4,h5 F4,h5 +F5,h5 E4,h5 + +track 3 +bass19: +D4#,h17 +A3#,h17 +E4#,h11 + +track 3 +bass20: +C4#,h17 G3#,h5 +C4#,h17 G3#,h5 + +track 3 +bass21: +C4#,h17 C4#,h5 +D4#,h17 D4#,h5 + +track 3 +bass22: +F4,h11 +F4,h3 F4,h3 F4,h3 +F4,h11 +F4,h3 F4,h3 F4,h3 + +track 3 +bass23: +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 +F4,h3 C4,h3 C4,h3 + +track 3 +bass24: +F4,h11 +G3,h3 G3,h3 G3,h3 +G3,h11 +G3,h3 G3,h3 G3,h3 \ No newline at end of file diff --git a/Build.rogue b/Build.rogue new file mode 100644 index 0000000..7ec2875 --- /dev/null +++ b/Build.rogue @@ -0,0 +1,316 @@ +# To run this build file, install Rogue from github.com/AbePralle/Rogue and type "rogo" at the command line. + +#$ LIBRARIES(macOS) = rgbds( which:rgbasm ) + +# description()s are optional - Rogo uses introspection to determine which commands are available. +# 'rogo help default' displays the description for "default", etc. +description( "default", "The default action is performed when no other actions are specified. Use 'rogo default' to explicitly perform the default option." ) +description( "help", "Displays a list of all actions that can be performed by Rogo." ) + +augment Build + PROPERTIES + # These properties can be overridden with a Local.mk setting ROM_NAME=OtherName etc. + ROM_NAME = "FGB.gb" +endAugment + +routine rogo_fix + forEach (file in File.listing("Source/**")) + local content = File.load_as_string( file ) + local fixed = content.replacing( "\t", " " ) + if (fixed != content) + println file + File.save( file, fixed ) + endIf + endForEach +endRoutine + +routine rogo_default + rogo_build +endRoutine + +routine rogo_build + local rgbasm = System.find_program( "rgbasm" ) + if (not rgbasm) + throw Error( "Please install the RGBDS Game Boy assembler from https://github.com/rednex/rgbds" ) + endIf + + File.create_folder( "Build" ) + + local obj_files = String[] + forEach (asm_file in File.listing("Source/***/*.asm")) + local obj_file = "Build/$.obj" (File.filename(asm_file).leftmost(-4)) + execute "rgbasm -Wextra $ -o $" (asm_file,obj_file) + obj_files.add( obj_file ) + endForEach + + local rom_name = Build.ROM_NAME + execute "rgblink $ -o Build/$" (obj_files.join(" "),rom_name) + execute "rgbfix -v Build/$" (rom_name) + + local file_size = File.size( "ROM/" + rom_name ) + println "> Copy Build/$ -> ROM/$ ($ bytes)" (rom_name,rom_name,file_size.format(",")) + File.create_folder( "ROM" ) + File.copy( "Build/"+rom_name, "ROM/"+rom_name ) +endRoutine + +routine rogo_clean + verbose_delete( "Build" ) +endRoutine + +routine verbose_delete( filepath:String ) + if (File.exists(filepath)) + println "> Delete " + filepath + File.delete( filepath ) + endIf +endRoutine + +routine execute( commands:String, &suppress_error )->Logical + forEach (cmd in LineReader(commands)) + print( "> " ).println( cmd ) + if (System.run(cmd) != 0) + if (suppress_error) return false + else throw Error( "Build failed." ) + endIf + endForEach + return true +endRoutine + +#------------------------------------------------------------------------------ +# Introspection-based Launcher Framework +#------------------------------------------------------------------------------ +# Rogo is a "build your own build system" facilitator. At its core Rogo just recompiles build files if +# needed and then runs the build executable while forwarding any command line arguments. This file contains +# a default framework which uses introspection to turn command line arguments into parameterized routine calls. + +# Example: to handle the command "rogo abc xyz 5", define "routine rogo_abc_xyz( n:Int32 )". + +# "rogo_default" will run in the absence of any other command line argument. + +# The following "comment directives" can be used in this file to control how RogueC compiles it and to +# manage automatic dependency installation and linking. + +# Each of the following should be on a line beginning with the characters #$ (preceding whitespace is fine). +# Sample args are given. + +# ROGUEC = roguec # Path to roguec compiler to compile this file with +# ROGUEC_ARGS = --whatever # Additional options to pass to RogueC +# CPP = g++ -Wall -std=gnu++11 -fno-strict-aliasing -Wno-invalid-offsetof # C++ compiler path and/or invocation +# CPP_ARGS = -a -b -c # Additional C++ args +# LINK = true # Links following LIBRARIES with this Build file +# LINK = -lalpha -lbeta # Links following LIBRARIES and includes these additional flags +# LINK = false # Linking turned off for following LIBRARIES - info can still be obtained from #$LIBRARY_FLAGS() +# LINK(macOS) = ... # Options applying only to System.os=="macOS" (use with any OS and any comment directive) +# LIBRARIES = libalpha +# LIBRARIES = libbeta(library-name) +# LIBRARIES = libfreetype6-dev(freetype2) +# DEPENDENCIES = Library/Rogue/**/*.rogue +# +# LIBRARIES = name(package) +# LIBRARIES = name(package: install: link: which:) +# +# The following macro is replaced within this file (Build.rogue) - the libraries should also be declared in #$ LIBRARIES: +# +# $LIBRARY_FLAGS(lib1,lib2) # sample macro +# -> +# -Ipath/to/lib1/include -Lpath/to/lib1/library -I ... # sample replacement + +routine syntax( command:String, text:String ) + Build.rogo_syntax[ command ] = text +endRoutine + +routine description( command:String, text:String ) + Build.rogo_descriptions[ command ] = text +endRoutine + +routine help( command:String, description=null:String, syntax=null:String ) + if (description) Global.description( command, description ) + if (syntax) Global.syntax( command, syntax ) +endRoutine + +try + Build.launch +catch (err:Error) + Build.rogo_error = err + Build.on_error +endTry + +class Build [singleton] + PROPERTIES + rogo_syntax = StringTable<>() + rogo_descriptions = StringTable<>() + rogo_prefix = ?:{ $moduleName.count:$moduleName "::" || "" } + "rogo_" : String + rogo_command = "default" + rogo_args = @[] + rogo_error : Error + + LOCAL_DEFS_FILE = "Local.mk" + + METHODS + method launch + rogo_args.add( forEach in System.command_line_arguments ) + read_defs + on_launch + parse_args + dispatch_command + + method dispatch_command + local m = find_command( rogo_command ) + require m + + local args = @[] + forEach (arg in rogo_args) + which (arg) + case "true": args.add( true ) + case "false": args.add( false ) + case "null": args.add( NullValue ) + others: args.add( arg ) + endWhich + endForEach + if (m.parameter_count == 1 and args.count > 1) args = @[ args ] # Wrap args in a ValueList. + m.call( Global, args ) + + method find_command( name:String )->MethodInfo + return <>.find_method( rogo_prefix + name ) + + method on_error + Console.error.println "=" * 79 + Console.error.println rogo_error + Console.error.println "=" * 79 + on_exit + System.exit 1 + + method on_command_found + noAction + + method on_command_not_found + println "=" * 79 + println "ERROR: No such command '$'." (rogo_args.first) + println "=" * 79 + println + rogo_command = "help" + rogo_args.clear + on_command_found + + method on_launch + noAction + + method on_exit + noAction + + method parse_args + block + if (rogo_args.count) + local parts = String[] + parts.add( forEach in rogo_args ) + rogo_args.clear + + while (parts.count) + local cmd = _join( parts ) + if (find_command(cmd)) + rogo_command = cmd + on_command_found + escapeBlock + endIf + rogo_args.insert( parts.remove_last ) + endWhile + + on_command_not_found + endIf + + # Use default command + on_command_found + endBlock + + method read_defs + read_defs( LOCAL_DEFS_FILE ) + + method read_defs( defs_filepath:String ) + # Attempt to read defs from Local.mk + local overrides = String[] + if (File.exists(defs_filepath)) + forEach (line in LineReader(File(defs_filepath))) + if (line.contains("=")) + local name = line.before_first('=').trimmed + local value = line.after_first('=').trimmed + if (value.begins_with('"') or value.begins_with('\'')) + value = value.leftmost(-1).rightmost(-1) + endIf + local p = <>.find_property( name ) + if (p) + overrides.add( "$ = $" (name,value) ) + <>.set_property( this, p, Value(value) ) + endIf + endIf + endForEach + endIf + + method _join( value:Value )->String + local args = String[] + args.add( forEach in value ) + return args.join( "_" ) +endClass + + +routine rogo_help( command="":String ) + command = Build._join( Build.rogo_args ) + if (command.count) + local syntax = get_syntax( command ) + local success = false + if (syntax) + println "SYNTAX" + println " " + syntax + println + success = true + endIf + local description = get_description( command ) + if (description) + println "DESCRIPTION" + forEach (line in LineReader(description.word_wrapped(76))) + print( " " ).println( line ) + endForEach + println + success = true + endIf + if (success) + return + else + println "=" * 79 + println "ERROR: No such command '$'." (command) + println "=" * 79 + println + endIf + endIf + + println "USAGE" + local lines = String[] + forEach (m in <>.methods) + if (m.name.begins_with(Build.rogo_prefix)) + lines.add( " " + get_syntax(m.name.after_first(Build.rogo_prefix)) ) + endIf + endForEach + lines.sort( (a,b)=>(aString + if (Build.rogo_syntax.contains(m_name)) + return "rogo " + Build.rogo_syntax[ m_name ] + else + local m = <>.find_method( Build.rogo_prefix + m_name ) + if (not m) return null + local line = "rogo $" (m_name.replacing('_',' ')) + line += " <$>" (m.parameter_name(forEach in 0..String + if (Build.rogo_descriptions.contains(m_name)) + return Build.rogo_descriptions[ m_name ] + else + return null + endIf +endRoutine diff --git a/Data/Dialog/Landing/app_closed_gate_ba1.gtx b/Data/Dialog/Landing/app_closed_gate_ba1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d7683b271d81de02ecac5fb4037944d4cb7e75d7 GIT binary patch literal 76 zcmWN|K?;B%5Czb$v@g8>sRkWWG7}vM!%Zisw||S?_CDH#1QOUv&rs%Ob_mpPM3<=) acFJ76!cq~6c_OjAO|L!;kQc81=5u~>Ni%u? literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/app_closed_gate_ba2.gtx b/Data/Dialog/Landing/app_closed_gate_ba2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a76518184ffe8a63b716e275f5d43c44ca9d5726 GIT binary patch literal 25 jcmV+!0OtP!0}klf(&Yfs)8OXi0Oi@%2L|Nf(&N_jwf7If literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/app_closed_gate_ba3.gtx b/Data/Dialog/Landing/app_closed_gate_ba3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..ef19aa94af1f630ed61930055df99dd4c3dcc5b0 GIT binary patch literal 29 lcmZQ#=6!MP?p=nbH?J|=cy|8@3-^y literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/app_closed_gate_ba4.gtx b/Data/Dialog/Landing/app_closed_gate_ba4.gtx new file mode 100644 index 0000000000000000000000000000000000000000..7dfb627c4788bbdd83f2bed4dcd70b890414373f GIT binary patch literal 25 jcmV+!0OtP!0uS2q-T>I(+TYj!(%0qI;|B%h+1B3ewoeba literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/app_closed_gate_bs1.gtx b/Data/Dialog/Landing/app_closed_gate_bs1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9fecc6a211756ba4b7fe9174f45c72887afd2f1e GIT binary patch literal 45 zcmV+|0Mh>h0TI*YD7%~s48j8fnxNS!A0?1BD h$#W=Xh00NMWn0ubKd=hp220NV220NCK#-`D{W(%0qI;{e|30Mydq<U?X4*obpQYW literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/ba_guns.gtx b/Data/Dialog/Landing/ba_guns.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0791c95c0fefde39296b74341dd02a7e9c012810 GIT binary patch literal 32 ocmey*z`(@J`{LT&y9`fnUSqiN?EVuL?k7)g0r@W;JihY=02WOXegFUf literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/ba_return_1.gtx b/Data/Dialog/Landing/ba_return_1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..7960d1d9b44949dac4a022d2b117dfd45eaec0db GIT binary patch literal 14 WcmZQ%;eK$F;qv1LPj6m({00Cr3<$#j literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/ba_whataboutspare.gtx b/Data/Dialog/Landing/ba_whataboutspare.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c42f4285ca0d24bb6018efe8d0e9a30fe1be7655 GIT binary patch literal 28 mcmV+%0OSAv000654(Qp^$RsvR0$D?_gM3MvU1~=BSWS@%)7*X_yb%(2|V3%=jc< UB3*cqLimG7c7I-KoTVZ6AM(3n%K!iX literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/bs_cool.gtx b/Data/Dialog/Landing/bs_cool.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c175c5eafd6a3faa4dd99357c0838fcadf66eaa7 GIT binary patch literal 11 Scmey*z`)4PdgZ}`yB`4fM1x*aO$o;x8Au?SnYGnA` a81qR*6DyQjDgk=XlHEXFto|`r)8_+IYcj_G literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/bs_to_guard_3.gtx b/Data/Dialog/Landing/bs_to_guard_3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..dc00a8b5355c5032181ba146c4b2aa9b78bfe19e GIT binary patch literal 57 zcmV~$Q4RnR3U0N35%=Hmeo<>27l0Oi@%0NU8!+U45d-v|WU G*6QuE?;flG literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/bs_wasspare.gtx b/Data/Dialog/Landing/bs_wasspare.gtx new file mode 100644 index 0000000000000000000000000000000000000000..efa7ecc01aba2061bd977fe9cf55dfec7a14dbc8 GIT binary patch literal 27 lcmV+$0ObGw000664CUF<XU;nL&Q?d`mg5AXm0 literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/finished.gtx b/Data/Dialog/Landing/finished.gtx new file mode 100644 index 0000000000000000000000000000000000000000..aa9123b87467b30cbc2ed438b46cc35560a1b557 GIT binary patch literal 109 zcmW;EF$w}O3h_s83BkJ(!3$)_e4YvYCRu=!pD ymL{Xp6wm*j6=6{yzX;iG(h4}K9(Ly#;NdKkOd|0e3f+0fsHzoB|dcN#C-v@8Fh1v5;NSA)0TI;T-qrx#=G55$)ZO6Z*5mD@fEb4W literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/guard2.gtx b/Data/Dialog/Landing/guard2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..3674cf4f581a22769936199b05cd6b4a977dd90a GIT binary patch literal 36 ucmV+<0Neip0TJld^5fP3<=NH%;^x-Y-}2-G4&&hJ(%k^z(%{c!^@dK_XGO+*v literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/guard4.gtx b/Data/Dialog/Landing/guard4.gtx new file mode 100644 index 0000000000000000000000000000000000000000..170f2bb59f6cbad6899bb5740c810aec36af9e14 GIT binary patch literal 59 zcmV~$0SbU13E8MY&i=biX|)1^l-dI=iWh>OdEZ$gLa{4?NeF O>VPar{Nh@vY~LTlM_VTV literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/guard_pansies.gtx b/Data/Dialog/Landing/guard_pansies.gtx new file mode 100644 index 0000000000000000000000000000000000000000..64dedb6fc7717cc22d3ba2c0f42956b02699ddf8 GIT binary patch literal 39 xcmV+?0NDTk000635$M+P+13E!=GNBV^5g>!HyQ-=GN{2)ZpIM0}k2Na>+3o=9;O6q<)&daY+Su9U?Eu#2*5m5a;MM8|2iN1)*6Y^o DavUBE literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/hero_checkgate.gtx b/Data/Dialog/Landing/hero_checkgate.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b5ab632ef4514671208a95e8d7bd8b9b79ea9fe5 GIT binary patch literal 251 zcmYk#!EVAZ5QO0|7?7X{CF0fkl6@RwZ(|daMfMtm(hK6=rj`)g<}&}MmzaIx_X{i4 zy5JCyiE!czooJ9XR6CGK5Krig&@_zbO$?NA8m@BWH@Yg=(&z z%@6*&)||zJVZQy2ToR5Y3p!S<_{632wOfUUYQo*&Kq54`rY9KvQIo0mN3A#FLq;yP c&*N-&^_1wIpM+{E@xWVVZ#~%_T;v6fe?;D&xc~qF literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/hero_closedgate.gtx b/Data/Dialog/Landing/hero_closedgate.gtx new file mode 100644 index 0000000000000000000000000000000000000000..5e5c8ed4ccc8e6c02a47b850ac030f98f59cb5e2 GIT binary patch literal 265 zcmYk1Sq_3g5JYQ~MfuQ3xR+5QUGf+aE8s*7U{t>MV>xWWmS~V(VV)3$&n3?iT2y_>N5PasNb3Wsb1R&J^>QMWFWwX376W6jE5yLGyjH!6io*RL zIC`$T-~>xe3fC2^1><9|KG6cHjhs-Rx$Jb=+w!y`k>g^p_&Dk!aFpJw{u()NA$_z8 zfsM6wCkwtHZZJdM)^CHQbSUldxn0bt8P2EgrtZeLhV3wsi}+frK2f&QB49GgiFqbf V^*(07<6kyd;zualznAXV?H3S5(EtDd literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/hero_whatever.gtx b/Data/Dialog/Landing/hero_whatever.gtx new file mode 100644 index 0000000000000000000000000000000000000000..64ad90d7573454d29b88cfdd3dff066d360e5987 GIT binary patch literal 257 zcmXw!(N4oK3`K7<=(I^t*#7?$_!+M?i`6!X;)JT&^29r&L%iH8%l5gpY4P-dpBoOQ zTYWC55^>E=OLHPOV6l`yabCaSZNWMH*LSRh(fOsAx2kwFq?)*~d8dod36cr~mMIR~ zrdNLOdP_Y`lO&ukQ)UEmDy&di#a&IOGxa0>5XtiHCFB?;#*hcrTicuj3v`LMmkUmWkhVeq1> literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/hero_whoareyou.gtx b/Data/Dialog/Landing/hero_whoareyou.gtx new file mode 100644 index 0000000000000000000000000000000000000000..32d90c4cbf3878ed379d51f0a69ae9d59a01d23b GIT binary patch literal 117 zcmWN}!3u*w420oXv4VQ36#95Rbc9F>E0Ju<;!(V7j`Q;|O^5c2dq!&BRmjf*${8-d za&>7^!EWq+V9i?D%78R^I4oqL7(2PV`h{0D#>NBiagK+LQAKg+A7q@`G1eI*!u0^F CB1A9% literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/intro.gtx b/Data/Dialog/Landing/intro.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0e2b2e883d34ebb537b603fbee54410832d09fb6 GIT binary patch literal 158 zcmWlR!485z3`9!;2f>T-|NpaSycD*}lCXBuHliUO_3C<>dGnI#>MqP9&=ou-Zd!NS zhhe`s=US*v7>ooIAIp7)75xkPu<};6Ae=ynQZd!p6Iy(OMS@9a0}l1^4{9hHmkd4T i%n8l-38WK?k#E{qj*Ov1>6~a|S^eG|K3PZ=#_tbgGibvA literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/intro2.gtx b/Data/Dialog/Landing/intro2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b7615a9edbdf1223d2cf0aed1502d14640668451 GIT binary patch literal 197 zcmXYr+X})k5CxByHx(-S{~xt&H_d9@4avqLBKQYJ@$tYMW_H_sUmYG9fh6P9^JFRn zDJVQ-_W7~yL^0c)v53bnyE;Zw%hb<|fs&Kx<`8D98Kfg3m34QOQ7I*EQ*Iz%9jB_v zMEwc1<)=I^Ov$vsLXd&;3q8FyhxW&%7Dr2AoUD40k>S=V?22G{yN@mKuYP|3BkqIs literal 0 HcmV?d00001 diff --git a/Data/Dialog/Landing/intro3.gtx b/Data/Dialog/Landing/intro3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..6eb08170f1d169bc7729284248e5c824577fe302 GIT binary patch literal 68 zcmXZQF%Ez*2nEnTs4+Tv|4X5^hO{XL7@W!xbnuODoaRHCt5jPstepZb$gBxl-ve0` TEj^Btsmk@GIjIM%@critc@`_@ literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l0012_alldefused.gtx b/Data/Dialog/apocalypse/l0012_alldefused.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e8b191364f51e4bd94b09757f67ad3b0c111c676 GIT binary patch literal 308 zcmY+9!EVAZ5JblzC5ToI6o|uESMl{-#UuizZlb5b}IsVF%)83r0^op$%V@*dS2iW%$j zMXY1^i3JToEMeb9?@j2?#zZrmT!vw_wdSbL5hvs16MM07>g^Yp0>{KKiOSvR+7B0c zOe5aolyGRGZy4iXf>5V7aSB~-B(NB9F`VHp9rg{0P(tU}B%eq4^Fz5~x(>SSSyy?` z1~}Y4gIg0AiH>B3yUkL$G;UDT?#lEl^09haSQS?rR@*~wTC=Yhl_GL$e^LiE_@yAqFj6knX}4F$MH5Cy=ekS2|w_rKHD|Xkkc_9Z Zp&ybIOLy_|vC-iqvRH`OxZ^KZ#0wjkFfjlC literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1104_whereisgyro.gtx b/Data/Dialog/apocalypse/l1104_whereisgyro.gtx new file mode 100644 index 0000000000000000000000000000000000000000..ebe3aec56f5de7e8683b7165eb05f55d61b3ee87 GIT binary patch literal 73 zcmWN^F$#b%3d YVhF{R$;k5#Zqud)(T<^Zql=!;2as4V1^@s6 literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1204_allset.gtx b/Data/Dialog/apocalypse/l1204_allset.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9148704bd64381957c50c192d14bf9e18f4a6636 GIT binary patch literal 27 fcmey*z`)APd+X_^Ck&VF-eq`l?dcmX1_%TIuCNN} literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1204_datahere.gtx b/Data/Dialog/apocalypse/l1204_datahere.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b9100112a3b832e421fce4504c5263a01ad8bc69 GIT binary patch literal 73 zcmWN{K?;B%6a>(raN{BZ?|-QuO(=X2bf{c*f$FW_3xsJ^CU%pdbYwP$XztKOKRGYF WZ5v`oJy3+CYW!jGy>W-md49lcnzM)_Ym9{X65ZG7UiRn= r$B;d%ee%SERS&#-5{rUXUV1&bKG7o0H?RuvT!nICC^jXGkk-C`D*{F0 literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1204_gyro_button.gtx b/Data/Dialog/apocalypse/l1204_gyro_button.gtx new file mode 100644 index 0000000000000000000000000000000000000000..8ebc0219e56b01b4daa6f5f4c019d509690a0d7f GIT binary patch literal 98 zcmW;5K?;LF30(9{+v7Xy!+Ef@JF&)oS2`B?#=w pRiO+z^TD2OEbUn6l_nXny1k8TW+7Kd5z@vb_I{W|xsXQ>t{;B+Mg{-? literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1204_gyro_notthere.gtx b/Data/Dialog/apocalypse/l1204_gyro_notthere.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c99398b602db30b46826adc1c4d5f2c1ab026121 GIT binary patch literal 107 zcmWm4K@Nj33`Eh%f&(<-{)ZZ3x3EZzjN1w|8!k{__n-9tz>xB8@8hFzWtmkFv!+L} tTG<4}Tz?3&lqU+7qoP^dk88(x+Zwi&MX?2Axir!%Un+9-lMa5l_Y-ceM_&K{ literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1204_gyro_ofcourse.gtx b/Data/Dialog/apocalypse/l1204_gyro_ofcourse.gtx new file mode 100644 index 0000000000000000000000000000000000000000..62ee7331434e8cd5e17a4683f848b4ff4d682979 GIT binary patch literal 102 zcmWm6K?;K~5Czb$;9jKnKU7S{Hjw(mWKt0-*b8X7e()|}=tr07UD|UIY^*8ZF$?S^ s;QWcK1vxn{-Lz2gZo(5PrsAxdj0XzA1)f#g5c@I2u>K5B{u7n&4gFt2Z~y=R literal 0 HcmV?d00001 diff --git a/Data/Dialog/apocalypse/l1204_gyro_unfortunately.gtx b/Data/Dialog/apocalypse/l1204_gyro_unfortunately.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b837e8fc9a09b5b24e98839bf3b5622ee1f6a45d GIT binary patch literal 101 zcmWm5F$#b%3wi=+@TUU@?9&A%%U0D(^rf66=ZzA>icN b=r(?6r>ObDU_Dw!QR@;@+Moii{aNt?4pT4G literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/bs_nearKiwi.gtx b/Data/Dialog/distress/bs_nearKiwi.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d35fb5b47a5105443c055e6830f095304a4cd08d GIT binary patch literal 96 zcmWm6y9$6X3&I1fSC{w|jNx5Q9J-LxIVz+kB nYW?nFhZ{{GoU@&%!iBHRhs_qQl5~RUuRautU)5HSFvSBeD^ literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_cider.gtx b/Data/Dialog/distress/captain_cider.gtx new file mode 100644 index 0000000000000000000000000000000000000000..cb222f5fb6cfce3c2f0630b0b65f748185b618d8 GIT binary patch literal 52 zcmV-40L%aX000F84%yP$+~)28)!Nkn>fq)9664n1*51?B;{fH^)&SDs;oa5;2GrWs K*5mXF015yoDjt;p literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_goodness.gtx b/Data/Dialog/distress/captain_goodness.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e96d0d138cad2d66b8bdc60a59ba282c2a91217a GIT binary patch literal 46 zcmey*z`)AH|KKLWy;lr39z3{u|Jsu$Zy5z&T>JF+8pDJ83=f_?W_WSw)mttG5Ci~T C0vP}R literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_holdout.gtx b/Data/Dialog/distress/captain_holdout.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0c8506d9edd6f3097553d3391d6cae629d49c084 GIT binary patch literal 93 zcmWm0%ML&=5Cza%iG`iV|Nqp`N+)ziOiRSlo;a)X0(I4T#ia!~vMm2xKan8n>Y*iL l)*a-!Ih^ox*#pMH;t4~fBfvBTaN2awB)M+JVl2Vz{s0<}J9hv8 literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_no.gtx b/Data/Dialog/distress/captain_no.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9d1dcc3742f1e37b060641379e3acf8ddf02c7b2 GIT binary patch literal 17 Ucmey*z`)AEeE-24E(Qn$04+NM;{X5v literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_nostuff.gtx b/Data/Dialog/distress/captain_nostuff.gtx new file mode 100644 index 0000000000000000000000000000000000000000..8ada1423b6ba66e32b6c0baa18e1b069c4d79882 GIT binary patch literal 44 zcmey*z`)8RaR0$OhFc6bFFn7;@bm%0jR(wpS06Aud2sIy>-+A(eiva=wf$#|y literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_okay.gtx b/Data/Dialog/distress/captain_okay.gtx new file mode 100644 index 0000000000000000000000000000000000000000..115978dbe6290ca80702302ed592cb6a3440fab0 GIT binary patch literal 19 Wcmey*z`)AR`ryu`S8uo&AP@jV?FF3x literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/captain_seeyou.gtx b/Data/Dialog/distress/captain_seeyou.gtx new file mode 100644 index 0000000000000000000000000000000000000000..2a3ba7aa03383db3020cd7aaf562a8ccb2fe8735 GIT binary patch literal 41 wcmey*z`)8RaEsyUt*c)c9^AR~>K((AYu8w~Up;unaOv@bXZNqZJ_Z6AMXOX*Jmmx3a=LO5Cy=8k|rQnc>hBwJWODdg+y6IQrY{#Vv4x|*AGUKhC_E)%$TYs{uQmn X*Rva!+F*f&m|sTcOI*W-taf=kUNbEy literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/haiku_cider.gtx b/Data/Dialog/distress/haiku_cider.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e013b3af9ae47199d10a2570f3d4b8e24fba30ee GIT binary patch literal 78 zcmW;BK?;B%5CzbWP;Fgw|3eKr=)mZZj&+NI-uAt~7NVfi&G5=dl6m0tN{*s3oxAjc YVw#U#!{=&Hw-a literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/haiku_signal.gtx b/Data/Dialog/distress/haiku_signal.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c21cbe6199d6846429f147c3770798aa7a3dea22 GIT binary patch literal 72 zcmV~$OA3H63z(fNC}iUcmXFhzWqIb=|^P`D=pa&Av@+ADS5?q lFDsZTT&Q<9Wm3!Dfl!r7<&eKA_;Zn_lFYzz_)|)B*9+hyJ2(IU literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/lady_help.gtx b/Data/Dialog/distress/lady_help.gtx new file mode 100644 index 0000000000000000000000000000000000000000..8e19abe3e8411dc4a53a6c30f65a9ac8c450db90 GIT binary patch literal 75 zcmWN>K@LDL5CzaL*bp1;f2nDWcA}|?sfDDjfVX%r(6>|Mqz^o4A<50WrQcKO1)+bLdy?VpN0D=Guk`G=0 literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/lady_must.gtx b/Data/Dialog/distress/lady_must.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9848e4777033fa21ce6858f6d098419e41265fa1 GIT binary patch literal 28 gcmey*z`)AP_v*njhI`MRJY{(D^wO(0TnrEh0K%3F>;M1& literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/lady_no.gtx b/Data/Dialog/distress/lady_no.gtx new file mode 100644 index 0000000000000000000000000000000000000000..27dbe0c84b6c7cc01add79f82e49d075a8a12ccb GIT binary patch literal 52 zcmV-40L%aX000F666o2|<@D_U-{9>4=+*$<=H%rA4%pV^0MpXc+yLa@;NR>A2IS!5 Kg);t3IHa#Br^a2 literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/lady_poorCaptain.gtx b/Data/Dialog/distress/lady_poorCaptain.gtx new file mode 100644 index 0000000000000000000000000000000000000000..33d2697b810e46853b9138a83dd0b6ae5c3c5dce GIT binary patch literal 97 zcmWN}F$#b%3#J$T0O7`d+xEMeX06nc35dZ)H literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/lady_surrender.gtx b/Data/Dialog/distress/lady_surrender.gtx new file mode 100644 index 0000000000000000000000000000000000000000..6fcbd32307e50fcebabf4d35ae59d880b407334a GIT binary patch literal 92 zcmWm5Jqmy@3;XObbqR)KX#>iSE!!^WOvVc%` kGnT}LfwD2LEPjF{;V(^JKVziLsR*V;cWXOWBt`M-1)n!OM*si- literal 0 HcmV?d00001 diff --git a/Data/Dialog/distress/lady_wait.gtx b/Data/Dialog/distress/lady_wait.gtx new file mode 100644 index 0000000000000000000000000000000000000000..925680579072236e70c8340925ad2be048735590 GIT binary patch literal 73 zcmV~$K?;B%5Cza*(k2k<{AT;cPfgdw$nh$A#UYBHtBGq UOKOPTIvIZ`_TOn{(pBt!0Zn%+djJ3c literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_bringIt.gtx b/Data/Dialog/intro_bs/brainiac_bringIt.gtx new file mode 100644 index 0000000000000000000000000000000000000000..2cef948c9500d7ffb6036229f7e2d13408e31f4e GIT binary patch literal 38 wcmV+>0NMZl000974AbM%+TYsJ)Bxnx>jMqbH`kq=GNrp+Th>q0QmO+ E0CfQzCIA2c literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_computes1.gtx b/Data/Dialog/intro_bs/brainiac_computes1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..72af5b6287d4cfa664dab0260c82d347d4c2a4de GIT binary patch literal 54 zcmV-60LlOV000955A*Z$)8o?G-`djD0NT~-1q$Kg;M3jK-T>0;02A8Zj3!oA=)Pk literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_computes3.gtx b/Data/Dialog/intro_bs/brainiac_computes3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..ac7a401ea00d3366d2e98bdf4edcea40f1952b68 GIT binary patch literal 38 wcmV+>0NMZl000973-j~y)8o?G-`djD0uSKl*5lOO;MCmf0OZ!)*9ijn_r-n~(EtDd literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_computes4.gtx b/Data/Dialog/intro_bs/brainiac_computes4.gtx new file mode 100644 index 0000000000000000000000000000000000000000..8f5649fa3ec484cbc4a617f8b44cb4f4ce76556e GIT binary patch literal 43 zcmV+`0M!5g000973-j~y)8o?G-`djD1PtNQ&T*4^6c*6Rfd;p5=b-PYa!`1er| B9UTAw literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_computes5.gtx b/Data/Dialog/intro_bs/brainiac_computes5.gtx new file mode 100644 index 0000000000000000000000000000000000000000..11b03af7ac69805c0199ea7870ddd50810011e49 GIT binary patch literal 50 zcmV-20L}mZ000973-j~y)8o?G-`djD0uScl-Qd#I>j2f#< I*5v^B_Z3b%7 literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_computes6.gtx b/Data/Dialog/intro_bs/brainiac_computes6.gtx new file mode 100644 index 0000000000000000000000000000000000000000..856f71787be41222e0eca76482329dfb24931188 GIT binary patch literal 39 xcmV+?0NDTk000973-j~y)8o?G-`djD0ua>M*3{hV0NL8>0M_2p+T95P`1jI;7_k5V literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_computes7.gtx b/Data/Dialog/intro_bs/brainiac_computes7.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0ff1b34b27287c86f8bde217cccc256d77bc0b9f GIT binary patch literal 56 zcmV-80LTCT000973-j~y)8o?G-`djD0uTVz;OO7^-Qd#I>j2f#<W-0QmRhekBzE literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_detectIntruder.gtx b/Data/Dialog/intro_bs/brainiac_detectIntruder.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b4ead394bee3ac7dc9040805580760c43b173cbe GIT binary patch literal 38 wcmV+>0NMZl000645Yyw*+TYUJ)Bx4i<<`{Y>jMtj-{s@x)z;(f0QUI#;JWJ>nE(I) literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_idiotz.gtx b/Data/Dialog/intro_bs/brainiac_idiotz.gtx new file mode 100644 index 0000000000000000000000000000000000000000..357667066b4568e8234717aa026064f08affe61a GIT binary patch literal 41 zcmV+^0M`Hi0009557Xn)+TYsJ)Bxq#+TYyk0}kfn0Mgyv0NT~s;N|P>2?F@`^UN8T literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_justClose.gtx b/Data/Dialog/intro_bs/brainiac_justClose.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a2057ef8e64987101f2a82676597f2970a73a048 GIT binary patch literal 47 zcmV+~0MP&c000955Yyw*+TYsJ)Bxnx>j2;2?gI|n=H%r7)ZO6g)&S+%)&>XF;Nau! F?d_5>9rXYJ literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_lovzHelping.gtx b/Data/Dialog/intro_bs/brainiac_lovzHelping.gtx new file mode 100644 index 0000000000000000000000000000000000000000..99817636a3cb2198befdecbc4eec8869538f271a GIT binary patch literal 44 zcmV+{0Mq~f000964b$V&+TYsJ)BxS!=j#Lu+1B0R+TYj!+1l#`3fJS>*5B3Z?D+Rc CBpm?& literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_notNeedBRAINIAC.gtx b/Data/Dialog/intro_bs/brainiac_notNeedBRAINIAC.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e17fc6572aaace455983def38f411154f702a76f GIT binary patch literal 126 zcmX|(u?~YU3_ z^P(HHcGcketnd$K!y?S}di(&S C8dgsL literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_sezAsk.gtx b/Data/Dialog/intro_bs/brainiac_sezAsk.gtx new file mode 100644 index 0000000000000000000000000000000000000000..93b6f66e11bee1f0fe5e269d30a9b6933238146f GIT binary patch literal 39 xcmV+?0NDTk000645Yyw*+TYsJ)Bxnx>j2W^+yW2f+13E!=GNrp+Th>p`1igd8H@k` literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_sorry.gtx b/Data/Dialog/intro_bs/brainiac_sorry.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9332752834cf06a9655daf468c82b7427e6b7c90 GIT binary patch literal 25 jcmV+!0OtSy0006457Xn)+TYsJ)Bxn*jDtu=Huhm-__RR0NU#S<=NH(58&V3>Hy&3 L<=Wui>;U-oU49~G literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/brainiac_wait.gtx b/Data/Dialog/intro_bs/brainiac_wait.gtx new file mode 100644 index 0000000000000000000000000000000000000000..bb123e70b1549b18927e37982fc6b9a760d0d453 GIT binary patch literal 72 zcmX}iF$#b%3 W+t`tco~Gg;8E4)Pt(Hr#&;0>+>@aHp literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/bs_actually.gtx b/Data/Dialog/intro_bs/bs_actually.gtx new file mode 100644 index 0000000000000000000000000000000000000000..85aef7c3c6952d612d4b73cbfec252fcc9f290be GIT binary patch literal 70 zcmV~$F%Ezr34vmY(UEliv@8=Lj1G9mi>Q>RSQ9Dp=B+j6A XxrH*UD`HpPQFMr(I0HZfrrRf-%Noq2w6#a1nKK{@70Q>Ec-=$!n_Cj6JtBqui zWQ3*&nM>sEvT9&bLslIzL<6I*oUaYH@P@U%Joa}s}$!L`!v La1ZjvD*pTel=M_k literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/bs_gotAPoint.gtx b/Data/Dialog/intro_bs/bs_gotAPoint.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c953058e4ba3877ca30d6c97b121fe0066d56f3a GIT binary patch literal 82 zcmWm4u?m176a~f0V;RCG=K41Ca)|ro!zE=L06Q_!v=H`Ymu&STi3CNgKG^ c`Y;K$$V+e*$r_mOB52Q8EtJK1jG}(9{Xvp7-~a#s literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/bs_hangin1.gtx b/Data/Dialog/intro_bs/bs_hangin1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..7eb46245ccec2caa03b3502dc02967bba6d16775 GIT binary patch literal 31 pcmV+)0O0@s000654eH3c*C*fiUQ5H@2J`!EHoym-`c%EU+Sb{^6=vKu= zdz5q^j!Fd9H~Gja+3r2B$wN}B(sbMXWs~+Pv*YB+8HI?>6*S%+P@1s@DZdr-45s1m K{lYB^bJ<=UKw9en literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/bs_hangin5.gtx b/Data/Dialog/intro_bs/bs_hangin5.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f5b8855413f75a0ab2c7c8b07b5ee3530a6067f2 GIT binary patch literal 43 zcmV+`0M!5g0006366)aQ^5fP3<<{NZ+TZd3-q!5_5#-j^0P4~J9N(dTu(L%SK-5+g8+^AlN)vVw4Gfi4(JQVS=e_4aq;#P1Kz#zMsa literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/bs_likeButter.gtx b/Data/Dialog/intro_bs/bs_likeButter.gtx new file mode 100644 index 0000000000000000000000000000000000000000..04758389b6615a6b35c7ee9083a3e1cd31abf2e5 GIT binary patch literal 45 zcmey*z`)GRclXwvYYdm4J$-uZ@w24#0NMZl00063650UO=HK7o?&aCq84CB_)-QDT{+0x_H?5z+Os{jB1 literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/bs_segashuating.gtx b/Data/Dialog/intro_bs/bs_segashuating.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f501d479b7f1cd41568bc61ff7571d36f7a49b78 GIT binary patch literal 138 zcmXBN!3x4K5Jk}^6kO;=$p3%TSkp|y*xNJJS*k0VP&$e z!`+u1ENfR}L(rH=*~xNAn53f7j_{Jw4JjH-1f$GT+YtIlt`WJ*46;h)8OXi2Lc&=AW2 literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/grunt_hangin2.gtx b/Data/Dialog/intro_bs/grunt_hangin2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..bf53541d73ab96e4d5a91d8fb2ae570f201e212c GIT binary patch literal 74 zcmWm3y9$6X3k7|U&675|D2Q$JRiqFF;4&h literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/grunt_hangin4.gtx b/Data/Dialog/intro_bs/grunt_hangin4.gtx new file mode 100644 index 0000000000000000000000000000000000000000..ffcc61ce223c61b8622cdc759b63a9462d805983 GIT binary patch literal 138 zcmXBM!3shl5JurYTeJ&_`~DB5IjCTc=y*Y-g)dN2+r!8C0JrO%!y8dngJ*X0@{mBW zqH%JOYJ;hybg3jVAl!X`?SkX4JY}jTH8{>oln&-3y!ta>_mig5+l`eHN@Z(o8aRC1 Mrk7oQ&&HhR7mMFr-T(jq literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/guard_freeze.gtx b/Data/Dialog/intro_bs/guard_freeze.gtx new file mode 100644 index 0000000000000000000000000000000000000000..6aca30e87eabb9b0ec32b084dfdbdb1840aa778f GIT binary patch literal 65 zcmV~$F$#b%3;HFuG6jbVQE%hFa_Al U>MnYuY)TufhH1*dfP|s-A8e;B6951J literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/guard_moveAlong.gtx b/Data/Dialog/intro_bs/guard_moveAlong.gtx new file mode 100644 index 0000000000000000000000000000000000000000..045b6a8f7055c292e8bb326d18f9ff34c2b473b9 GIT binary patch literal 36 ucmV+<0Neln000635#`y^>h1vO*7Dum0Ndu|Xr+1lO!*V^OcLGg}Cqofd3r)AEL{@wDpu?p$&X=Y)kv3Twe?zT7w*UYD literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/monitor_openDoor.gtx b/Data/Dialog/intro_bs/monitor_openDoor.gtx new file mode 100644 index 0000000000000000000000000000000000000000..85272deeb90afed926842c78ad3a3eb5b178e736 GIT binary patch literal 83 zcmWm4O$$Ik6a~;rWTO=S|4+%h%!Ijm#$sv|+51?Z^8jVmT8Ri&RIqV2PBazuNasg5 g{{y;#%en_qD7oCQU&|Z%6P)^Z7*emTD!GbJFON_+XaE2J literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/monitor_sorry.gtx b/Data/Dialog/intro_bs/monitor_sorry.gtx new file mode 100644 index 0000000000000000000000000000000000000000..bafb4586b1818c80b1a0e518217ddf0e9c4d5fd8 GIT binary patch literal 47 zcmV+~0MP&c0009559HwEvS+S1hR0TS8Z-PHi#-|hhD*7Dum0NB>$2n5;M F-tD8L9q0f6 literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/soldier_how.gtx b/Data/Dialog/intro_bs/soldier_how.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f76c0af6fd14302d3ae3864de77d6f6877afeb43 GIT binary patch literal 61 zcmV~$K?;B{3;((QnO1!BZtJL@QKrwjHd0uBsw>4 Ou2PL2h9pcA9`6ru(I$uh literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_bs/soldier_yellow.gtx b/Data/Dialog/intro_bs/soldier_yellow.gtx new file mode 100644 index 0000000000000000000000000000000000000000..1f36ba53342bb8ccbce4a4271922d9b14bf7c7ce GIT binary patch literal 22 gcmV+x0O|k#000335bEIO0N&Qp-vH{?-QD2m^n23{UH||9 literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/flour_anySign.gtx b/Data/Dialog/intro_haiku/flour_anySign.gtx new file mode 100644 index 0000000000000000000000000000000000000000..591c227a1426993bf84f7147e45f5c81307dffeb GIT binary patch literal 55 zcmV-70LcIU000FB2-4r`0OZ=(-vSTd*8t+?(&gjQ+TQ@u-_-#U+S1QIL?**oD(STF+LL}LvAJ&tzk+AXA j(e!p3rAn>f$XpS$!qjbr4bo7_eCUWzO4BT{lz;ROi77ca literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/flour_poorQuatrain.gtx b/Data/Dialog/intro_haiku/flour_poorQuatrain.gtx new file mode 100644 index 0000000000000000000000000000000000000000..8b4fa004316a1563131978d029c8cb3098a2dcef GIT binary patch literal 90 zcmWm5K?;B%5Czb0P_)eMf2skE44o-Q7lE5DP`Q2ZUSKpUvBN2naaAgr0ykrCsYv8J i%I=Xw%dn_t^^gq|V`pPI@Il%To?lW>o#y_ENc#ZeF*)u4 literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/flour_sabotage.gtx b/Data/Dialog/intro_haiku/flour_sabotage.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9c1c36398ce5e71cf80403ad7f79a78fcaceae34 GIT binary patch literal 36 rcmey*z`(@BfAbo{l}q;-o?N>8;OV6s*O+;qfwa0G(WlR>G literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/flour_sendBS.gtx b/Data/Dialog/intro_haiku/flour_sendBS.gtx new file mode 100644 index 0000000000000000000000000000000000000000..85a729a81c4a28461c85446fd543b858e93d8c8e GIT binary patch literal 81 zcmW;CI|_g>5Cy zl3Ic;VnInJFTkq|-it(P)cSh>}ys1GrtW t>qCnP3Rz{GoyTpTrXs6W=^QrOez)lqQ2&rH4%UrJACJ+0W05b$=?lH8f^Gl+ literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/haiku_goAhead.gtx b/Data/Dialog/intro_haiku/haiku_goAhead.gtx new file mode 100644 index 0000000000000000000000000000000000000000..1f3acadfe6f1b267b209276ae98389e051d5dbcf GIT binary patch literal 149 zcmYk$!3x4K5CqUMfeHbug8$_IZ_U~SV;0hsQgZSK?5Yx*gnMvqlV8FW_!?dSlFb|;AB9<2-EAzBv%9$gN4hKV> ev47R-N(2f9xgm`fb~K_n?-9~?=Jjtrm2$tUJUP<< literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/haiku_warn.gtx b/Data/Dialog/intro_haiku/haiku_warn.gtx new file mode 100644 index 0000000000000000000000000000000000000000..56606d1edb37bdd23360da61a4760bc4167829be GIT binary patch literal 136 zcmWm7Q3}E^5Jl0ascDHQh#TL)kRW-vZdBo0)i~nRf)XfmDmV9N5Z#04-(5m(qr603Ac&#nbC>ww5)n~ eR;?QwDPsd*vd&ceiNe~WMdXCTAgv6WQl_OJGnkk9D~QsViegpJqm>W^T>`yVQ8)?~G2A-kaj>lL)|V;J7><_nzm=OjyLP{}L!zPmK3 zn0&^gsv)ttt0h)6nrA8)tC?gsEcBNm8KiF6j)@Ar@!}j{NtAGl)t8{3jy0y<)Z7ro RK#dff`@-dT82$9r^#?2OT+aXi literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/skippy_holdOn.gtx b/Data/Dialog/intro_haiku/skippy_holdOn.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a9ff85b30cd8a3e48492002dd2bde035c6a6be74 GIT binary patch literal 122 zcmWm6K@Ni;5JurYxNv3k{>MU@c1U3+fk8v!q9>?y|GoDE=4nv|Q-?7Xy4_Y=A;b!g zqy~Mt_0XKvq6&&O32yz%FS74Dp=%orYfAwG5_W%l+;%a^SVnnQus>;9Dw!n;2ztr= E02g^rW&i*H literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/skippy_letsGo.gtx b/Data/Dialog/intro_haiku/skippy_letsGo.gtx new file mode 100644 index 0000000000000000000000000000000000000000..1313308a01c52833513e0ebae0d9a8819bc52e3a GIT binary patch literal 56 zcmV-80LTCT000955ZT}W>ekZP0NV220NCBq)dUOW-~i;-)&T0@=IsCz-PYyu) O*xBXM+T8%!P&<6Ur^YOX#QxN76GGRQz8Hu1I?pe1iTl9{>OV literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/skippy_notJustYet.gtx b/Data/Dialog/intro_haiku/skippy_notJustYet.gtx new file mode 100644 index 0000000000000000000000000000000000000000..45a8508e631351eeec20e15b627170fb1e8a9755 GIT binary patch literal 80 zcmWN`(F#B?7zN;i+$bg9|D_iHY+}>DGg5m7e7D~VwDk}ovE@WO!h&0>(V0uYh*b#n c3!-g$Iz#wiMT6Nf&G9%hMgIexcul3l2Y{b3`Tzg` literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/skippy_smartestThing.gtx b/Data/Dialog/intro_haiku/skippy_smartestThing.gtx new file mode 100644 index 0000000000000000000000000000000000000000..aec5bfc89d9be31a598e54eb484f471d1579beff GIT binary patch literal 76 zcmWN_F$#b%3phRLGj0Lg!g;)o@2KLkp2UiXL(|3@%J literal 0 HcmV?d00001 diff --git a/Data/Dialog/intro_haiku/skippy_woowee.gtx b/Data/Dialog/intro_haiku/skippy_woowee.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c409ec6afd619cfe58ad06ad0c4d1343b89e361b GIT binary patch literal 41 wcmey*z`)8V_~OBX7uT*aJiU48DZ`6PPZ%z-a$ULm;K?C o{+O1^UAQ!)hQO%=(BOnt%t@eJoBuv4gHw4;O6563E|-6+U45d-}nju3IGWK06(-58~^|S literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/flour3.gtx b/Data/Dialog/main_intro/flour3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..7d83ced733b07a33a713bf58dbbcd5d078fa1bc7 GIT binary patch literal 52 zcmV-40L%aX000F65z^n)0O0210OaA?*5m->(&_>b<=NH%)Z^gh<>24s0Mg^u2L;*I Kf&gGm2_`tZ}Bi5j8OLe*>umKWhL0 literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/flour5.gtx b/Data/Dialog/main_intro/flour5.gtx new file mode 100644 index 0000000000000000000000000000000000000000..83f50cb13b9dbda7c0963c0a6ba4147f3b9b0ed1 GIT binary patch literal 56 zcmV-80LTCT000F759Qg?+wP;0&asZ2mb#Wf!YA;!YkE4FXu1sc@{!cEBL76VJSTQx*N6M^2u jxk8O~o0&HKyNlSFPc`^)p&+d8ILd{>ByC60M#A#}=-fK| literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/flour7.gtx b/Data/Dialog/main_intro/flour7.gtx new file mode 100644 index 0000000000000000000000000000000000000000..7ba003ea3f241fc131e1e11d3e7c096a0779c684 GIT binary patch literal 23 acmey*z`)AN`Rdw}cMMN%J$}o@0D%B?xCmPS literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/gyro_cornered1.gtx b/Data/Dialog/main_intro/gyro_cornered1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e8f8456194044c6bd04f83a9ca719b9f39c10294 GIT binary patch literal 35 mcmey*z`)AF{ou}}S8o}>BrDe~h8wq@Ut@Uo@GTbu2m$~{vJnUX literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/gyro_cornered2.gtx b/Data/Dialog/main_intro/gyro_cornered2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d0988984bc7844807cae8e38ecd32785d79dbc7b GIT binary patch literal 70 zcmWN^K?;B%5CzbW6htc*-TywdG#MQsozRI0+H`^H?cNLY#wNsrTEj_CB^1Gwoq9%) a3S~l0k@Yh6zo!NX*f&>5hi;vhd&CF4+A6gG literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/gyro_cornered3.gtx b/Data/Dialog/main_intro/gyro_cornered3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e3772115a2caaacf9db4fe05d9fff62f71ce8089 GIT binary patch literal 97 zcmW;AF$#b%3 lZpm-V+&{aeh5p^OQiv?8T20O>V8LwUhY7w!Z796b^#aDxKq&wK literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/gyro_cornered4.gtx b/Data/Dialog/main_intro/gyro_cornered4.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f16e5346639fdfa1d6b1b502ef5e0108b65dbbb6 GIT binary patch literal 97 zcmWN}OA3H63`Nl=;#5%F|Ds||ZJ-}XBO*9)1KRPuoDUfKQQjC)L%DF5Q@h!flqheK ocNFi%vGyai#R8+UQ?_ne$t*ICNV&E^hJ}_j?-A5AJG{=fdBvi literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/intercom.gtx b/Data/Dialog/main_intro/intercom.gtx new file mode 100644 index 0000000000000000000000000000000000000000..43c63fefb55f53a6115b0b2bf62ea53c7cf9b04d GIT binary patch literal 111 zcmWm4K?;K~5CzaLR*IB%(cb@3qZyh&NQTLPsKKt3VnJ?t+cRul$l)bfLRXb3 SHr0BevK$oVOr0B(y$gQW<0vKo literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippy2.gtx b/Data/Dialog/main_intro/skippy2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..452feff6e8a5d17f9e07e3d121f35ec4276c8494 GIT binary patch literal 44 ycmey*z`)8Vc#Glsts6J4J-&98;TFS_YuD~G^WJ*O@Z`b0YcFmBMc;5SfFJ-F(-)us literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippy3.gtx b/Data/Dialog/main_intro/skippy3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..70a09e3a05e4055d6f91a5e3b9c4bf0fa5c461ce GIT binary patch literal 84 zcmWN|F%Ezr5Jb^2#>T?L==~1`xQG!M!$N1{1(f=~{{cfk9mwKNCPXQ(V#%y&L%m^O fYjOefSiQt3Sz%h*2@PcF=7vfTTx_>BD$j@?O%*eP literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_brainiac1.gtx b/Data/Dialog/main_intro/skippycapture_brainiac1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..90e569f1d8c08573a1b00bc5afc6992083351531 GIT binary patch literal 49 zcmV-10M7sa000F65!2(++TYsJ)BxDp=ho{0+T{We<=_D7;N}42<>S)Y*xBXm2?F@{ H3IGZK&2JoF literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_brainiac2.gtx b/Data/Dialog/main_intro/skippycapture_brainiac2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..8a1affd9270c9721b4d6f2a9d42d0997498bde70 GIT binary patch literal 96 zcmW;CI|_g>5CyZ&0`S==AF4p3{UQQJ~t^fc4 literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_brainiac3.gtx b/Data/Dialog/main_intro/skippycapture_brainiac3.gtx new file mode 100644 index 0000000000000000000000000000000000000000..5e99bd7ef7f5dc5824719d0bc4ab2f87f0017a60 GIT binary patch literal 95 zcmW;CISzmz5CzbW##V#(Kh;P^AuO5^8<$o)xAx`TK&9GF$R$SxGp`uNlt}4Fo?%@? lwk~;CR@%^%7vWbJ9nE}{^`DW2rtcO_pvWhAxmG oksPxg(hNmWRz_A8jO2Xb@4}Q26t=CN52))uxc~qF literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_gyves1.gtx b/Data/Dialog/main_intro/skippycapture_gyves1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a8c3d18dcdf3453425c6d98d2fad9353aeb3d65b GIT binary patch literal 48 zcmV-00MGyb000FB2j$t?(H*5lOR-r?ru*5m97 G015!9ksTla literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_gyves1_2.gtx b/Data/Dialog/main_intro/skippycapture_gyves1_2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..081c5845c2f7a76a804fa71f104dca4e42854a5c GIT binary patch literal 87 zcmV~$F$#b%3%)RfY}LEQDd59r!)O^$`#cB6#aPG03PRLwAo i5sT&op@KaziN6piQ8PQK7FZ5gpo-$e`oR>ZXnB8TmpK;z literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_haiku1.gtx b/Data/Dialog/main_intro/skippycapture_haiku1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..721a092d8bbce32a4992a2ef333b4c490435b468 GIT binary patch literal 74 zcmWN?F$#b%3nv}rYyM)lW>}4 Zp@M9jV9@3Q=e39KT&fG30(3(w-XElrFu?!- literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_skippy1.gtx b/Data/Dialog/main_intro/skippycapture_skippy1.gtx new file mode 100644 index 0000000000000000000000000000000000000000..49a816694524e29611dc3515d027f93c0b3b07ef GIT binary patch literal 28 gcmey*z`)AP_u|^!y9_rUJY~3g>HdwkTnrEh0KU%)p8x;= literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_skippy1_2.gtx b/Data/Dialog/main_intro/skippycapture_skippy1_2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..80033a2fb637bb89830894fb1d700ef5a0333b02 GIT binary patch literal 89 zcmWm4F$#b%5Czd6K`e!M|4Xg9l1SW@BqA1SVXv_ncrY(eS8dW0S0BlXr{TPfowt;+ lJ1XJGICL|1;t)6{tbs(lAS=32;r>Aj9b-|IrtT^6^8xTFIn)3E literal 0 HcmV?d00001 diff --git a/Data/Dialog/main_intro/skippycapture_skippy2.gtx b/Data/Dialog/main_intro/skippycapture_skippy2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..bdd5d2142d06bbd037c0ffd561be179c91b29dca GIT binary patch literal 56 zcmV-80LTCT000F65z^n)0Ndu|=m6-}fq)8<=NWb+}hs&>fq+`)d1Dt O2Lr8+FZTPG0b;|6W6MLjJ=e6%Pj5T@GURrahKBw-`>3p0$<>PyO= HQMmR$Y6(*$ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0002_croutons.gtx b/Data/Dialog/talk/l0002_croutons.gtx new file mode 100644 index 0000000000000000000000000000000000000000..957cb83599eb89c7d033da810615ca474be5cf3d GIT binary patch literal 271 zcmW-c!EVAZ5JV>sRh0@7Y5D(;a^gvB;ds&7CW_!tZuHVRz3gS)Xx=t^{N8bF58{v= zmCpo&bK;=PurvXa_&7l#&OP%&MwEoCh!Fvc&X_uN!rRE6KgKbH^%W zce38bXNIHE%KNlGjw&-|qAwY~{aB=gf23#ArJ`5$i57mWxXDfDV=CiFHGLq0v1{`= y23e@s6skOeRLm&19aD8SGm-W%m%-IAPSnS4cdEZG4B-bC@>*v*bVlgZP;_B&Z;rr&feGR9xCqSM<1VH8br7>vuE}-RdPt zfx{)sIns2)X~;~;|Hv;&5G9<6wB1jnipnKmBDmz+*Ai&?j?w<$WQJ3f96e+}m~*+J z2Fiq^XOBf@s9Q{Ex_NB(ddYTHr*Na=bl)}yE##u<&5b_N7v*kKGWVal1CFc@IC1)L n#x0iFt|Je$L-Y1uDuRIxwn+E%2(+u`AQin!V2o63mWl3v5Hp(b literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0002_village.gtx b/Data/Dialog/talk/l0002_village.gtx new file mode 100644 index 0000000000000000000000000000000000000000..58f8558e3c0eff9100d5b7e8b0c3df3758228175 GIT binary patch literal 207 zcmW-b!488k3_}gaoe=E*KPsqUtyUUD0#${On0DW~o$cr64{&RG^Sts)p)xbbFc%Da zh>;!)Cppz%Gk><-LTb=0DcgbYav0Q0Mv<*D%5lQDSvMV$^Rf5C>2SJd!m^g#-Ms)B!5EItLd|^Uo$C!U08(Y_ZM3{ BhvfhO literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0003_aboutjeb.gtx b/Data/Dialog/talk/l0003_aboutjeb.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0e3a4c116a08c6eef40f424af8c8c32fd5e42458 GIT binary patch literal 50 zcmV-20L}mZ0009466)6B?f~H3@&Mb`)9e7**7D>74dCC_0MgXs)&St=*5d^U*3#tV I=-TAg?A&G_v;Y7A literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0003_hero_jeb.gtx b/Data/Dialog/talk/l0003_hero_jeb.gtx new file mode 100644 index 0000000000000000000000000000000000000000..2ad664bc819c5b0600c3ef4f4a650257c6ba42b2 GIT binary patch literal 97 zcmWlRu?m177zRH}N?MAZttZ#~Lqii%31|1R<(4~+_josmZaGO+G(cO860+b?mO6p0 oiJXHc_;3@X3ONlT85{q4LN`B#n%Lz9Lr^phN6441Oz{8t0o=1Te*gdg literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0003_nevermind.gtx b/Data/Dialog/talk/l0003_nevermind.gtx new file mode 100644 index 0000000000000000000000000000000000000000..665ae00731deafcddfeafc48f41118587a40deef GIT binary patch literal 42 zcmV+_0M-Bh000654&T=2*5d%)+TYdg0P4~J6xHD0^5p>C;NaW<<=NH%;WDc Ad;kCd literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0003_shootfast.gtx b/Data/Dialog/talk/l0003_shootfast.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9c435edc37401bed6bfe177f4caa755b8f13dc69 GIT binary patch literal 202 zcmW-bOAf*?5JO$qAR+PV{V$bLw+VzyHJP@Gy5a&5SlZUJ{Q-`d*bLl2D|B?>4DJ^g`^ibMwP7=RPTbFK zUVV%eYP^Nx-GW8sMHGn#6&igCK3&~xR(aTF H{69WF{$^3F literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0004_howdypilgrim.gtx b/Data/Dialog/talk/l0004_howdypilgrim.gtx new file mode 100644 index 0000000000000000000000000000000000000000..80a71250304b15eb5cf6cc18bdb1e3f4be4c8195 GIT binary patch literal 187 zcmWlRv2KGv5CtDdDUt?Z=l?(I96xg>78dO;Ae6YU+_;LN9BF3$fv>vBx?Z1Ve8a}4&5wU&+h}=+HNQB;SgzD0;8z5 z8x_Nn-=IknbZPIaW8?Tlp@^_E9y*I-5`kiaH9W6zP(JW{U?-TsX95$M+Cpa@Ey4sz zQSnSsntoNw#VAZ!R=6Jk)-Mjsd|P%F9cG|~aTHgDlyr>0wdEQgF) b4JqBrqGJz(#W;t}i0qSS_KQ}LW(w;Utqxq- literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0006_avacado.gtx b/Data/Dialog/talk/l0006_avacado.gtx new file mode 100644 index 0000000000000000000000000000000000000000..86b06632175edbe1cd6d34d5141e0da0e1dce627 GIT binary patch literal 43 zcmV+`0M!5g0006458Bk(0PEJ{;^x-nL02Jif)&Snp*Z|hr-vH9*($vz`;O!_c B8@d1h literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0006_fixbridge.gtx b/Data/Dialog/talk/l0006_fixbridge.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f4f4890133e4ced927e163ac6a193de04c6a84b5 GIT binary patch literal 149 zcmW-Z!3x4K6a=>l>Pe*e|DS5jrU}G6$xDc(_2gZHu!n&e_6uANH}P+%^yR$nXdK4I zOh|&%j5e((GK?;~Fy~+wqIss?9j`7V+oeRPr-cd0QA?*5ipNaq4s)LpR;loePgKRi V0@IHm?w@?{2-ZfPPhP5W`vLOEUpxQ+ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0006_fixed.gtx b/Data/Dialog/talk/l0006_fixed.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d6ed7e53d0374c69ce76cbdfb8e8c6c5bdf8e229 GIT binary patch literal 158 zcmW-ZNe+WB5Cq%GC6^pX^8ZH}Xlx5KBYDQk246@Z$1Zi%7dW3To}W(E1(gO1tEyNP7D=2Q-$mx=$*bJlJ@LFB<+iAKe`3fx)dSk ZdPzfNwNi8>vth#HV-E=d$i~BeuS{yI7C1wL*QUH&C-5=WIRX2uev-oM^#8MKA`3qZFhCZqC1E2-g@9nZ6l8*WPRiqn!Wc z2JMc|S~ziB5UDusUo6Eia@oKPSrj2F7p}@v*Y12uKOopb%Fm?PCvthNSU=wJ=Wy`B Z`FluTWEDl`Jk`|h@fnJGx0PZ3AshTO7~j~ zlcof1q-0lCmdP2XYT!yvVs!E0dv-{H6wA4WXz1r)*BtYmbI8tr#6>h_9R@^tGE73} KLsbrxI4oa5Du)XI literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0010_mattermitter.gtx b/Data/Dialog/talk/l0010_mattermitter.gtx new file mode 100644 index 0000000000000000000000000000000000000000..2d04655e461b59161451b2322da7284966932208 GIT binary patch literal 139 zcmXBMy$ZrG6o%oiX^pWU)hqGxyu}Vqp*fO3nn-$V5VA;zI{Aak%QL+~qB-GxMlHG= zgQ4`g#l*PueZ3zwGo{h}x^8xQU^i=~vK3vln21(rc$z7-5C@0<0NHAWW2v(99wsg= bs$;f~FT<0O30D`4YT})jN~*z=PNkF&MZHu= literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0010_sign.gtx b/Data/Dialog/talk/l0010_sign.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e5a5659deb6c06bae31034197b59f9676dcd5ae7 GIT binary patch literal 12 Ucmey*z`)4P_Wt;h!-qZq03Edj{Qv*} literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_bs_figures.gtx b/Data/Dialog/talk/l0103_bs_figures.gtx new file mode 100644 index 0000000000000000000000000000000000000000..6d24b26295fc8cb903f845599097b093c23d5bd8 GIT binary patch literal 20 ccmey*z`)4Nclp}2CvO;@zIu4;%B8z+0B8veS^xk5 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_bs_where.gtx b/Data/Dialog/talk/l0103_bs_where.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b8309fa662881093723153b316a2dd6db7d76e4d GIT binary patch literal 173 zcmWlSF%H5o5Ck_sgOCs;|NoRBwsXX}lP(7)N)=Jif!%C1JM#mM`?HL0K_HzC5<+v$ zgERQIyIWd7GaS0Cj$#k>~C*vSd{F3-&LsO*;|yD+s;tX2_1MX-!bU6^~~L km`@4aihYiJFrii;*;vTdWA_}6q+u=lpAXGleeGp#}q=^ck?+aYIUL6xlhC%S5biMOC zu|04|oS862N$Orc^8+i2EGxU-ip+R!WW+=^S0|Cj8@|-ewJ21*-9aLbcSc&lrKnm0u#ozk_+fr@( literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_hero_honeyresponse.gtx b/Data/Dialog/talk/l0103_hero_honeyresponse.gtx new file mode 100644 index 0000000000000000000000000000000000000000..ad23e59d4655982abc1ccf6e844188c3f15c6a2d GIT binary patch literal 162 zcmXAiQ3``F5JZRADijJrdx>7IhYfZ$i@IB~Q3-za0&S!)KQnLOxf-VjzE8O7%1D7_ z1jC4M-vUKCCPT@fEW=*AcBPoXk_xm`whM4$Ou7rEcbIH1+!rAkSgQ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_honey.gtx b/Data/Dialog/talk/l0103_honey.gtx new file mode 100644 index 0000000000000000000000000000000000000000..91400fc606f6f2e24092985aff59e39c9bd358a3 GIT binary patch literal 160 zcmXAj!3x756a+Wq(n||%^8X*D_^eW+RG$q}a|pdBCOt004zmH5?lBd3G0~dftXo0q z+utlwjsz9p!iO-J;HlI$qACkyW>}0TVj~!dv(^>DD-7*Z1YSPOm=DH=y1S&rI3)-g a!a0mK{qW929+K$Kmi~I^T1m7|!*vH;0%vmo literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_learn.gtx b/Data/Dialog/talk/l0103_learn.gtx new file mode 100644 index 0000000000000000000000000000000000000000..366ed5485557ea846cf3b32c7cbcdee6d3090f85 GIT binary patch literal 175 zcmXwy+X{m)5JX2yOA(5_{r^WTxSC+xl+B8W_CfmIrj)+U%$f5Bs(odSmA8apF6&82 zy5MDl*C=aQn9U6h+ZfgmzX?^8X)oOO6_v2jo$?)PkKk(oFY){R5`q78Fqe&jRoK3ECaT zp|nic1fMp3@Df*H1i{5td7wKPp{ZTwh4+-X<4Nr>T*YUKRXk)PR3I=V%1SJ*5^EoQ L;aR6K^u+fcV%Sp# literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_shootinfast.gtx b/Data/Dialog/talk/l0103_shootinfast.gtx new file mode 100644 index 0000000000000000000000000000000000000000..03ea23cc0d9d8ba229ac405f2eaac8fc6e0098e8 GIT binary patch literal 49 zcmey*z`)GJfBV{HhRfF&?!98Tf9c+}cMQT$Za#SM^w#}P4A(C`c?ywYXT1TGdjkNd CIvuqD literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_snakebitekit.gtx b/Data/Dialog/talk/l0103_snakebitekit.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e7712485fa9cca058af76aac653b18fe13ad5857 GIT binary patch literal 112 zcmXAhI}UCtC=#?sIIF9q=-#Lp(M7DO8_pd>ca%w%4mHDj@GNzNrGb|Oo~6y#vJ up}}ee6Q69xJ=UgR5t)(o^!_r#@BT0!c4gDMsKgo-o(YAi?X>RQ#_I#vGfHLv literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0103_wrangling.gtx b/Data/Dialog/talk/l0103_wrangling.gtx new file mode 100644 index 0000000000000000000000000000000000000000..1501e5a6d044ce2d3320cf09ad84d0a992e3769d GIT binary patch literal 176 zcmXBNOAdoD420n!>Z0lR95GuUl zF%7DoWkW}k|0!Ji-4^5yGog}rh|Y$Q$pjgRq`5m&8g^f?C4L`;5c5{xs;Fv~`57X$ l`f-dp9S3D@?$t>8@mSeZuveQ~Qb{as#}i_-*Go_>A$qdI$aVmGXH_%VUi%z?;k%yeDs;}LT^ynzSwcc2a5hKkYVa-{ zY*Fkvv#S;wNA5tjuWE@LL?`<1DOH>6ejeRjzyU`wX|DaR&F))F2r}KcSIzq0`2*gV Bjlci^ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0106_headnorth.gtx b/Data/Dialog/talk/l0106_headnorth.gtx new file mode 100644 index 0000000000000000000000000000000000000000..3f27855f166273757012e1c7e07a28886b2d60f3 GIT binary patch literal 116 zcmWN|F%rTs3`Eg&3fd6ve=3cw%-4HqD8e)awzxTPfwPX??a=!nAUe#kCL zym|{1N=}bz9%UFp)JJL_V_`+^1ZB9DKFzCj|KPL^mHLacG!<9wC*E6Y*y4Ku0kKL5 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0106_hero_seethem.gtx b/Data/Dialog/talk/l0106_hero_seethem.gtx new file mode 100644 index 0000000000000000000000000000000000000000..839cc1b5ded57d3ac5732d37c369bd58585f9874 GIT binary patch literal 264 zcmXw!QEtL85Jblz1d56ZsAucpdMtX#cZer-p+tNGIa&mG*K>86n4v>%g)*)(usY8+N-`FfBjYDc^S%!9_t<1X!xh$C*0t#t}qE9zY zF*Rn0DSTgJ+nr`wjl7Ft%7LbCEH$SXgS}CGPRs0H`=h5Q6;rROCoT_(a^u=>B|=u7n(hM%7>&zS=TjJOBUy literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0108_sign.gtx b/Data/Dialog/talk/l0108_sign.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0334657af770a06e355c37ff0a9b27fd0747d0b5 GIT binary patch literal 92 zcmX}kK?;B{3LuRAij8* jF@+Ecj?Ajfs7Bck6X;jNr%a&Ch^B2ni{v^WV=ea!NEti= literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0205_forgive.gtx b/Data/Dialog/talk/l0205_forgive.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e8aa655f28bd87ea604d55331b261132166c430b GIT binary patch literal 164 zcmWm7K@Ng25Jur2!$K1m2E6~FK&I^^ZO61zut5?N_X-F2-unTUrV|Gv$?{AH^oEnA zy;dp6L;XMb;K)B=__bjy g+H`xeB8uW6f#4-t+?4~ZIIc?GAJ?#*+e-QS2Qo}*E&u=k literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0205_idiot.gtx b/Data/Dialog/talk/l0205_idiot.gtx new file mode 100644 index 0000000000000000000000000000000000000000..4b3c36cc9a07851091a19a5c940be8695fe8e7c5 GIT binary patch literal 26 kcmV+#0OkMx000316xQ0`0NT~s;N<}1(%9ty=-JZc^s?U%(EtDd literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0205_okay.gtx b/Data/Dialog/talk/l0205_okay.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b3922f89941e08b437eb02294fb34faa4d3d49d5 GIT binary patch literal 156 zcmXZVOA5m<5Cc%f1iN(854}cD*jt)<5)T9iJpK?u7bW}FfoudqJft-GCw?!e?j||X z3i2ORPm#WYNAfI?9E1`IPm>*KGwRBytsqg0WzJEXAuQcQ;R4A_Pn&1A^SG#O~6pdeW literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0205_west.gtx b/Data/Dialog/talk/l0205_west.gtx new file mode 100644 index 0000000000000000000000000000000000000000..b287f987f7a23a7d23048625640c45f2877d7ef9 GIT binary patch literal 139 zcmWN@K@Ng25Czbm;=;rzF1-Jt3LOM9bds4V4XIo~d8_vWuA%=FbGXKh7+xjxaa1x? zGCv@hy1Pm7xnU<}siB{x7})_9H^>y8Lv(9+i=<&cuO$Ql>x29ph?=iW6v&A`ks!JqMaz@5hRMYacbJBXDk z?2s+D;44X-FvA~YMmO^nC6Y2;Fkv}b?mZ^1JcmZVcyNK>Q4&fR-}(ef5eu#6Ay Ee>1X1mH+?% literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0304_spores.gtx b/Data/Dialog/talk/l0304_spores.gtx new file mode 100644 index 0000000000000000000000000000000000000000..836c274849d6817ab8320fd36c8a0fa309223fe2 GIT binary patch literal 279 zcmXYr%T9zq5JfK!A;CD~IR3C7=%$3Cy8?8Zs>X35CT!g(m|0d*=iHN5C|~gViaL9` z_(sODVO(7J|s9y48pT#>ZtYn1L+|Nj+1343RhgBZlGWi z=M&C>xdR2n&nqUf0a5Q7ixVfm*}m%Rv@OA8@Nwh(J z6qt|m*rAuO`Rl5eF|n4#AtM>F&MvcdWjKa6#^ z4+fRVJW<#=6jRZU!9N5wWPIf$cO(gC^aEQzf!dnScEsQ^cl#+u>5{^o5gPB4Ma_bRqG$bO$Z?lbQb2 z1%11v00}zkOd*TezBa2O>^#*)K{Z-T?e-;-m<0nxo98QLZEF6xF`o4AP!diQyMw0q mJP#aOD7VjE-b=_%yK-cuA9%I9*rSAKLrx05*$yP)`1%W3+TASx literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0405_hero_reaction.gtx b/Data/Dialog/talk/l0405_hero_reaction.gtx new file mode 100644 index 0000000000000000000000000000000000000000..33f073125baa28c6975cf79bf67e5730cda211e0 GIT binary patch literal 255 zcmX|+QELK041~w?up&h)_83w&36#xz7kQR5qeN=1vj-b)U470DPz(txAN*ivx` zm4NJkZ^qFI(-nlu?4v!Mo9)CQq%u4_zh)+5Skjke+gCE%p?_}zYky(ntzMp+lQdFw k#d=RgoTr#*Mk-x*u(OOMDCft5bkEuIqfE~)@PAr<0XEa3TmS$7 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0405_ho.gtx b/Data/Dialog/talk/l0405_ho.gtx new file mode 100644 index 0000000000000000000000000000000000000000..c027b1435fe4bbb390f539095576297dfd39db1c GIT binary patch literal 127 zcmXBLO$q`r3d6 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0612_clearance.gtx b/Data/Dialog/talk/l0612_clearance.gtx new file mode 100644 index 0000000000000000000000000000000000000000..151ea157165cbb1924998f4c18ff07a764a0a7bf GIT binary patch literal 338 zcmY+A%TB{E5Jj&86sUyA{ZZ&@WomI$A|4%^B~UC%NC`;72`fs`@V$1Ouf&!xp9qC0lsL zlEInh?(xF21-di!N{h?7H2IuAA@(2zZM`?mb!0W^iVChxj;8(pi?0~b)6LU9NYIcx Rgm=Z>6)WY0GG`W*(=Wjs+OnI`8fPyz>X-aaYP{z+<8(5qr9izzMb#W^S5q9}DCDkl RNxN;anZUlTh~izk{s1R_2@wDQ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0612_duke.gtx b/Data/Dialog/talk/l0612_duke.gtx new file mode 100644 index 0000000000000000000000000000000000000000..05a093768d7bd7c9c3067a695947421c91b6fc12 GIT binary patch literal 218 zcmYk0%?iRW5QL|tsTe%?^J+eq54W_z1e;ySMvBmbrFV^p;%ON8K4$6`%@NNN%*u=u z@`S_aDbI>rVu5(DOx6C~p!s$UJ)-c%-Ejzt=u`urF^24m;mo=d&PfKHT4RYpERlx0 zMZGO}A(Deibi&TqO!4Yc@fV9`Q)o%V=UXOjs=b$?hw$Tz&sy!YOK$w%tGB;Bg!gM| ISD$;+3wJn-j{pDw literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0612_go.gtx b/Data/Dialog/talk/l0612_go.gtx new file mode 100644 index 0000000000000000000000000000000000000000..86fda17bcb4112818ea7a9e71d16fa4fd48b315a GIT binary patch literal 159 zcmY+8%?^Sv5C*?uC5i`ym-Cf97L>JY0$tLsa=}Diz@LkW$($y0m@J1a@jAlTT}P2H z5xmT~sdyQXNO6@2jm@3<0;W)d+SIm!bIDF#w3!UlJ zS^0jT_@GF$77Qa{@g!7t1S=_!;#?@w#8MD4uEJ?MHYX=M7tZjUXkm$$M{_FP7C6pD zIAXGyqIs_`8|-QYi;dCrk@>EeDkx~kx1ZMZ7Ig|*NH9g~=m^t?>Qh+k_O^50rjg_b z3;{|6t?FH;?aNyZu9ok$=jZ>5k;;Z1BQJ;7%AKdRHn9?hXRP8sv-#LMk;2UvTzISR J+9JW-*FS%t&1V1r literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0612_return.gtx b/Data/Dialog/talk/l0612_return.gtx new file mode 100644 index 0000000000000000000000000000000000000000..71f6fbef62601ee3a3521f46eb73540bc14a258c GIT binary patch literal 232 zcmYk$!EVAZ5CqV1pmD{4mZ)Fb-{TJ!yopzFVzlcJRnP-JP<-If(_ChrrfISL#@`X% z9Vq@{$T=XVfKgW2?0eCP?hp(Mn>C*$QhB5VEBS&F*&PZezGN+|hCV9@Uu%@apgCZW zE7w{!-s}hEnF3eo$3VV4DbslOu8Sn&f=CACvgpiVhvuW=_-FgpDms@PT=$Z!ZYtj^ c^ZT~Q#Et6&XPWp{4;!sD9+Q7N(RsW*0R|wEy#N3J literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_ba_givepassword.gtx b/Data/Dialog/talk/l0912_ba_givepassword.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a68183a1eeedafc389b22e2ed1a8d441e1093709 GIT binary patch literal 52 zcmV-40L%aX0009558CqG-2m9y=hgt~;N}3*0TJQSrJBvAnCpt#kN^Mx literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_hero_losing.gtx b/Data/Dialog/talk/l0912_hero_losing.gtx new file mode 100644 index 0000000000000000000000000000000000000000..829654b9ebf0042f09ddc2d97b745517746d1ccc GIT binary patch literal 142 zcmXYqK@P$o6hsG#+BBxI2k>@1G5ATPR(=A%8lo=Txf2stZ!s_P^cLm_HA1VQ@cK?3 z3+E6gT>Yyx#HYtjALMKWnb$}eH=jytCT8kj_HGpf5F@f|x+?gT#m2g+!N!6+Cqg|& Ywt;lh{~KbLON})B9Gvs%Gut1YU!u5GlmGw# literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_hero_revolt.gtx b/Data/Dialog/talk/l0912_hero_revolt.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a8e36805ca814d7a4daa1941ef35a6712144162b GIT binary patch literal 210 zcmXYr%MOAt6hx;yG+@-o&-i`*VgpxN1HGobNQi8Rdo6~=B(s>DImr&$72g|Db(ttY z3{B9UW*8pTrD04wpd|qhG572s#s)mtI{EBXWn~G_aJD8qJMBnHBxj3$2!f9Eiy)jA z;$!P#EwK^^wU0b@d11Jxk$u->>FJNQ!7Z|SsA?NUm2EStN{n7FM?;=qG3t;W#ZT6? Ik&c$%KU->o0ssI2 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_hero_startteleport_nopassword.gtx b/Data/Dialog/talk/l0912_hero_startteleport_nopassword.gtx new file mode 100644 index 0000000000000000000000000000000000000000..721b2799ecc756ee2bae22c26a73e265aca01f67 GIT binary patch literal 134 zcmWN}K?=e!5JurYL87=3swePto;S@*ZLrORWGV#e-j!zkKAv?r-0^$Bnqi8Cv1RBS zD@r8(xD$Dz_Lbe)OJzk6DHM}eu4mvjN$Hvqifk$gv#fk{dGU$0_v;u5tE3mVil+#T Sjg1+6(D?2PC@-9)=>7*Y%TtE{ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_hero_startteleport_password.gtx b/Data/Dialog/talk/l0912_hero_startteleport_password.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f80e7e1a0954318bad8a064abc03a9345357a1f4 GIT binary patch literal 152 zcmZY1K?=e!5JurYRibnw2G8Q*JZ4CyHc&HRGOZNr-j!zW_C5GIi~SYf8+OJGNeFX+ zj;TUYq_;grALIJr&A8%geX>Nfc^AK|FWa3eDFU~evRA4-a2Z&dKnTLKa>mFHI@mJ# WOxnYo{~TkS51N(+Kxv}FqT3JhFJLW6Wqt~B~uhA8( zca7w>EajV4N1(1v7KPoL<&dFA871ITDN&WCxKN?yRa(Ejd`v?j`dTdv;O@339C?8Q z73GspI5atmozTez)oWi5x1UkW!Gh;Z;C>P-@+B&Y%*W)Epq$Buo4-=BrpkY}dec7W hH2gy5GL$;bO|skU6W(OIdJ{G9?zPcX(omLi`vWUvuTlU2 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_killpatsy.gtx b/Data/Dialog/talk/l0912_killpatsy.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9ce89729b986ca6296f07f8b40879c0165adbdc9 GIT binary patch literal 164 zcmWlT!3x4K5Cva~h=PY2|No~#yCy5`Zb-J&LOu8cnx1C{<_BE6{6Q>$L=lgqpb6jzsRhs(cMI%lJ7mu=7I@Jo$~pGp1lv f_S3D^f=w4R=)BQHS&N|!0NMZl000654%+hG0Oa7~fq)A5Z~6;)d11};nL*f=-}hk?VN}g`v3p{ literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l0912_sign.gtx b/Data/Dialog/talk/l0912_sign.gtx new file mode 100644 index 0000000000000000000000000000000000000000..31bcdd8cbc5a57469d4eaa039966275048ce481b GIT binary patch literal 182 zcmZvWK?=e!6hx;X)XYE!VK0d_K20Y}`vDTp>j g{l`$XR|*NINoWQmuc_MpZe*$NN>`hYi+w-80dHS%!TqcJ{95o5#)=eJ( literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1000_follow.gtx b/Data/Dialog/talk/l1000_follow.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f2e4439bb84e9f44bfc149ea793b577b73a757be GIT binary patch literal 154 zcmYL?K@Ng25JkTQ(V#KJa1{^dHLH%$WMD{JX&TvZ0UcNFe)4|aGZo4UK35dwF^S;z zis)$#Xal=xBA*u|LT_h6l=AQtW=ZJXuvDh$vKM6m6z+DSM-9{HJIT04FsaH7)xOhV dlg%|Y=O1;<_oNk*wnxW8_@D|CYeVjKcjfy_k<9&QE|mf zwgY645lzqZhBpfHB-=z|r%lvajf$m1NJU!9>=tQ3%kmo&Y4J2x$nLhs;SVDP1S9=E p7Z**`p(j3)3TTq-&cTrDU_IDsMtn>L`2;te`7t$&X{X>$Mo literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1000_needbomb.gtx b/Data/Dialog/talk/l1000_needbomb.gtx new file mode 100644 index 0000000000000000000000000000000000000000..df0a8c772448929517c37f0723add22ab37f8f0d GIT binary patch literal 286 zcmXYrL2kk@5Ji6yQ(CAH5gdTa^>n?>xQuMm*n@1RRYX{z?pr(RYBuxU`|S(V8&2=| zbyzihwl2X?W|W&m1cx9Q7y9HI+{4322-Ng}`3yp28ionl8635E4T**FTr|NTi`wcz zzTq;)>%8uEi@ul%b~OB~YH5RZPvH!Q4+=GAI6tkglyc!VXnIeR=7Q8pjr??KJINTq zl}hS0FvU9r{N)B5C2%TRK_1!iLd;#eUxwp7y?i3%Y>w9W{qO;(bD)cEXI- z2qhSIK^bQov4q~l0kw>s+E(Pqn--5MdLEuQh~-dO)aXKYr?Vh(D3*<*9%79om5D!E rk2k&IAYx$2Q__0fTXMLuYba*^+U8Sf(pMQhVgGAi$StOHQB3Uzz4dfr literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1010_amking.gtx b/Data/Dialog/talk/l1010_amking.gtx new file mode 100644 index 0000000000000000000000000000000000000000..4d178a42661db623b8c95612335d7e13326293df GIT binary patch literal 107 zcmXBM%L;%X5JurYq@Ybuz5h!o4k_tOloHX>eb@DOI2X{=t%r`7Jx{8eR$^`GMAU~N rjE7_}k;NvF;3zDm>VJD_*PM`~8cdM=Ym$3D$V*Y(w@r>gN<203}x(Zplh*Y*t@52yQN=+OjbvE3z6 zmPKP)={tMB-0|A;))^@Y9@-v#lbYZ k{O6}{9y#jPiniwn@A|-h^g&D-Omy7#=SZWelrNH>AF&O1zyJUM literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1010_readytogo.gtx b/Data/Dialog/talk/l1010_readytogo.gtx new file mode 100644 index 0000000000000000000000000000000000000000..0944e1738759b93c2886600232fca25cd27176f1 GIT binary patch literal 130 zcmW-ZQ3?Vv3`7SMR}lYt|3ih{xCxY|q|vghUO~Hl&A@vzUtqdiH+w?p#i#qiE!;L< z5W+~onX7qV<-$&3-rh)xCX_Q)L)Q?D`3Ffj*Q26X-=PByC3Vuk!~9RQ9O36%t2Fa? H(YpTtSJPED literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1012_hero_readbook.gtx b/Data/Dialog/talk/l1012_hero_readbook.gtx new file mode 100644 index 0000000000000000000000000000000000000000..caf39639f133ac7637bd834631238652b3940ce1 GIT binary patch literal 207 zcmX|*(QblJ5JZRSn>Nvg|Np2hjB-=hHM^@70$I?99fj_O&_`%`6t3(Ai~VRDX=_Rw(ufN$pa?4xm%5%zo|kR0KI6r*9V;XS zc;X^GAi0(I)gdSzz^!#jTbZ5eHWFk^=#-1CKustw&Wsy^@-9k+#yf-Rs(U^D62>hC zf_43XvZtq~SwQ1Fls21vP`X3VhK4T%te6UV(q2G%B8zJ2&wO@V_#d9-zwq6obDi$Dr9UR_(X-D hU*}CxGdPI`IQCd#x{Ph4ZB>etTk6M^n8az4a({UoImQ40 literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1212_suckstobehim.gtx b/Data/Dialog/talk/l1212_suckstobehim.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d535036560f13c1c7c192f4a88a418b7f486a790 GIT binary patch literal 61 zcmV~$Q4T;b5CqT(^&uhde=g0$2({AP#*Z`b-Up;^@sE}nhAR=3#rzupe PZ9-`GVGN$Ut;YKUID96F literal 0 HcmV?d00001 diff --git a/Data/Dialog/talk/l1212_yeah.gtx b/Data/Dialog/talk/l1212_yeah.gtx new file mode 100644 index 0000000000000000000000000000000000000000..282bb7e15c2723726a5316338443acf3e968b091 GIT binary patch literal 17 Vcmey*z`)4D{p#AKn{OGwBmhO!3BUjV literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/bs_driving.gtx b/Data/Dialog/wedding/bs_driving.gtx new file mode 100644 index 0000000000000000000000000000000000000000..1ee083a4ef040621b7c766b3dea8f44554a0e21f GIT binary patch literal 76 zcmXBIF$#b%3`Cjn?!uTzJ literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/bs_explain.gtx b/Data/Dialog/wedding/bs_explain.gtx new file mode 100644 index 0000000000000000000000000000000000000000..626f23f34f8f336815491e419bea7019311e596f GIT binary patch literal 74 zcmWm2Jqmy@3PsHl2VF`C-7%@%X@${%(qj6>%l6F#f51vl0l|b ZHqd7+XyiDJBRaeqqeL42%iZ*v@B+E{E|dTO literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/bs_explain2.gtx b/Data/Dialog/wedding/bs_explain2.gtx new file mode 100644 index 0000000000000000000000000000000000000000..543bad8e153b2ef1c537a604b31e47d2347b9868 GIT binary patch literal 86 zcmWN`F%Ezr3T?|&&GRT_aRl(;%Nsc(HR&>LF?j7=2nz*;03tATKl_nbEr gauM^{nDmLf6I}LxX6+^wD7hsdaDp4gNVQ77Kc?R{9RL6T literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/bs_palace.gtx b/Data/Dialog/wedding/bs_palace.gtx new file mode 100644 index 0000000000000000000000000000000000000000..a2aaa0cf3c97786da15f5d8f9deb9f0bef33139c GIT binary patch literal 98 zcmWlQQ4T;b5CxwmzE$G>XTcFRx@a_AX;(yCz!&v7nVA=;O>;6PIfBC+E~uc>m9bNx qi9yjJDO6C?*sPj?137+g3MjO4oW8F45Jf4 g7mGTI2~bPj5Jq&E1j8d+T*9rdl!z)k$Ksy@KVJhk0{{R3 literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/captain_camp.gtx b/Data/Dialog/wedding/captain_camp.gtx new file mode 100644 index 0000000000000000000000000000000000000000..96a576679e12b5002629d19333944875a481b126 GIT binary patch literal 99 zcmWm5K?;B{3piSMhm|iRpwUQntFZTxk5CzlBPnzHz>||USR0vLbC=ZlDe4H%du|N;ZcxN eDN+!0N5T@rEr0ZI3V0l#_7kfiQl({5pAjF)b~Td# literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/captain_key.gtx b/Data/Dialog/wedding/captain_key.gtx new file mode 100644 index 0000000000000000000000000000000000000000..6a3cec5e454123f6e665dee8a002fcb0e973ec64 GIT binary patch literal 75 zcmWm0F%Ezr3h1vA0TS5e*5u^u0O;A$Q%;;jca?l5>X0eoCBq~$` hBlRlIH>-q3bT+6UlJi@zc9etw7KQB7tW_*B-9L|}IQ;+s literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/captain_thanks.gtx b/Data/Dialog/wedding/captain_thanks.gtx new file mode 100644 index 0000000000000000000000000000000000000000..7042991d638c0c8725f434de1e4d77927792dc43 GIT binary patch literal 202 zcmb`=K?=e!5Jus@+U^9QdOzc(U#`V9|RF-dT7F1XN?GA)b3y`K#4qM^fiYH((QplHnCN_WYrBHId;3?F4LLpMrm O%Zg-q<$@gQzb8Me)rL_3 literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/captain_thankyou.gtx b/Data/Dialog/wedding/captain_thankyou.gtx new file mode 100644 index 0000000000000000000000000000000000000000..712179e95c9670e4e42180fa78deff12cd6501c6 GIT binary patch literal 53 zcmV-50LuUW000F84(QqH0Oi@z-`oJ|;O6cC6WG?@*5lIM0NCo|;Ozj~5Cy>JuTuo^{)c+TH3W1cWK{xo_Ue@L0!`KJDcOyQH*!2MUQ{KL2#7Px j5)qfO|7WKYB%_6>#o)y(sE5!*F=eoBeV`f~H(8$#4LmwR literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/gyro_bs.gtx b/Data/Dialog/wedding/gyro_bs.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f6395527a99f511da41b1bfb8dd99a3960e3ceee GIT binary patch literal 72 zcmWN@OA3H63cWG)jBvy@eUbQW2ps#-PNG! c3Gwn|ElI_3Qv*|@5HtO4gE1kyGHIXj0lS4V%m4rY literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/gyro_notsofast.gtx b/Data/Dialog/wedding/gyro_notsofast.gtx new file mode 100644 index 0000000000000000000000000000000000000000..9b864b685eb9d34da25bde02c02fca41c52768ac GIT binary patch literal 26 ecmey*z`)AFbN|6ph9?ggu3vic^eqk0$_ literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/gyro_notyummy.gtx b/Data/Dialog/wedding/gyro_notyummy.gtx new file mode 100644 index 0000000000000000000000000000000000000000..31e699038b4b3b31c21b045292a9fd846f6a416f GIT binary patch literal 97 zcmW;BO$vY@5C+h%qHTfqKb7Q^QqF{ph0vx8^tXNQ2HMK7An3J$MNx8$<*dvPMRLNJ m0|3{U&qENdswv^(@59oRdA$ft$jr)qG<%toL;0?1Ws!*Wm dPek<%Q&wDsl(Yz8k~eWfpq6Z#9Oq8Cdwi42HNpS@ literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/gyro_reveals.gtx b/Data/Dialog/wedding/gyro_reveals.gtx new file mode 100644 index 0000000000000000000000000000000000000000..573ad5465d70173dfc34e759eab8645138537e2a GIT binary patch literal 94 zcmXBJ(F#C75Czc7=8?qz|J0OOyES$+7AYS50LtU(JV50d3Ungg6Ov|7(RtCG4fH|e kpMK=TMuPD$y+CO|bakMOL6DfUaM{kr3#SaPhC|o$1#DtFd;kCd literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/gyro_surrender.gtx b/Data/Dialog/wedding/gyro_surrender.gtx new file mode 100644 index 0000000000000000000000000000000000000000..5a73e0fbc9d22f4c7c89a1addb3d8d7d12b07987 GIT binary patch literal 94 zcmWm5K?;K~5Cza5vAZtR`=3g5ssqVHekKIzre2`7+XwFpJi@3bnvQs)&E`0B?Vp~1 owi$fa5~fl~u~mpyX2NW1H|P~3C|+s*!Z0qB_D1$y*tEz8H^!+wwEzGB literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/hero_reasons.gtx b/Data/Dialog/wedding/hero_reasons.gtx new file mode 100644 index 0000000000000000000000000000000000000000..68202e6bf73363018d52f5d2d41d784c5cb5acd7 GIT binary patch literal 200 zcmXv|(GG$z5IbO)sA$mmTYjN`b&P{8&W&(q$Ra-Y=93N+)0d`g+U6@zXZT#8%xejP z&czu_xKR^gUTYi#tp`IR!GsJa_9)s=3)m-v1&n32ovd^3hOF=B4V2k25dO2Qqq1K#ePZ-Ah3++dn(tV>v$MbXIbnbp_%_tRkgvtBpvb| H)8K+HK&XCC literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/lady_byallmeans.gtx b/Data/Dialog/wedding/lady_byallmeans.gtx new file mode 100644 index 0000000000000000000000000000000000000000..e11b7cf792f1e875679732daf50eb0d841571083 GIT binary patch literal 97 zcmW;CK?;K~5CzarrOS$o-v3ZZ{c0ecKxSeI>LM3V>GttX;Mu)=g^LkiI???x1Z(;S qPYN{QJvlY}*j7R~M}CZB*IPo6H5gG-$@j{EGU_3&%!^g{RJRLsT|mMB literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/lady_dontbesilly.gtx b/Data/Dialog/wedding/lady_dontbesilly.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d5ec1fab1b800f77784c0c1e565a4b14d4396f93 GIT binary patch literal 82 zcmWN_F%Ezr39FT+Kt6fs^sN_ gi+@vvrhcji!zpE3Kw`0GE=CzGYQ~;Di!IlP4=%Yha{vGU literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/lady_radio.gtx b/Data/Dialog/wedding/lady_radio.gtx new file mode 100644 index 0000000000000000000000000000000000000000..46bc338ea3889bec282ecf2f364dd5319c31994c GIT binary patch literal 91 zcmWm4!3uyN5Jk}^5ww>6|Dy(-us}z2%34PI%H4%~USKq~g$rKNt!RuweidUiFeqn< iq$(#UdCY+hMjwT%LYCgfy21@k;_rX7$(p8Nug?b$=Q*SR literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/preacher_blah.gtx b/Data/Dialog/wedding/preacher_blah.gtx new file mode 100644 index 0000000000000000000000000000000000000000..bad1eef0b145be4e0453a3b49d0c9b890d941993 GIT binary patch literal 47 icmey*z`)8Vc=_(7o9`HqNG1Ug=M7j0OuXS@06_qV{~8Mb literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/preacher_married.gtx b/Data/Dialog/wedding/preacher_married.gtx new file mode 100644 index 0000000000000000000000000000000000000000..f33458a7fd4b3db0a8ff0034ece25052c6915297 GIT binary patch literal 62 zcmV~$K?;B{3YRI>+K;T-I$*6tB2aGBySO5S3 literal 0 HcmV?d00001 diff --git a/Data/Dialog/wedding/preacher_reasons.gtx b/Data/Dialog/wedding/preacher_reasons.gtx new file mode 100644 index 0000000000000000000000000000000000000000..d298303e1f0ef0cbcef05306fc29dda72e3c815b GIT binary patch literal 90 zcmWm4!3uyN5Jk~vAZ;u9|Bteq7|UiL4RPJRY;zZf`vSHbRwr;$RS21b9A?t(2VCTm iN+ lCNPS>GWKlF0CDI^6NT)5Ra)!D_hPpb2x@v~H z3WmIo|Cv~djbgp`|c|sk91$AOtLI0*WF5U%GI68go*ekxRS^1JdX4Dn)|p~XxZ~( qr?6V+D??pe&UV4l8VN=^1My=99f$Zl)9HWZj#@Ic4)wp8;J*QpjHasq literal 0 HcmV?d00001 diff --git a/Data/Music/cowboy.gbm.bin b/Data/Music/cowboy.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..760a3cae399f55b642f662e2fe31d0ec982f55ee GIT binary patch literal 438 zcmZ{fF-t>15QOKJJBx=9w6ISjSXyc-C17J~A(oaxg#3VM%zJ;r&Q7#So%*G>@CT%~ zv9S^2?wkq{Jh4tpX+UmA9x0i!4vQb9Dx_$E!cwh;3If|$!cv} zfIavEuE2ND5_c2#6OR+m6Q5+tO^1Bl=I2&nBeT5Y)xBB1n<;E$7M;jbZ=ZMht#y4W zZNY-L(=G@Qyy?v6)bDsHq&fTl;Xl@h`ulgGTrSPGvU23HZ24hj-lM$s)uj7Bu4u7x mQybkDZDr^zF?0-r=1S$b{^;crR&b4}6WvsWQ{x4{%f0{*(Oshe literal 0 HcmV?d00001 diff --git a/Data/Music/death.gbm.bin b/Data/Music/death.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..3fd15707ae3318a15def04ef68154d9a9f165b01 GIT binary patch literal 470 zcmYLDu}T9$6r6qRJs~KXLMxm5jC3OYgtdK&e87|uJ3$DDg=k|TBA$&P+9a2&)IzYc zKEzrS6ymz0lWey;01UC zo`HAhKh1=X;62!YuV4jU&*cmF4t|1P;28V?)$t>BmK?p~n&YP9Z}gH}aV#B^>m1j! zYj@Hg1LDhl!1pp_sV3WDaE-+gKNtq$D?{kgdr#gD5+J z#gSsyGQGyKi)hS-QmBZ1jhpOZuH}s>rcF^c5_V)$bYr4>wdNyYyq#*9{Do_QlnW?& OGS+Ub&-Rd6x0Zk5)O;`i literal 0 HcmV?d00001 diff --git a/Data/Music/fgbwar.gbm.bin b/Data/Music/fgbwar.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..e1653302694d045e29efe259b96ab3997386e8a5 GIT binary patch literal 955 zcmbtQ&x_4b6u;-=-23t(KN~3}YN94eDIxip!eW}0WT9-;Y%HffDI0^7Qd87hDy7sb zWo6^Ndlxdx_XmiEh=?dM&b@a$?|C&FukSnOd_JFZKIeSD5?uK;-5Gb&y>M>&=OR}M zgK&k=3D*nP2v2w&I#`bZwqe;ZwRjm?+W|m^J?KifLp-L;25|8TnnxSn_vT65WW)r68;c=7k(9f z7Jd}I7rwQVQLZ=zo&=ABN5Dhi0dOC<7u*Bx1}DIs;5fJ)+&Z%9bg`&kXE;Kyro!mC zr97FlUQSMDlFPDXgL*0H#bjMNne;@`{YiHv-IjD?(vb99)P<uoxh?6IRv7-TB0>S&GO7p(}s8U6X_ zXQOXL-;TZ$eMr7n3WG+PT4U{;@A@6lAIl@iLMvvcJkhi2U#8-!j@AfcopMJ%uj?8P z_nuiSVrWKJ{?^#94|ZL!wYe?KcT3}vfu&OY$>vp<=u=94`%)FVM)hw~bdTU4Mz;83>PhuuNm$b9vJQ!Rt#?puMO)#-ZI=UtQsCgz!k$= z!*|2(7A{oDlPz>wINs|1>|6D!Kei#-=L)jzdAB6nGjScU?x^A_+qm7)i;OKYF6NHV z9N3|Zt&ZkAn$gtzucH^mD_do3vUr**B~5VWQY3vU90`)v7@m5CCB`Q9lnyvCQv^yH zb2Zi*UY1T$MqE_Vbm_OW7|hv{2TSKkY~A5x?7!WfUvEoic$wvP;c4!Ui~DL?q01|G z!Vc<3TOmS%)n>i3s=rX9;-GVva>rE3p>P&43XaF;)Fea~)!dvrU8bcFWX5I@GxK2% zt){)2ZHRnqja=U2)*LcNn~NtEj@-?oGk+rQTCH$fzzC7YpGxKzhB9$`iK|q4$si9T oT3%)eet33=<09{eh~Cp21L`N#*bqAop4huUwnjSY<6qH!13jV)yZ`_I literal 0 HcmV?d00001 diff --git a/Data/Music/hoedown.gbm.bin b/Data/Music/hoedown.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..0dbfd7412c8a71ae32773c92b70772731c2615e4 GIT binary patch literal 591 zcmZ8dyGlbr5Is9&w@7D`K9%2Krw|Zq3@8^AJIg?dU?&_4D=RC1KrBSW!cS0h*UHjA zNNH;tA|9*XC7zf%&;NBPam5YnK%7e@fbV-XJ7>$fMf6iya9JHU95z6;1l=( z-h&J97W@VWf!o39!@w%=EN~on9k>_x5cnRrQ=$={P84Xwl@kR@Z|P~r zuAszWj$1j7a@@}nk23T%*F40DXP`BRDMO-e6n(6%2(0%HbCYfHPu4^xxw(zxc`H3q zt4%i9=yrbLnT)QvtaZ4e*dqUDZ39b78oVLRYNYz5u|+ItV~(U>l=}M27O{Bemlj>B cl37#g#Nx!G64fh`Su5n+a literal 0 HcmV?d00001 diff --git a/Data/Music/intro_cinema.gbm.bin b/Data/Music/intro_cinema.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..7e2a52e4808f55654adff9bcfea78c9226716388 GIT binary patch literal 1005 zcma)2J!=&~6utK_vr4`yiB$-X6e%QFm`+5HfJ$sEEP_pprE!Z?0pXAod5d5n+Gybq z5MGD`0)iNbyr&@8Xb7nVOCi`iP~m0n&Te*NK5#jA&Y5%f+?`n+ko@VBTarmfB>meP zkf~qX5`Gi@5PlbK2tNt;glCnnh3|x4gr9}4glocGVZZXL&?`rj6Pmv7VQ{I-N#zaY ztnz|#S@|-Am7~f_%4y}Wa$dQv+*P)ef0PaI3et8DybeADpMy`q%iulm4Y&$k1n+>4 zz(sHjya~PlH^FD%Tkr`ugmf$9w~_wt!L2vr<;2}B6Pi!rORvxx5$FcSu_j4uKa69F|;$VVOlnkF_h4vw6k2&yj(e^W$pUV71vCCVH zGEoE%kxj8WX+j9YpZj-0{TTUy>=1sZ>AOvP+X9hJQSgl{Kq8%@j(;&+bS8vzDir*K zEI=Yvs<`mcpP3A|BP5Vj9W@Wh<4%MGvNCM6BP5Vj0FwKi2nl3WN6kah>O@E&t2%1l Ze@^`P0cWn>KEG5glFPVOZl#X&u@8Ka?W_O* literal 0 HcmV?d00001 diff --git a/Data/Music/jazzy.gbm.bin b/Data/Music/jazzy.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..bc2f67b0c67da1ff60ab5fd61b3f8169734167bf GIT binary patch literal 1013 zcmb7BJ!@4#5S=}|-3KWIL9o=6BCoIv1OxI!5JZ9?2v%tnLSB)SfkO&G;(rjt%KG^S zEX-Y$MDT-{h#w#kMR{UCuo2?S?0xsfUIVcBQt6;|1y&)XR+&s57iIJggeKXy?UB#VtCk z=B!qY9j)nkw5HcJAkRImc_3(93bkatbTF zqQv?&tjQWEx~@W8&T%Qn`5fo|;?cy(9FNt6XcDZQ^XXN8`E56=__&I;GC7!LoXV{H z2fG}yg>rY1G^~;>1Zg~vBW>6op!wSHL?y|7t5rvdMZJ*RAk z$sSwMrt5i&AWb@O&O<(Mvdt^-9~I-tx+iC4MT=|e=3go5S)GFoe&TdZM3mcD{ZV4OX~=>{)Y&*!t|+wg($JLu@bGtTwX|_KOi6o zBB=saiYUald$~(;SImCQ%ke|f53U+8F&s3 zK@pyS4b-1Uj*G%|;f`=k=!Gl7BjHk13$KMe;apS;o5BJ3n|XrpP53D63%`U5j-SG+ z)A_7)tLt~WK4M{uhF0*W z!5;^|sc0A2HXRdnQGL+$hlW$RiyX?Njm5;3Z_>9ay@5+E+rR{n^xIZyt01*7O^Low mqqhJgAE}kva(Q2)A>?{|KD=iYA5^dKEMEW-M#{N3zAVV8&S-wC(}9)lO) z9e4&lgInM(xC!onN8l;A4_<)};2Zb}u7KCz6W9QMz;o~xoClXtK4{wRwS-^bcWUi4 z95ie*95Q?dU%>?IF#Le$M-7J!#|$S72MqgCIBqy)IBPg4OVvtHmEKT}LYa(YBa(Y{jl?aZVr3hlmCK4e1}$%zXl1k_#lRnu zwdb@^{kh0zDWyU&uribC8=9u&b+%&ivFnSSt{R!wWIfRj>q>uYR+Lm*YH6t>`v<(= F{sKvmm`4Br literal 0 HcmV?d00001 diff --git a/Data/Music/main_in_game.gbm.bin b/Data/Music/main_in_game.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..a03dbd061be6639407b75897bab5db30d363b87b GIT binary patch literal 7456 zcmds4U5FJ`93Rh}Gk5OYyL)%<-PxIuNPV#n-7N7TNeWCWe9(-(#0bh#N?F8S%;bk) z8A_n6MaI%rWUck!gVsZVQKljaLQrc7^%815^pI@yP-Zjdod3)@Gds7vyN1zyIOqJo ze*e#NhC7W};#aj!S$x_T)2x9%uV6F7`wZ_gyv^_ft657fAt+&430q4zSVFCYJ4@JD z!r2lkHtw+TR0*d`xLm?K8&B96D`Ag~qtU^}Y>vk`202c0Oy{_tV+Y4?9Q_W~JNUrC z&kklem|MoPWgIBuLK!!@SnFcHi*qi9T@1O{=i-cuK^MDSSQXq}!44POU5vR{SHYVV zd{aSZ6-%qwUL9C|h2cmQpH}fx6|+0Ap`&x#?-=R8_Z?`~Fx-JnH5{m+)`^Xs__h;^ zy0Ebe`@1mOH82_(&#z-%9dqlrsg8AZyjRDMb-Y!__1$=*j_t)tP62fH!YjlDhC z(}Pnza2vR%fh`Su){U`l%}ulkCXO_*tckHE zZtlh7y?C`3r+VRfSnlCP5BGUk>S3{m%^ntcSm@zH4cgeJfd``K7x=i%$1OhQ_;}vOSs!2f_{ztO0H=MN^l{urGr-dU4hMMD$3s3=1sDnN zmybVu3X0A??d2g0Z6$kD1T^e#|!SYkj5Y8(=P ztb=~#u$Ll;L$YVZi^?i7Rkx2CLlw!&lZq$7smo*-2tt^O;!70v7$%UtC)mH=cY+Sig*xOoKM;FvyAkg1*8k4~k^xKV+rMUh%_^(CNoG5)0fRHlkk zI}tp&li3K0L{oE+T9XUH{kJnx^E^K#2^)q3(DyE-&s z@lIVect$!&zYP^N30+928IcUa#43{7;_)y8fz()HuE4>Q7qc z!w_FYjintUTcXDAFZqfmiJq0%$QY!yOpS0`y&FQNDNvvi;Gf?P?E!Jrn=%>G%!{S2 zltjvZ5wsdbDtWmomGM?h;QOF}MAfA&E8n%!-zLKlE73(esTRo-z#@gI@>$thxo1KV zPf$+-q}VJ=J0&n0FDaVhnOjsN9kew-DosyWcmX&Lvpi?zy|NU>>5+s-Ckb5~C8d_^ zDwc#+&fBGvX^1k=egtFGImu5`RL4|bG8ApF4I)xY>GY%{r`*;j!=nx`o{to&P}9UC TgX~V`S$;wnHK>T+W&_#Z%_>`m literal 0 HcmV?d00001 diff --git a/Data/Music/makefile b/Data/Music/makefile new file mode 100644 index 0000000..9123ddd --- /dev/null +++ b/Data/Music/makefile @@ -0,0 +1,3 @@ +makegbm.exe: makegbm.cpp makegbm.h + gxx makegbm.cpp -o makegbm.exe + diff --git a/Data/Music/maybe_haiku.gbm.bin b/Data/Music/maybe_haiku.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..10e31b3205eb2ef8f28e605d643a7e05f10cb388 GIT binary patch literal 1545 zcma)4&r4KM6u$S|^R8sJFrxl}Vp`N6AVqCP5(*~~0*j2Yh?FEW90dCmZQeK zW4u1mRg8XcbtSgN*yE8fM#M`A+)S2IvXUU;6mlvPw}w1W;IB8`+5{%fgj_0cd%>+u zVB)o8f+`|jPstQHk{3c(^kbnJ>}RQjZWdW3?SI(KB4>B!d|qe=te*rlgdBy+$ literal 0 HcmV?d00001 diff --git a/Data/Music/moon_base_ba.gbm.bin b/Data/Music/moon_base_ba.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..a35c4c7b6610f344e735921a4c8086209bbbb81d GIT binary patch literal 2070 zcmc&yTWDQH6g_93y(bt@D3ppI`r${B`T#*{sVFT$LBWt8CDux5P=r8*rh*t)2Cg72 zi22Z3t)^Nn0UL$llL!UPy=Md=RusXA;;Tl5eh6w2Dsk;O=RWdi@z2AaJ?pIfo|(Ka zOJ9GsH(SWI=h>cfOE{L}tsF;kG;{orBNJR9n9T81jsrQK%<)8yO@fOAcMBfP@koxn zIUdfjLGVY8ZGw>;yK>wq7#55Q8iH2^Hw*3%+$Y#4ct-ZjED2r~oD{qu_+0S2U~_?; z1%45n7K{~my1?-QpBDJ1z-5Y4g8K_RR^VWPS-KTa#Rr1-1(zr;S6rvKP4S>&sldgG zD;1lSKB>}(VwYm4;$Fo=iU$;j6tjx=6mKg|DBe^YSA3;7rZ}oNqIgm9yyBqZPsLS+ zA;aT_Hw>>ErVXzdUNKA=4jT>`o;A!_s&vNin_Aw}!6`zZ!lv{Al>j@Qq=? zus+}m!)Jzh!zYH14K2fx;hf=b!(WDhfNcS{1Z)ksDd5I{8v?EmxF+E0;FYSI>*_>k zBa-RW;y)U=&a;c|C^PNnn&NW&WsN0}=&hOzZfrz~=wQ@= zs9Pd~b$8U^STkdh;Wb0o@yM)X>U`bNGL{(k!Ma}})*?L%ecP)YQTY$lhUL45kXcoO zWsT=z^R3KyE(!CDI+%Rr;7-%tU$5?(cx-O475myZ*qfrlvNCYxzgUPa8`;JMQOd+F z*+`{RCU0vnQan#OFIy}<5wF_Tb2XWFk?-IydtI{&@fG4xDXrs|~M;ngTh&Em` zV$VgJjCLTg)6tGbdnr0O8|~d_C!)D4y(NN&Bs9kOrJ(Crg#b&n&e WZjlT6vAwE(y{DhLqi*1Gl*zxJH(`wc literal 0 HcmV?d00001 diff --git a/Data/Music/moon_base_haiku.gbm.bin b/Data/Music/moon_base_haiku.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..61d24965a09a8f0ff54774047add9fadc82bc78a GIT binary patch literal 1514 zcma)5J!n)x5Z;}g_k<%BT4?7_A=m^&PzVvlkVa8N5Jg1@UKvPX#76iGBzH$5kyL^R zDFUKk6pTtlLBZTzV~B+i1hG7{wh=^$-|TxYmp?JX%$wP7zM0*fz4NJyQgWxyTmQ&M9sv-da_xzoVeuR@_tERm>|U6yu69MNKiHc&(UK zyihz-JXJhaJW@PROsUm7Cwj5ww3C*u@H17Xmud78gHjIE>5W);7K)A%?4g=V94^n8n?msa>eBXEn=!XLtFArO07Sr^R?L~kMq-!%3!-%pz;+DU{LxwX~h zX?7yX>bSQ_Y(_#R8^9TH`IreWWtS}Y`RUuRMb@8(G>MyY2ASlrflNi%MrnKw(xez( zToBGU8K0vo;Qaden$G?`?Nv@o7aDGbFUq_cU%>XAY$f?yCdVi6l5km5C3eT7zOZH43? z5QKo0op(D&n%4+|ilB(3kSj#w6)Mk}JtKPD-OkMSn{S5YX)4bYt!W%+Gct!X`_(ph7XbHcHIwnjA(~L8WUBWZkdNBz&&p2C3rx+&~ z^Niz+V~ieShH;eL{Ul?7F~^uK@I{8f=NOk5D~vV9htBId<66mYF*X?Y7`GXli~-{c z<8leE7RK7{6yQN2hm41e$7RfE_PyeEj%|+X8f%SXjZ004{l*SYtYku)L%g7ISn^)u z@`h2Het2Rf1BYr}8b{eLFLYK>nz*M9^sQmBi7UnVK)vmzl`QXunP!wU!Mm+L)tdTE zT5A3VA@!Q{T0K7uf+GjoHSA~_YueK^&@^-`IKAjV>NMLSZI{HTHm6ZePqUTE#&kGY zW~*)mDS|w&DahygPi^(TK<>XZaXFK-{skFjc~brR25Gartz=4NzV`oW9pq6h12t<| VSMwITJDJI5BzFsI4mYY0egh12*OdSO literal 0 HcmV?d00001 diff --git a/Data/Music/shroom.gbm.bin b/Data/Music/shroom.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..795144f91a5583d454d78e109c90b97ac3a899be GIT binary patch literal 1537 zcmcJPJxc>Y5QaD7T!df>K@=OYvk*b-EJP8(QmzWY&Nh-lYnKBtf`|wyEQA#P1Pj3~ zU}~|lvlLsoMi3#+&F;u-VkF`4ih1^(ov+>8r2vMXl4+O=(=?|3)wNACQA<*LPH3n0 zjPHn|G7l2ijKneFw&5p4;B2dB$ffCBd&NTw58rE;R zP)4;QihLt3kP9pl-7Xv8;nFX@EA0b3(^4NqukqML zNs~VgHTVYvtPRsk_Z@W&QOSK`(Wd8tXUmiSM~sR5M;iIp`$x;Z#7n-f2gTP84^^D@ cynbK}DCZ*1t8H2?qr literal 0 HcmV?d00001 diff --git a/Data/Music/something_happy.gbm.bin b/Data/Music/something_happy.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..36d90b3888cd80a2b46f0ecaa8e25923f353989b GIT binary patch literal 40 ncmZQ%V*mp#1{MY;5G(J`|2h_iykGyBSh$X{6dhyP1R|LLhF}Ud literal 0 HcmV?d00001 diff --git a/Data/Music/spaceish.gbm.bin b/Data/Music/spaceish.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..968876a28b6eed1fbe8c4f32b09fa37b4e57f8b5 GIT binary patch literal 1239 zcmaJH0|| ziRg-nS7Y+zL4G1ik(-I=mMC(qwfDLA9>>q_uD$lR*7tq;=Uho5KdRBRC=p$je>6*j z4UP(r3J(h@JRsaB+$-EIJTBZR+#%d9+~x`Agr|jfh2z2}!bif-!ujBO;acGu;cDS3 z;R@j<;c{WWaIvsYjGzu%TU(qGo)Gqe-QY3dnDDajsg(COF+Do;mGi(k;B2r5oCVGR z=Yj*^X0KQY?gB4?FTv;FNBs$>gmvLtVZ$3Q1>Xxx;1GBatby0TcihQR=Mai+tagpOfM{)cKeh0t7?w+KhQL;tjNS5oBfcFH9#0rB7tYEo- z1ED`7ST;fqBbm@bk2Xd$EEh16lUmI7^U4A?g7)>8+U+drmE@|g=%QA!R#*&IkO#k! z+Ad1XnIaj>&Sy8YGZrwy-?%d))`$D|i1iVSfp~$@42C)2NE`pvn=@j4MdKUQ8`jJv z43DjE8)?0b^;;s=TX?bF#EbRCTO+ob^)2fcX=5+c$%Z-l>@ni3>}!9W{FYv!)}8$4 zv!%Tgk&mv)D7C2G3-R!Nlxm<@C}O0y)WKp{)fNSebfY#c`m||Lz`-G}F06w?UR_w@ E7oi(C(f|Me literal 0 HcmV?d00001 diff --git a/Data/Music/takeoff.gbm.bin b/Data/Music/takeoff.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..fb7e2f276cf8077a41d5496cdac74eb0b8e0de6d GIT binary patch literal 3040 zcma*py=zlZ7zXfj-<)%;X;u6R+O3X>ZV{9tAih# zU`v%~Qx%aGV(uSMDN-kwilE&Thc?&uxrt2`&VzxZ?|pwKxlaNQGzd-l$eNK%74z77 z61i+XDD5+ODZMfIOlc&@+fpcbSDKON=XSq+A@+gTdtz1CXrfv6Aj>PGSn^-4ov7uQmCYogjvb->wr5GUUvkv8V;Pc=t_&K-` zM30G05{rmkB{l-fA^4XTc6UZK5CB{I*JLiCB%;9IU*d zS#~4Kd_%LGPBcp}txVMDWYAxov9S%wn* zRV6CIJ-s?k>@cwd#4^OzLe1ju)hyW4tNX-m5W7Nbh}Zzk->Y7*r&ry?I*I*q{?GhM zYz5};RSoRv)jYAM#HNVdA~pf@_v#?n)2l9GiS@tl8?n#CKEg<^7U7;=%@CU+HcqTe ztN`=(svqp>RWGp|v4GfG#(%$0Fn_Nm!Jb}4#LC19#0H2Rf%$v2D$1T-EfHHFHcjjv zv70b|ua1H}y*fl}KQTk>d*Hv{3e4XtTd5m+O`qAik@TXq5NxmzyR5@QeICOFhSox` z!9wgrY>Tn&i*1+=VJ!AR+}@@p?IV@C*e9{Q6WelZ2V1XVt8sg)R@G10Jkk?O`cJIc z`e*BGnj$WYjnmvtzg6?1wGeEe;(GLmehG){>CjpTHdu)3(<5Q5CozdD>gDFDsk#z3 lm>yZK>l+<@pVnf_TCh*=^ndxoTrE8){|pjN{DHp*`3>O4e)s?Y literal 0 HcmV?d00001 diff --git a/Data/Music/wedding.gbm.bin b/Data/Music/wedding.gbm.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d1e2b01764821f0bad0a4db7df380252a8958d3 GIT binary patch literal 5184 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 literal 0 HcmV?d00001 diff --git a/Data/Tiles/bgTiles1-256.bin b/Data/Tiles/bgTiles1-256.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe6a30defca0dd1ddf2399ebd325134126f8853d GIT binary patch literal 4096 zcmaJ^eQ?~w6@QY>IvqYviVd+s4(pP*G+{F32n;zA^>j9FY9N$M+Tklqb4lHlY142} znjGckBs*qmzTK2UXlQF_2lx-Se1yydtdO+Hbexi*)AC0s7L?*lNw7>j_PLR@eNVcx z9k;{&POIJ3d%JJnzJ2ciI1}_?$p@Uz`K^r+Oo`z zg-u)ceYEf0#qT-}xCQC1$oAa!wjH@0*KgVr;$%bk-f?4yyKe~JwQ+pEZdy63HjeL; zzQ7BhFTCrr+nV#FI~5<)g@9X>BlY~HpmA9XY}`@7Dq0oD*dBlp+X?2E?r4&PfUsm` zZ6AE3umj3@r!&*#I58TRRc&U#0w;AMeQc&bufbJI`r7>c_Ne`ruH)V3y7zVOQ+tx# z3qNewvS-O=>vqHpTlJJ`e6@GaWY5!x$r`S(S0JvK!Fgwkb0A+`UF^aIHS~`5jy^Q{ z@aUt6htE9pS(DS`Jnh`tzuI1H-`f9l9;}p=wlXuQ@zvhMPk7>#@B5%%0*%>?OB%Q3C zbybrq8+;T5EYT>(l`CGl0xsBC9LKUi77fu*ke4^X%rn5#FIuHu*Q+@j^+92OQ7 zJ}RNbFa2uH%$a?o7IR&x67hJy;WLi44sy&gZR1pvE1S4I4Hw}2>kdXMn&X296_k}# z?>F7^o(HI2{vOr%3t+LHa~88$?fIB^cZ(s{hD#7PiiezQ4yt1Bk2m8Ei;2*^j{=5t^@lF{GJWGoRu2fYV_% zv*v!Qwx>qU(frJ&Go3$wNJI0JJRV>l>1WrUrJuWgAdgxdsnXB(M&|4%+@H{!OPg{Voyo)oknM+~@V%#9l7B(hWDxN zKTAI7D#s?4y&s!ESL4G;G>mC!7k4_gQ%=Jv_%merB;3FJ?~$$Ops1vkt$YV=D~Ia9 zF!JVs7tVch;7v?}}={l-aQ>rD^DIX`BTb<2?^#SUuI0PZRW(mKG?NS&dY{?UT-)pXR4?Y!-3>41QXiA|%GjT^^4YBH%Y!h!UPAmE-JJfz{yYdX7(X zK`>kQG_75zN{~kn#G$Q=EY4JxVQHl5#x-ke&?@b?KKVZpYg!*?tU_}zIIzT6VyyYY z<`2tVJ{QQt@pW7xuBk@BNN+BThSUsN-)em;H)xq)=LUKUk{hXrm51;9`S$H+zj<02 z?cbam%nhc77mOkWdKPIi%UaP^vxk20r~u|i|1%W?_T)z%=gsAkuYd^u3w;hCWvYn zPjnp*42wS$=0^w3(x5)9kLqWQaeY#s470jwZio5^C9NO7YUr;k8&5Z$KDev2Uw=;@ zL3&ST`i%BSFO>5UP1C8xA73?eSSMbh(M{b*YH=BZWHl?CU4>|PF9>!dVo(GjPBGJ1 zXFf_tf-{r0=*l3l*tnZx>5tWql4FTy%{$MNKRlnXCgv&efgaO(pyzBnlt1*mi9(2E z3a3lMHEOe3RJJK18vM7Q6dPWd2QYze-Xt%kNm%`x0Sm55r5SGDQ4YWzJYNy z;71!L5R)1JEgsu=g^~Blz+;mCBc6Za`v3AD4B8e(Q;Q8C`U8IAp?JIvLGhk=E<|wt z5`RmT|M&iDepgj~S`(#bl$VhFfbxsgyN445*?bK7YVyx$+C;C4kX-@;%C87G#Vj<4 z>h>%sPvQ~;Onfkf61h75C8aOlpTi6c@>bqT+jV>$&*OMRkfKsFCZ_GQokH~Gdke?X zFDYNdpRpsA`TV?h@xNF6Y5CDTKYXzGKm6Bn<@xK!CaymG_7|*Ai67T2R#e9!TLHYI zwpGY$iY$lyY8^qt;Uj#6y41$FsY+?Z;dtQY?k{EAL55q~A1cDJ(@UD0YqJSlLeLX# zq1xXD`#KkW@}u~&1>z0S^eeBNP zZg?4(6}TY}+TTdH7mN$uVSSt0sot`@O~3r2Yow3W-dzQGW#esM?z_7ZEy%VZP6-&- z#i`VA$NrA}g(qZ}ZhX?YU_9X#dpN(R_;_Jo=UAfdlFL*v6NeEs6J2`g%Em0WNK9b( zadbR+yhmrsQ literal 0 HcmV?d00001 diff --git a/Data/Tiles/bgTiles1024-1279.bin b/Data/Tiles/bgTiles1024-1279.bin new file mode 100644 index 0000000000000000000000000000000000000000..734fd8383557a4913363b805112d7b3897f5506c GIT binary patch literal 4096 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 JmahlB{{V@%eQE#z literal 0 HcmV?d00001 diff --git a/Data/Tiles/bgTiles1536-1791.bin b/Data/Tiles/bgTiles1536-1791.bin new file mode 100644 index 0000000000000000000000000000000000000000..a586326a6704277dc815d32151ed6f5137d3e9c5 GIT binary patch literal 4096 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 J#r0;O@)t}$!~FmN literal 0 HcmV?d00001 diff --git a/Data/Tiles/bgTiles257-512.bin b/Data/Tiles/bgTiles257-512.bin new file mode 100644 index 0000000000000000000000000000000000000000..f649404d3e11260fb33e8324c387d1e42d18c828 GIT binary patch literal 4096 zcmZu!e{dAl9slm$vbRaj+ohnaa^&uk3`DSUl?bOjZ!aNZ7}^S@4pIu^0hy4_P`z;+ zJvH3!0b<&Y4eitx6};3RQ~&4>I@4AhO>RRfL1m1N+QRT7OA-k)X3Rz@w@LQ)_51d6 zKyCMX_jcd+z0ddieeZqW_kAD4Vogu>Jkqnhr>Q5_1TkP3-YZup(^_(tw4@;e4@`;5 zTu8!o+-oR6d6{e~n?wqsymJ5Y8?+LVWf*XutNM&m{W@+SnbKyNnpV~~Fi<}s`6V9` zR}TZA>mfse5`{nqkB9RLUV%qqIq<|{Yah#!*Ut23NGyZHQKTo^x0|d|VHFS} z6cTy1C=oJ2U;@sbt#KGqQK&snYzOSpaL7*!jq2})vgGL*SG*We);yk2HKGwh0EwFc zB2CaQU5{Fv%{r7A5=KmxG^)>iPTzZ+EFv`0S)gUS9LY1q=IoV$cVTkWh_fbkw6hB#^ZSHYRfh(Fd){S>FLXSmg$cX$Yf*vimv8I zQO0`;0aaUd0+o^kVF`{O4VaM5);j0HPK8rz6L1*YQ^LQS+17g@)0cTC_XG(?ke%2*ahkK<=45^c1qFW4T-YXnF_7H{phVi2J2$TSu>Vv1?62p)jc`m`|vRd=R{7|AXD5Pqj_$e_}8~=kE!a zh_oEtc~H?angb44$SYLR1v*#bE|Nr-`SDKo8yCH}XO_>PH+8#i0JQf|J-VUWkA{Pu zex#3IxVSwN2n2&kHD~0Emh@e5&g=0|@4=r&`{S3pf1Xh%#iHjz(C?Tg#sBJyHwRF{ z`&5p{69|UmE$Ii7hllfe{saZv9xQ}B>Lp+p0o;94-lB)fD0(R7Z!WTj%IHUoOSwxq ztI<`(r|(R1b{M zl_NlFxZWMlU+g*d=Dizk+a*ar{Y4`=Bd3gp&*(RPbHxJ$M@LH(HKyjFI~tP>mrTu zh$y;ajQ7$0U-_v0ROda%rnzbEOP|j)0s3GyEJok(;lB;~-H9RcSnN#08F>syWH9|k z`x}wL5}%gbjQ`)LR{+8k|-J}Nxw zYl-Sg>f!avjbPov_63GYW4Zb8hYu%n{FHd*hAaFOZ~4qMN2<;HOxf^TUi*0TWOP$< zQ)rjeAjAY2bY=LSR8aQbaRcY&Js5xS+?6IOi_x)-dmqSVLA-pEanS7OZr5Mezf2go zBk-w#rR-crg71BI1sc~KI+plZ)4t||a`%C{J7)75jLIGw5IHN2Ay|(b!H${>W(7_V z)-RQ?lyLuEeI(p_bPFcJ5Qe$TEl|n&Fu^E2I=(m#ksOP18I(+)G>9(GN+@?$&Z*?8 zm|qAfhzF7(UB{C`HVg^ZzX{i0Myf+k$g=kQdQP5SFNfqLm&SN70K1?bH+(%b!!gLZ za2!3c>iI81`YGA4EVPHK>pT=n^DFD)i8N}J{>Pq@0TSxJ-__4hKIEKQU9j^%h*K_ zx8YBTS6%(DqW(>&olkr0dEd75Nc`!+zvPyOw;NcZ>$vOFIc*ao{tG#)0&QjjD+6V zNxyNwBm{wF>+3r@HfNs2L*FzdgHq7VpUH&m5)Q)2B7r^ea6 z9@}&GJ3*r>^?n1*F9~uTY`uiNK5_dmL*xRKprRx?jYqM7{#Vy^O@Q6y_#Y9szC=>+DrL@wx3Ia`ndmCwKv*X`zFxOBu zC9$BMBIx(k89>`|Nyw3*2oiGL*(<;4Oj07K&cn{(EBte-!|}!p(Qw7JZvBAKY3{T3 zV9rmR#(21TuD^nx!_vS-$R2y2)oC6ux^=pIOHM60H73hMCS&sG!qJ6WW6$Vr8r%p{7`Nphv#X2kmN`nDN8fItCTHHPw`V1X@6oP zS+ozzJ)hS#)P((dNrtFMirTB3#1)w?J~Gud>Ca}e83xDaJ|4!;N2O#dbvLgU-SiT& zD{0!~<_zD&S2O*l4_?@gh(Tz?z!7p8Zei%LD9_V7s=&!EZQ@StOE*XBZsu-gs+npw zK)Hf@pVUY<+EyZJA`nf*n}hphTLcHxSBs?k+TC~|{6V?J4%33jT G-1{F<$YE~) literal 0 HcmV?d00001 diff --git a/Data/Tiles/bgTiles513-768.bin b/Data/Tiles/bgTiles513-768.bin new file mode 100644 index 0000000000000000000000000000000000000000..9e4aca690035e566f3a6464dd78034c9671040c9 GIT binary patch literal 4096 zcmbtXe`p)m9sk}BOJ`ZJ&PF84;#p_cB4pVSgA_8W9HdNSnE# z%vxh~?~<%Zy8e-}Kbk>V?KFjy{Si|(SXvUFtB@92QnSG*j77>^lC~RI&cZC$r+fRp zdncVFwo&N&;Jf$keLvst=lg!?8T74FJ16^d1<-|rAPYJqKnE<9$+`2nJQ4E4%a1SU zwgY)cg8@~j;FC01fHiGWefsd0p)M&JMy|&vwr?ZlA6kB*iO(VtU@RUL^!QJ;AFEI2 zVvrR2A*{oBc#>%Lf{`faNwfmT8UF`%4SoUN!N{}3fx2(zEAYhiGwELWuln>38a=Bcx$s*KUdv9jH&-(4?&4D{T_d2T`;1X(3jjB|kG8L)NP*T?; zpq>t=tGcbSr+mm>Bm&wrgW09&`1<&I`eRl%p%v}?Ry`E07oh~JunwD00~h|k9>CbG zdbrNu=?W*LI$RUSHt6zd?fmxsc0EP?YT?QYuN<5|Y-O!%QKw)PjHTS|>9wiPtpde# z3f7WwJGVCd`BcFIsuv4aU$}DcmBaIBZt2CZn@^kkubmI`XHtSNN!>Sh%5vdwso)B( zE3g*(L`;*Iq+yPB>}$gu&=zOTGlv8n+WhKB+`XIltM=7#7em{0kuK0n^dh}L=e@nt zJSc4cTz4YX-pXM4p#3(PqpfJ{OTTgtS}{*AxW9CMRXtakWBZ5rL*iMpoR7iV@F(~? zhzJMUo_Cg{zygBgJri=e?D_DKo6dlDtFyQuakOy$%tE{lp-X zQ&QP>S;mZ0-hY18$Fdw(!`s2XD28 zWFit=ge+4wQ-1N=N{>3AjT#ogUkBo?V83PwS#b#H-Gn-%WwBqth0MHw_ZEm?i6`V! zO5HDVd8x;-U=#+_M%>HOa~%0g&tE)t;kk81ZNV4eh=*^4BfBE|Bd6!<_WoNvd+xx* zu$F*?IvhXHdzM=V&$;L3j?F!Psm?NcTD+^Pk<%~jKd|dt+t5G5I?jIa_SSZ8JbI;I z=~>X{>{iHOQ4j*BY~Y(`4>a4rlP4(L`v#s*8(yS%qK*}h$@nXM^>6V6kM=qy^m>`q zxu+mXV99HgF1d@&8y>Eb0*Ybh4PW1j#N_%g2H#is!n2Y(k_Yzt)y!vJn)$qqCO&_q zZ$)qBvo??1_N?*v{ObeGN{z?o_Sp90xAU2PkK^;1{x_U}&t!P*CjFqNk7bv#OChV< zn=i;@Ov5(tN(3ZhK*m$=PY3Q13Xc7rD2PHx=oTDyB>H^O;%Mf3TaRVmTzo$B;lbxM z_BdR;x&d{t7gpy_UO~9>Cj}=C2Ph<>NrrRfg?%IBuqIjNBNxndZ2q$&ZA-AKK1t##|Az z+VN?!%v|8@6(_{;?xbaQ>S5u>MO2NZIYRj#qMok%dzN=kuzNXEuNj(wIcUrlKS>Z1 zl2Rs|={EaJNG50=e?1mZWe)F-edSmsR@ri|L$b_(Y1Cm#v(l_s3&3_A<8buh^6y(omKl2=qCnVPUeYDK zr~8{?48nMzV=~Uk*^{$HeO+O0P3XU!u@{>J1>?m>tm$}7J0k`3v;}bzEg1w5&E3PbF}CWd;2ucMQb` zdj}qx7(2t-(PB~4RQ2Ohz27c_42kk*XwA?u^6=Q;*aPT+@ez^)nlT}CilXebKP>7G zkHPy(sVOzC$m8P+zsI`@*mhb6){mN^(Y2lKY3<)DxJbU2F!<-pvKya()?~gRw?3)ecJsP3ZGz`-)M@_G-;nRzZZ^jZRbw$w?-4kvo--=P>1VEB<#$-6}JpoQ2 dCjdaej;1{=QMEs!hw_hCCbenM>hc=z{{Yn)KWhL0 literal 0 HcmV?d00001 diff --git a/Data/Tiles/bgTiles769-979.bin b/Data/Tiles/bgTiles769-979.bin new file mode 100644 index 0000000000000000000000000000000000000000..e63ca48e8e6f5290e9901b588a3f1a58df1a8dc0 GIT binary patch literal 3392 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 literal 0 HcmV?d00001 diff --git a/Data/Tiles/fgTiles2048-2253.bin b/Data/Tiles/fgTiles2048-2253.bin new file mode 100644 index 0000000000000000000000000000000000000000..888e40377991e1491c045d2cd36b273a5eb9f5c6 GIT binary patch literal 3296 zcmai0UuYc18UJ=~y*HBAcWdR`j@9kmCR~syA}q#M7csfp8rQfk2oc;?C_<>noJDb* zb8F;lve{eXHrVZp`x11e52mD0=%2Sfrfg9VrU>%T7ZFOhkRs=yxaT5lJ#23Ko4q^f z;$*-f^Bx=8zr;|ZiV-XBbr=_aHyJ-|gR zfpbM|fGb)P3#jz)E(yc8wyg*7(IJ@6|&W+XIV?iOP4Y z7yR%t-RKSBmi@}?ANu2^7q84#yuYMah#*LkAQ13Is%+%MK&&@GmROc$ z4{IztqUWM`LmkQ=%4hQ#G?SvJYBt*mp;0>uL&=uqbNTsFvBYiL^TM#x zk#lyW4U;iV%VudAY89+g=PQb<>+yrF00V?L6Wr{!9=9HU z@ZXv%Y`H4mzm?pIeOV>Sgw3ehE_L!<`I4~0q3|de{t4YhtqQbsW ztQeKzNk7o_jg5wHUKBp}#ibxvT0+zydh*2byo5`Z?p_<)hritzTjW%$R8*AW5%rKt z8B8C?)Cj{y$7_301Wb)a@qA7=W^F^-9)aBof&tLJtUdHnR+#B-amEmm$SE1 zZXcKbac|%fsXBc$bJE$HTAgw}no%Xx)KSDRS&r^_beA^!*mXRNw&ev^luRaf{Z zp1*N%8I;fq>*3mxh#s?TDqKGN6E{N&G?fiI7i}T{Bl1GqlNsuH{1=w%J-(bn*|7C! z1MD!>-kgYdid9F!WDpx^c>%a*F@yU}88zeI3X}lXF~Z%Y$cx0fAI7NbP#NZOZmDe# z_Zz>yf$$(dcYwbObOic!=zt%EZEE8;;A4l}D{l8_Jm!bEksC5IPg%{|Rpg5bAzM7B zpW~4$^E2~nYcdUzJHW?}r`VFY5l>1&#*jrNA2H2?F{ch80Q_HeHXXVXx=fLgZm*fYF=ILJc+d4|atAmHM6J~#|hk9s)9V}8{g|*iF@31)N zFusE24dZ9^Q{24Syczmz2NTP9?c>7dz_-))8cvaW!gSN@(05#JBj%RwupKSVb#^6JIm~G>*Lpjv88FG}O$aLd*GUX_WLLOCc=zqmJO!}6L6Ev`b z^;>hY*C3f2dZxLd%UVx{a7a-jaFa%WU<+Xh|AI#128|SAIE>+%YKx@x>+)gLv_Ip> zWe5I_yj;q-~N&Oz+5Q`kG1zk4EagMNnZ%f0vE z6XnxfNA^k=`|k^BPronpA@rH=%m3j&^}amCm-b2nRf?z)MPU@l*p4F92^YLnoNzCk ze(jCRbJZ6mp-t}A!u#+2X!^sr4fuTi@d@{}H!hsM%&Wze-*%(lEX}_^_4iorN1xBW zdTjLeH-Qh>zgu&@|298joH;o=3BIID`_aO^_f}wE!ae)PMhl055AX}46UQfxkCXRu zYF~Cooerba{{56M=h%}7=WA1aPx>7^Q_hs}J}HBaZoRAE`x+B)n#g1!83@9)FCip? a3|cY4PaL6#Dbl$CN1w!W2UaeG$QkO;c!u z%5l+y&)vCuzkBX?&;2>~+?h9MzV!2}RX*wb^760FpC?WQUgGoqykFu4&Zz|bd}-M( z@^6jYn)9Elzcu%!F>T+Pn=h5VpeIwmq*QIsb1haTs`TPZM2|>QG+i@hD9;s6WNcwu zxeUFU&Z!QKS*MG0noSOM@t8Gjudt^?u&CG$X_mvdjsb6B-8QdYC7&=8k@FJ8v;h4Q zzk*VYKj9M;P{1en6RJ_nuka;wCnT-9>f313m0SzgTF@`~rAg7BbCR00h~Bqwjb?T3 zkm>m3`96_@;Xo{lXNR(_VkcvYowY0h9Lql+*W*UK9xwT2r=`yg#E{%Tr!f^z)F8zZ zU7S;53@)d1aZ#yZ0>w67Cr7Iq4~<6{qeV9L;`_7$PUiT_*3hoEL75?Ji5Q>tMhoAj z2ePJWihXEI;i+tYp>IUt8fQAQWJfo3lUY(anM+pnf1kP|J9|rgbFz^((zbpndr{%C zAscj$BJBkFt|70|D@avsfLwBsN6-?P+`>K^$W39LyiM#8F~=SiHPZjDH@QI zF6U;*VS0N#gJ69<8LwmW+M>gO5_wJ6JD3XCmHGKDf)_0~!k4?Pv(C$}x!)}ZHkJn# z8FPx?c1Nqh1-jO5!VUAK@!xmai&4BZUiALl!j9wnaqRmJMkA7_w3LG<)A?g%IwM{GYM3aB*}6z*$9xrdKd(PE%F`tnS3tK zP1Ey&pwSS0HiQkGF-1uxX%@-I8pmEKO16p}@8Uk!OIxH8SBqq8)#0i84pj}Ki>HQ% zr>OeyA*P1)cYLShOyl@1bnvuu*_jhq)B5|re=UgrTD(U6q=}~fr_F_EA$qjrqk-d` z^shJP*XGwg_^f0*rkGW=dLzCORYj2~5!6Dro^NED(vx(QM@>K>rVttRx?x1I_Ealp z${8zT=CRP^{L8Mxr$ve=jkJy5{35^aY2PLvUgzAm@AdGBeC$YtR&&7u67(llM zMbzpvJL?qLS93+Jm^)haRdsQ(Qq|8oRbF+@`~J)fyawKrA(r8J9J1Ex)vNblL3Gu>CNot*_G@Pcx1XT}NF*h9)**!^QWK@w6+7R_{c9}XCj7nq)iP&@JW z&6eAI(TB8Xs^KEoK`XWUgvV1PTM{~hmLz-@~OoNr3ViRuks@^KtPoLvgN&{?Pk z5y~o(aC6bONOceA8&AhTu$`aY#$N~8gY*@oETe0~gDP zzQu6ZsuHD}Dw2FyK0#6TF^h~G&N0z7$r#}+<2Y{Ig%uiM@4M< zUoa1yz9IYs6)bD~Mjvih2CXV>qVD zG%203xEK}XPuOyyz;A!rR21`fWegBCCXJhaC{GrSr&9{F9m({DPt-NGW1Ahr+KKqx z7J)1DQ@mep-Ve*tC+UXJiXnFH7gC>hyTp|@(f?t%XgEMLy0I1!ch2j z7@|x#;Q8F3J$n4i>lY^6LxNBzdui(Z_kM8V!>A6pGymYAedhJi;}^J_Yw_!L`0JU; z_ecH~iS_94*_ZaGZhjqjoBi7*>w9nUJ=)2ml{clM;E6(_fcr`6Dw^e{g!gN7z-cg% zgd`wv*Ny~`5YnwlXta;^5_|Yb^y&K3##mScS8VqSet)0`CZD21x<+!xcnZ;|Uw=n` zl}(88Nn|dgl^BSO6tM~YRs9`FH=#g1>Y%~TTt+6uG{q6@;ggKs55bB!5FI}C!-@!d z3LT*XvLGQJt!<6j+=N2 z=UunpW?juqo`&(|!?}O1^slA*w{{fbaRh9q% literal 0 HcmV?d00001 diff --git a/Data/Tiles/fgTiles2048-2296.bin b/Data/Tiles/fgTiles2048-2296.bin new file mode 100644 index 0000000000000000000000000000000000000000..393b19ad7a6977ce875b5ef67a48d13c0e36c7d4 GIT binary patch literal 3968 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 literal 0 HcmV?d00001 diff --git a/Data/Tiles/fgTiles2048-2300.bin b/Data/Tiles/fgTiles2048-2300.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ad484f7377f8caa5677bde03283d715b506dd6e GIT binary patch literal 4048 zcmbtXU2Gd!6+SbbjwkNao~CY@gu$Lxt`b4C8mcx7)vRZzO4SXk5LJZ@X%q#eax3Vz zE>x-6_0CMUu(a^7MM$d}fmFe+K!W9s$3=s(iYipGNW4U=DsoxW_5lTV6{TUBc=+zv zPMmI6dDwI8>-*hv&pr3&oO7=)P_6WnOI3Bk`q}wkoIXt|71WYib8Bu%EvPD$Ag`4c z&7%6;@by{usq*WyFKJWe_1Rjf^f5W<$~mEGI*x5fWui(qK1cL`WIC;;d|vMIAh9Oqom4VbUxdJc`td>H>yilooCA74+#)F2-IA-I80HVB=Xws7dn}eFJ+m zqo@|?mP?N75?PoI$S~CGU^cF{3rR4uhQWYkxTm9f)QDE21-ER)@?3ue%JsK9Q}M6| zDjx3OoDgAhIiZ7#f`Z$xvJgQ9$=0JnbeK%&=Pbqhn_VCx4iRnn{1RJq(r)E;G8v-I))c~Tu8pUx^VTfGvfSJI?aO}jm*QpWC7E?~KWNT{bK!#p z7ac6?h&wRoRtaLcA#O z%WizM;}DqD+ibF3^nO>J6zQy{w9lKhD@Mgs;`na$LcB&%mx4?0u>1fr71K1C=iB&2_bUyj?gRlaRVvY16jmx@41g+?FpSn-t_-#yE5&Bi z3{$C#7vm;TOct#uT3$YTmf;an3+L5?s#+L{#hVLJ6mv*&qs3$CO9(eB-NweKIVCL- zOW+cJ-uG@FJo(eHYq4${7yfapGbQ3hdT;cAu|70EY`izhGbr#W_%LaPXgG9(?zFLK zIOwgj0Ozf#4ZI+ zV9izi5OopE+?8}Fq0DlhL(GUDO)$#4v-DmFW8K^ZiH%!yU|>a>jx2 z1YndULE;6vTR^WwHs~bw?KR>w<;;((Q8Bh7EaH3jiR0v zrY}evm+zi>8Rt6IrLUALH(~2k|9(2kBG(*;ZVT^Y4;H}@o#ao{zmb=7qVIf~<0x^WzqayX77 zhl)7#KVuyVeTDf68l^I-`;ZY46^N(|8* z#t^2$6bbD*yBG!Gk2rEBz-M<_7XiMGRNyhj?GE-w%u2y>x>~*%aIN3kgr&FZ3?>srSn#=s$74JfY9*?A0t=~6bo_KNO&>7Xv#rkzK z_~rD(o5Oz%*?zS3rO)h6UHcO7Ci^!^#y4M9cgRN$j157bsWbb*$5S|DZu&aR9>gHKur`91>8?uN6;)cIlQki zfJy_2Bq#xbySB*(1)xq#LZ)4`lcf9i!Vgv-H%5aZblGu#%Ksl2LE?|nUPUIpZ9Ii+ z)T_LzJTHy2`EjH#q8FP84-Tbq<$2{*PSGJiJK7+@M_)w2NY_~icIgw3(f7g%3y8Kp z^}-5EdjjpJJ-p1zvbn1@bAkDAKhJB2+&sh z|7qo0{D0i|Kl$|kms`oVdcSNXk9UL>pYVQU@8h4Z{budA|9$N32A3|h$xBvhE literal 0 HcmV?d00001 diff --git a/Data/Tiles/fgTiles2048-2302.bin b/Data/Tiles/fgTiles2048-2302.bin new file mode 100644 index 0000000000000000000000000000000000000000..125d68256c69d013b7b5c5eefec5f288423d1ef7 GIT binary patch literal 4096 zcmbtXU2Ggz6+SaNnH_H?yAx*<#%9=^L>t)xQw>pKhG@DoL?KE|Wvs|h<5-rFqfG>9 zvVq81+U?Awfs(*Oi;$`;0x5!4AVGQKv1pJhD?$-P@M2YwwV^1<12UT`a!eWT@ZH&6 zd!458L(kd0d%t_`x##|zbMD>qR4e`XVpW~AetPcbr%sVd1+}Es+?rcb3#v*b$ZMq~ zv#35Zd~MEsqWs$23)-}KZLU@-eMC;Wa#pCCj$<2AnW)l@&l24uS&$W3o1wfas6^TZ zHidJLi|L$b(Wr5(I47HAQ3sD2)8?}DhzJ%1(<0fhBvrwLH?U&r7cY`aSP3iD5=Ar* z`J#FOHBWt@PLNN&I-x!wk0SMgx`^QzrA1qO34J=0i?J6&x8#;4*?86wYSIEm-@qQt zDyl`g<&xvNL>8t4G7L34n2oFLLK4iZVK87B?y0CAHKNsM(JfoCJl7wAa{cYjR6Oi~ ziibNmCq$TBPUzsG;9&v97G5Pwu4;F+dzhm^CUxUmv<#ihp{I?(Z7)G(hHxZoe#ZG2 zzecxtS(F8H@2H@rvb}|#VL_EuNs$cRQglU^3@)9_C9BH6k6!1kou!^RUQ26fQ#qSG zBdEN_Yjl%B`7p-zP*&+UxGMLPO*YC9QX*Y7aLyV^omnSm9XmvlA{&}6R?_7}C@GrG zI*^qv=Vr)~l-7Rw{_1KnTE*eDNPz<-^0K0|F%@tswOR+ki{>rn%bng?>*?q0ua|uj z+XIV|WEH<^k5v8Bbg9)v)%2&ve%J2LX7SWm(fMPHO>=yFaBzIwG)ajWt=X(3W!KMl zGa^col$4U&1u5AhW|Bm8QtC>*L1n)|4a#iGBr^##6UXsSyw~ zysGPti!+ zXlRP6ckdG0H_LLZk~NL+n{VT3>zp;muq^lXe(RDS{keFFdP!zo-S?aG;e2>+(M1Q# zI^te#)>djOZ+}oSEuF2ZTD=lo39GD1l<>X4uIC$>Cifs6=F#F)fF*=ly{>6tBtMeN znR3R+=y`-TS^qNY@M*>&rNNu@n;+HhdDOG653jRsnK!%iiCp=+d{uVk7Z5KB{IVM# z?KlKx^%k3K7rob2Cq+7=DbhxZVpL2ej_+0*;x&pk#4zAys_8(s1fd5CBu960JpHr833G8)@|d$KW=oUM7&7vjvg@9hvtWkcSm^!1wI8ICe08HhhC#wZEPA2dh0B} zIWCb%@7S5s?cw(vgoU=bYANq$8{DLZB8A?^6dABw){%YFlk zw6MZbZSqYl4&05;VtL*8NpcFk%id+bDm}!&%wO9$dms2}d|zWyWDY9q!dWM_jToCv zM|voP>81$g_wk1*%-)wm?V%QGp>$PRmLy%rVf(DBu1m;K9LLg)rm*+%umoDWwl=^L#+m;xgaLI1(DTS)P;QtDy|t-TsWH#OZagsk?B@qi0<*M1!0I2$cfe1)Up_|vvHRsQeP%D;VJ?RnQQ!vw^X(u& zoe<#p+<-Z9=*07|c>N6QGq`SlcPhIbc$0oM zHPAQE*H6y=*gg{njfO}Mw z5+Jy1n|x3J>a-+e+C@7_x_c*lfAvvgG$=xs9rq{v|A7%C{wVELWa8V#Q^-cW%FD{L z(gd3yNBRYO@Mu;>JXbOLxtodX^L+G_tlseFt7 zj~o9dpZx!FEBRLMm#yUSjTaUb*}FP3u6oy|L}hKPx&(EIn#7kXQDqRpt&+WP%J DVt{(M literal 0 HcmV?d00001 diff --git a/Data/Tiles/fgTiles2304-2559.bin b/Data/Tiles/fgTiles2304-2559.bin new file mode 100644 index 0000000000000000000000000000000000000000..8df55b53cc1a5511362e6e2996d4905c320b944c GIT binary patch literal 2560 zcmb7GU5M0H6h3#7O|olt65D;aYMi8Xu(Ak_tE|yYGuc+8?SuHxht^UFYS$kY4Qh9X zHO-{5_)|o-Z@a|@A8IR7%7QO_C>mW5DMI^LtZYM(wv?@At6ftaXL|0;{)|YGp2KAB zckVss-h2KM2q5UAfKS>7HJD(dr!YK^BpQG4eoDS&%gUVbmg603s@tCm5$qlotM`GR{#e>I1W|fb8o;f8uXg*8?zg@ zK~xOqHwz&t;=LA#10A^xwYI+vM~&53N_L!Ud(eF&n{4~?rEA7j@8iWgMGqcAeA`ID z3rpc`I17-SH6hmZi%@L)5P(^rv7BuGJe$}N-P3xgV_(J>O%Q4s^G)sS;3K(Mb>3gi0y*c`YcjPZgr zZiIJUUsjgqme>pWXeWYbZI!EtsqWgn7RR&QP=*{LH%J2;JwFKd$W8Ji8HEy_vx|!Wr+exW;wC>qmYE@XgZoeI_f4PX4E>M-c#?59Q2eIK9H8) z*?9efW4}OxnO3I-3+*I_k|qo32;bAPiSNn0+SRV885ux}D_};Y5I4Z^`GD7wjY}93 z*Z2YhE+A7JF?_` zn$TlC(jz6tSmS=ywNyyOluMu>VK$g-J%2Rwk)R8U)-wGZ6pf#qD{jRdKgsl8*Ii~o z0a*nNG;4xsqrQkSD%9@_peU-oLVJa-S+a&nyfB6G73Yc-o%Ysd3yLXPoDTJLfzzH9 zvAGoe#fayp`m1)WSW{|bI$O~@sbM%y7$ym`nXo-nN#c1?G*#0yS!YIp3iuBV z2@X-J!meGGEp_H>+0J$OfgoJJUh>tqEuZ?i#89hWmk!x)8!UBAQ93f;xkT_1_S~47A zl^!BR*fqwTbeu!CU{xTq2Z3~a+^H+F1xFv^&;Dxn)(M zD=~L4fzHg#WHJAIuz0hrV=;SUFbfK&b2eA*EhCPbE$kiKvlrOgC`W}n-E5wmnK>g= z`4Yd03ap+PnWpatfq!&;k5KpTsteg_`NRqC>(1ku!~S%&a=(@y#=RN&!zm3eSM5oA z_00lMsUc<0BZnV6p7{r0)deXng~RaGs^gjRiTjo5YX2_gnFi^#n!fc6`qnU_1^q0y zN!%zd8-8Jmt;)iX=+weA^ssN0kZp|poB8!!oKTTYRRqo-93esLJvM~8E zLf{r;Oau>#=z#`#(1let*FHd^Mn0eCd2A#|z^gQ$XJe2gi6wB3y-Mk80rn0H{CvLD zjBQ+tM98dd{Bw}P&~Xd{G&v{t0QMbM$FBuFqw-?|bjP-qT#HZV>PY-;y xdp8=%(>^*DjNw;Uo>J(;`LVu9)245BpBiA-e0KiSz>v1XJT)-Z*Z05Y{{^m`dcXhx literal 0 HcmV?d00001 diff --git a/Data/discolights.dat b/Data/discolights.dat new file mode 100644 index 0000000000000000000000000000000000000000..da4e0038cb81fb720e2521a36f622361bbf831b4 GIT binary patch literal 2880 zcmbW1S(1bx5JdIC_brm%p*)a8X@ykTjZ;SJl{LV& zdA_Y@`^~a3)H$2!7r+wERR_=a=0)DD0$RI|Gja>X+y;~-$rmLr@3Ri)&a=~=9-DTN zOXK-0IRNtJ1plOrG!UMO>r%xVXFzt6oTWbpD<%u1FSKh#c&033FIC?zH+UXu2&Vf5 zT^iAfs}EvM1KNco=eARV6UIH(qrVm^F}AG?t=nA5p@a!zCY3Je(%9%i7 literal 0 HcmV?d00001 diff --git a/Data/font.bin b/Data/font.bin new file mode 100644 index 0000000000000000000000000000000000000000..96dbf33f7127969b79a7c1bd90e098c6c45e5f32 GIT binary patch literal 992 zcmYLI&2G~`5FSe924p2x#K8#5iHcSAP}+q^VI{Wf98l;Xf*ug!grcZytIDKS4~?m| zHWG*{5|6vFW|$Dx!}nHqn;<8`8@uM{$< z(TGC9^?}y1;Ww74DDb8&;;a!U3RHiJ7n%*1V}qaQ@UViS zPXC^@hr_LnINaEH1^h(H?IV6+>w`Znmv1-j1Yuz2xfX-k%xmt0V4-Ef)pv}r?(U#V zSypEKq}{%?NbL8~wf!JzUl&?@U0lpB-Z}o!t?}RAZdX;B)b-I$wv(9s<36SKE```n z5P+{;A>#HKZsfAzj}>m$%=q)1bGJ)#?&fooySHoO?#flmYyaP$-7aICV++8@yMYP8 Ve+duG@nthUo}KX@zk@&4{s(O`>}>!5 literal 0 HcmV?d00001 diff --git a/Media/FGBPreview.mp4 b/Media/FGBPreview.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..40ca8f86a2e7b0603c82e451f86547192c567596 GIT binary patch literal 1964311 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 z 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 z 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

i9o-~XM>(S zovBrLKQn(Ush_pvMDtvZX|Z0NRDGMMSWbcsMcQL?UkND`;RBV4^`M{>xi4K3v6m5K zD0@aD+E_i4u`*8G)tGXOFH96({W^S8{~U24%e&@ z(8n)wx#UDIpcl(jwnlR(H6YtnTj3#Me6PmL9pZH|Ykt2HLGTmcJ|3tV@+Z?efzH`a zm7&&`Mht=2K??qaN`lhA-$WUx6|RL*vcXAiD<&oDKQ3w!aZ$?oMWYvN&cv=x`>RAV zHhzy&&_YqbRde>x!g$1Au#TenUH; z!BtC<=fL10B}{#Jc3umznT%Zpt^S&XRe_Pj2pB}B!X(7h(7ZK_M^PiainP|6LwQ`? zFY3-kyQSnN&Q=Atss!JO7I;LB&?bYY< zdK`u;Ref$a3WD=mA@ObB|#3aj=LBaayiVkR?YM?;MDCdq7mx>h)-gDftD&d!HdHg}0+GdTAV z6Ur7cLXY^|;jZe!q)Fu%L{tLK#8Am-uzyfBp8LgbR3IG0K)m!2Mj)^(S7e`@l6Y4= zAxaxVWG$G)iB}|a3->J8O!n#hnWf7PZXlrf1-6cGG8=Meb$T!wq?kV$Y0c z2^D00#zW8GG)H(#5KdBZv$a0-N7*vKli51)#jLICcxv*n!%df#3>)VbN69tpSH&5H z@7V7M&m)%AFq%tIiHl0ofltk_pJtd1e1gsC`Evb=?y8ANf&c*EL?}<#Gt?iTnX5QB z?T)Hue+?R&W8WKjYsLeMj?3j+naX<~cD7H z3C@ZXr@C`X#Fwym#TN^hz(h8Lj@V^(qn`;l!>ev3IHl%R;R4PQ$P#_a%noE;e>(|Y5GtL53WaKf=6pg6*ydf%SbP- zrPg91uiaX~4+UxTh)h4dZANv@J1}s(lvjwX^ivPb{o;T%iuxI#SI+k0c$TMJ7D6^AcxeC3R%Av(8BZoErJo{` z`>XQ^=EMmujs4vT43uN^JM-7K?VZmnbi+D>QJKmaLFQhbyf?%PUZY6F;A^R}TOrph zlZQ!d=d-C$>S(DaG()X;^o`fo0P$ZwVO#z>bX^@(7I-3~h;uKyQ2GRX7G)E2Hd;h4 zKmJXRxbd$*S}c9eAHCg|(Q$fZD1zTnc0e02&&XBSACR_sFL*92ooWeA0qdo_UKx4D zf!yaC!11p_{edVOKo(-F&ATe9sB~L#Uf#}#o}5*#0bI_o3mcH7 zUmwYT?r_O<0Ga#bG}8R9zJ!r>ZE7)8f*)FgR7jDu+xPqkJ2v=r?QMKUS`T#3wyddp z|LCd&wwGj+))+l4w)-FR%!~Wfxr^?&bW~zVqUJlJDU6-4BEJD6b)S|VG)7?RZtGxj8ZaPlhU%=(^a^2hoy`ljBj(nZ}eYM5Q@qs zl_v})Co^Y{(&0=lylQT|ET+dU7;$xJU?SzbnJe`Q2bJHeJ`8O@mF4J7Y^({5; zYP2_Ew6EGcXr_Cw1a#o#%yA)w9z=oohHfk3jAKvaSvXTE(QyV~iZf}au8`FoHoHHl zTzRViOtW;mq~u)qi+Jw~@|gWYE=#yD31{hO)kzpqB(&6Zl{R@B{Jg=yYK5a@A_NhT zixL2{sB^5oJ;asuhucnSi4SR(&h;+y;25I7IFuXpQG~v z&EZ|;$8pCaGlFs$N*dC5qC!=b1%e4UfMQIDmXLzY(uOFoM7%;e z1m;C@RLT)Ew~_NFJer?YV;DHoFm+Ov)pPLrTYH?@le?R97k%5_Q&-fOl{LB^x7$#! zpN_*yLeUvh20tDhm-F-g)T*pL$=ft?1=VPT`_p#h4039jY=#*JMQ z>pJsE`uASflhKk>nW*hJsuFE9kdlaZs55`34X@@0(*UEOEFu*!CPDq;2aU6=FY1>V zF1;++WI>d08-dpXZ#vy|M&7<+UAo-c(;0_I`n4j~X}KxylKyo!Vc%4cCFk4anq$}f zY1C~;)aZaG6QJ-Gf2ig6MlG%T`FHH6L z=7s&k3LpWw5Cr0KT{4#F`>G8-6AzHrL`(civ$U_&K$T}ADyCj!BESuqns|E}P9@)c zLFwuEVbo2yyGBS^H2P3tpJ8@$e73M_?Q?Xaes~tTi!~=vSr@tzxx{eV)8AQVtYI3R8Ir!<&ZhxP=QIuDO_c-wM&@ z3y_)EvdRcEa%3l#$pF@Zq~KG6VRqElO^@pNw|R#|+OUWcazB#qdwQwijx(ACl|ldH+we z20tscdUdmhevtoc_pVw7&=&G;G1F~SNDOdDI_Gj!(5*x`Y@o!c$Ce3?zto?Ln7&l{ zl`g0J^dl&PlVwkB+0pIUY`YYGO$@TX@h{XnYZ{xk|NBX>r4aui0XbG^!%GVlXqDT!yY=R`~F1=cl76DD(J(gmVY7 zrs25RVRC}0{$5>90n^rHCh2oN-&~`q4fa&t%SHz#)AVF_G-%-WkvT7v7xvvXg7ym_ z;u80@1LX1S{j(CkqOvR?Bz?j_n-+8aFFlO4p%*XA1fyS>{l2CVF+)VV(OMUM?jstU z13KTIKZ^+vov;l8aFG&35EZTlt#2XOo^SG4hp>x{xr^aK`p z{j>64jT|zDA5o7b1k7Vc%;eCFD}O8S{0WVKF+?ef2RWbrOEo+j{+Gco9O z`+glKRm)$LNhu(l4WHP7Q`W9G6%*wD+VY6 zqEe@~x2je5%;%kIeKp~VCu$VFeK9(Sre>(^O)SQiuG0;5YW0h5L|%EdSCn2g@jm1n za*)x8jh)wMACRR55(p4zRB+hBFy)y+6En6_0*kc_&LPehm*Jy?3cg*Bj0wC4d#7u~ zbH1CRxmS^oeQwENkr&+oDAZy-29bb}5L;Dj#s6f6Q*_|bK|u-zG*vOkz`=@;spJ!- zk5xe_UWF>vs^=fl%?p;%E|(Yc*tP3g33NYnO7(mWhy?!K8F~ZewBeXGkY#n_9Y(S7|B6MeBLVk$)d;!=#)rKWdbLv`2ew~ki}{h9n^fg zSzDZq5+IxS>w`}Tk_anGWu);Bw8Ygeu&LQ?9@nR>c>7{uB2ZAK5OL_MKHAms37XDf zXTeD1I0ob6kez-gA()CI1gvd%8^PdeYc{gTksKN`5^~3nsHmQ<;-mtWrLE1F!hP8T z^^TVLUpyIW8hT@4UZuiERq+yO4S8P7^@>&5ef}EZuRfk%Exz4cKdW>txJZIXpr%SX zRKok26OZOU74c!_Ifu?JYHWV?1L(e?6%Yi>EB}vZX|?@nA(7c(N5`5`hPDJa!Y<=} zyhne6PPhwiHocn?s??V?+^d1mTz#T!cBf)qwy_tfRKQdCy?1&+5dcZZ$zGPBCWw1{wvFI>b<4WcVtpqi$~TNd@V8X zExO<*lvVi+@GxJWG4;Sk_ZC3b^XzHG#aZo=BW*Cf{?~I#d+U0c)<^{v-1}UQLJ;U^ z%D~YUJ$pR2ZZax>7G`fBHAY!c@yz^{kX>n=P=AOeC;#?MV;%xid3dvry%WsHcrMYk zZ#v9_OUX&CU3t=n_B#{i&pjrzfn4gyPxsGK=$e9PAq0T;&QQ`&acEyb{gxp-E`8e% z`Ugqh3GdV$tX42LM&_~Llym{udL>SZ%0{Rtodq7TqS&(8!l=#J)r<$!oM`v4mmC=4 zyQT}V_?4~3mJb;c**1B-hh?j?7My6&?1Ia{W<^68&gCD9v#!&Ct!Za3eT0WQyeqey zGiPpM$g&w8BQEz|uvrX7vH+5jwpyRUw+3*A7M*Y^GQ9c0Hg&R}&kAyr8piVRnJ(nj zt@5=_Rb)S<_}LLpk>WN@I-Yz`e440u>DyA@inTvMPnXQdOo zlv{}t7*3oFoXwxxe|E9h%})4~Lfw)^48IRT4#5B7f4MU~uc+YHP#vl^tn|v;^>X#F z-J(OO&i2-K%tCfIsb)HL!jI-8j;V#ox~XkaLfGY)!pi;&McJSJ9rzfJZajctCK1Ic z2TH;4*drK!48apOMh@G+p{Kdrc(GeIs5^Jp#K$9x<3qro$p3PC8UhMw)*MSMi+v)` z+ce0511M_0j>e*t56d-iJm3%V+=gx2AGA^p8J*}@HrZUWWmp0ld5-T*C3fX5TRwY| z1JO&SpwSuz*wNTQO+W*v5O8Od6L~4+x-h$Pqx9*qshcXo9*;kGr7oMV$?CziWnrlD z@GpPfUc2HBi>VDu0oP)ugC?W4PRjtMwg4%xmM4-I%Ju7QQmJ*MT_I6202E9mT#T-^ z>%&<@w5;SWdjbN1g_3_CNCn z>-XUDotubzLgjrF@g9sz!&xQBZHmy(4Kzj*A)lvG|P<|x; zG4a_R6StVBnvQiVT=h)mjpi)ZDT(3z&oEZ|3dmN@qeCzdKDL&qakFejfo;o>{DLwz zay}gU%&<9jWDET_+J7~nEp_`3+G40ygeAUC#)xeCq%yf*D2cDP*Am5c`GPVz>Q-rf z23Y@FSaxPB&$R3&lqHX2;M@NCIxtNChiQ3fiOyM+scNN#r){4FC8ziPGv7ZrFCP_R z*;TiT(;twv(ct2W&bRxBZ*>GP<4&~OJ53PI&~*5Bz)z9-tzf>NTDtB|1Rk_R*g^Ab0XZ|qUtlj#pd3?nn{>X1Zc|DxWA*Xsx z&(Y|a!c5YS`PCR+i#Kk#!{;!&g+0ZH`3DuOz`~^mb83=ff>|E|#i%q!eJiLrWMZh- zDWff%{qYm&&c2`w@lC&#PNgFmCi}pVXnl6kp^Oj`wG_vV|CHaWQ*qIVLxqhc6=~35 zLLu0~vB{&>g9_NuE9MV$4S*oqzj$Co=TnHTP8ngRPEc!XnYT_1WcGwRbw(I4g}bXh zS#q3fHfjSWGw1cPYE*u-;Xtm2>!$2D(G7q@p>4Jw?zmD0fcl9Mjg z%f+6?MCqW}#UwdpCr1iQHX}PMN=Tz7BO<@`k9W&gVdn;CQIZqQ&1<#bK)M`)7@)ko zyp-NgkX;F_saQyWQDFVeh>Zy$rpb!AX6tk$uX-NZdgS3~JxpUmmwEiizcAfspg!E<$DOUg_kdrx&{Y>FPa62(aJ`o>-7`-zXU zJ+zIpA%;o^Ja0!sPs5xR5GV#+vOLS$nhgrxLvt;Z2tk`=U^!^_J?mEYSQRdZf%y+^ zM}_jvz9mz?NxFoK@7{F)*u~zPz>TVnc8+;D+u~W%&un^O+^tf#lbz6C55KxO#Yy!- zvjPUL?==SyM4hz-QEzWEVfSNg?~Vmgth%kEVn@T>7 zY-$or4mNhL@ZtFl{8@U$&>J zNTOSdWtFxvVqy5dABYgsKuM9TJvtVkIGnK0%)>$VGID?WZJtuYLC}q~zJbYOA+W=< zvTp3=ERq>1L)NoO3qm>MYSel7CkKQE9k92KKm(LAVy?(oAqtEl>Bm#qxmZ%?b5~3X zAyQaD`iNIBM!fq{>&a50dk(M1qm&JI$1w=@2rt-aIaAb2H?$nJKO6j{EIzn8e{%Kx z=sHUuvYa%7{VqAM%G|FLS~K|qTG`nD%NB34mVjgypE$CpioHxA?lX48KNVGY*P%JEVHpwuROc1~JDmT2^9ZF}z`vl{K#+ ze2W6z*-7~h9@{u2| z?B1&3+eTv)g^e9(EU?2%gT?W-4>KVd%Lhi|?`RWuZ9gMxvR>?E&#I{axdA|y{Lg7| zMa>S&((?|^#XJj*!h^wbsfNF|3qNiB<}brTJPV3fM?h@?pe&Z>EbZoNSbl?{QHZC} zssOvZ=pP;29mrfwmKHb{teFsYTS~g`xXD)-WCtHzCwGs9emV0(B>-Kd&h zBv)ej%Syf@nJNgAsSH{rDiY2+BL@w`%7_)~Jxj5ZP*b>+0IEWli>5+U>0^!FnW>$* zNx9?$QR4h4&Q~noMe6RPRp#zo=D06%>+u^_^zy(>C{GavLULO9T%@yn9XUB8R9?fB z5r!aBcvgWbI=~sL5X{C5a3DlP9sxlNYTB4`*Cf0)4F4lvD`BYtBoQJ*3qKS^8XjqU zE^#-8Dk21YVyWqX_G#AiI0Q}uDG4idA0!CYBp`9hjwvXBWQGVp_K5(M-=;eBZXc9tJH_H%(8y6unCH%8U&1=F7jhs8@in$^M&%UkPO+|6h(aChU2bZCLDu zzz9_Av3ZUHbYB|;-^#-fEJAK}0vmLp`-K9F;PcD-oh;jPQl8z}wl&%4$kl(bQ~VPy z-&wEq1XyMd=N@^;Ik$kZoFFIBi^rMo7`p3ohyjhOeQ^_tQ8gB0gZ4eEwUBdcIOu&2 zp*kCZKpM3LMh{Roqm-${-fxr9=IhXS!hTaH(L>-N0t)UqMAIwEy%63+JbTv61GHAM z9tlsa$J5^$wb`VF=4eivUM--eSqjZ9Gahz&usWyu*P8HBa86z14H9GSjZYoLhyP9z zbs?oEW+2BSq-mPvARlGWu4fS4QI~11+P;$T6qr(rs9Vb{tRt5=J+NFw0=$XbdxMpI zGx^qHE@-7cqgb(~%l2q>srWWiF0M^iTX)|%rr#`zStDpyJ<-6^AR9Qra~lpCZg?on znmq-GJ$Yt^7mgC^H8JPfP6{69x2fmV+}rP6(LL8%BalH>q?Meo(pg>OS%LW6<|F); z#c4DX<9KeHl}OtU%EO%cW{P&&doHH!zcP4ZLsuP{ELH+kE6a4-^Y5+2mN==h-s+$* z$$b;0FgyEp^S^ccct^L71q0H#WBpzf2Sk(CH^RkL%dt;2gxNT9$9@?cF^AcqIY-+Y&MwR4*io9l(Sgf&&m)Mf6w(Q zH6`#jzqp>s)xt_>$|<_kxeEWo8q4&uEwXYgm5pmK&TyS-1OPJ;B`Pg8JA!tY+9vpx!y{#27ptHo)q|bT(1$TPXBd<_@bXqriVD%ObbAXY}rmwOw zo^?16@+Siy9@=NO+w)RF$NHa z?bd9-gf;dMg$S-jjA02`%=kb__dZAB29+aK#`nfjr8f)!olMT#Jn{b-f}qb)uHT^{ z(mV9W=7(JFLfoiZp97r{YmanmEj}`C$s{K;@}CeH<8}Nh{sly-lL7!c-bhxeT-fu1V{b2gQeEI(u zSzs&Xnp2YbVoM0~CK_XkVVIdL07%}HrNpYG`y^TQ27iJopw?^YeRYdk-8~n0BvAeT z{TW+=t57LQFx0ybQov`ae&6_UG>c@xw4?&B4qrNe38eczvazNN8-+_`e%tAtx>XQ> zowbN=JTzH}BhF$@I1GHsD?o78w|V2=>eJcYPflDk9dVtNXD9g*R+kP)qw zjcS=GZYAVS3#Z_-UDSx{mE@v4^sh*eh@oNwgU1sgS}*tzN+IBrmVZE=}dToxCQ@=ZuhNbsAlcv=>b36kdd5DJYl;kBTU^akDP3N z)B2X=kd0N6O|r3=x@u%)(0zYEi{ux#?JPBQY!+{X#J0Kjv#3d-B0=y$2Bo+ga3!AZ*a>z+`8_`6DGSRyC$1Y zwr$(C?V4;)wwr9*uF1CRYupFkH!{6R(@B7|suLZ(mk}neEa;OnyVQqU}e!_%y zWvC(4W>9YtIlwM2df;ODBea$8!V?b})TVLtsJXuRl-I2zVvp6cv0OY@Rd1$ozdKzj zpGQ0KYK%dx(Tb#~_b}-9`Zo{|aYT@Ezpo<649rmc=fE5E-*MEWK+`V}2$I>*?>4W3 zY3L!n-z;peX`dWNL&TZA5E;93dSc^$kOHYW#h$u0+|GcqR(wthCuz2)L}^sC z>hLMWy_l>zGl0bw?M#p!Gxz8|X}@wFv9!vcub#XIco==^NXIQs^sZ#3)`8p|+Opkd z)OSgrpIf&?#wvYo?66)mh(~o!>1PNd(WsM}x%7m8AK=9M3J=H&FI;>kcpP)DwO4R{ zWFsY+UjUsP38qHkp>hyAi-Q^Buc#Wqmt%9%i5N^vlj#5c0#F2tvt>}@f6wpN;=mav zM4%+rX6{*dPv5F1re4tmfN9|WvJPQ$eB7PD_D(awKv&VEbDU5_g%P%c>AW+s&ar3a zmupzBem|A!JFD1CV_|B9J!fOz0T5+(PPp6bt4S%ZM$OMGRJFxa?{t0qQSTw$tm<0I zC$gOUQzA)`&HPP%ewOuxv#FVKf1(d1s!D7m9ExlrA01jLZHT{Y`S|RqZOy%ka0OrK z?a)mfe*O1~PxI23b%18r>8tP62DCeBK;09i(_qK0!y>Aoh_N9$GH(;ZQt{hH# z7hKOJx_V=WcJ`msBc~%_QMSFOJuUJqW|}Y!L_8W#WloI2*b8xKCJ3jC(-(h5WN%+S zJTeb=SV>+xVV~bVyleQiO*zKtKp+I%_~y$#>^H8=EA)!c{GUWw&h2*MJ8%#v=9a7t z>qd(5QkGw}oRe;5C&E+%s9B#F76MT{)!z%y=Rn`3b86e`Nw$+zlsC>&pH}AKgG|8b zIDlBx4_5g)j>@adTLA>5OpG5zXcy{au#Fv+;Tzluc&JNcF_frs$K~L1Rg%lIO$?Z) z$pYlHSU;et5Fz4wjtoHfGdEnf!vRr3L0n8iNFXdqRq*SC~`Q5yA2=IfPp^HKFr^2Z}`h?J9$P#^KbevV-0)_<{ zW04eEG0fwlxXY>ws_l+mIayC88K!8Pye`GkEws*upKQIh{-&!KLj$;2b|c!|3HHdc z2b(B-2fF?M?xnJGR9FZY_TvO&?4&Y&!tNc~N?LP$`tMu>OphpDQ$Z<18e}=FwCPK5 zyCQ@NR7RzUUMp%)HOfSIcQZY^bFxO5dAiN*ec33%zg(ZD%kNdrh#2IfDaVSOO(mH( zT5mUBYl`%WJAO#+UtQzxPA6aJrUkrmS($p`^-pwVcairw6*E46?euhD*EE;OCrk07 zjch#lu(6%0NB17w21eJ*s}_KjzNr>7O9zjl&{^Na_~E?H6(AbUO|KbfV@Y3zw)X6@{g{u-#D|~fQ9he zbk0KWYY4ws>6|DuDE_qHR~4;BtuP$NWXePo0o5}N&9vdM9ne)hYjKB(%3n)mAV5G) z;=c&90!b`zmqdoI^6#^V;tvRO+w7O|gz&M@gD!Z_7H&4IEGi~$p8V}T6Iz57582q^ zM)zy4S{>YvHV?q6S}`9c31yVGI)BLS znCwMJtB9iw5cmoHl2@C*xCWrK@HAkp&&71Xo>D0^b)?zSpm~>*5(g78iOf+ zl(O?)B2~u5`(Wb3bcg>9A6<(eght|+Jk3!mlu;T#nTDrvx6I$FwB^y*Xv|u7D z4u7Ayq0fVN+)vmmY{tET6_m!& z|L3c)aRM`vF$s15dkI}IH(~BK$uxTyQ0uBdv{5qx{=t*yHDGpME8C_Ci1g)woeCN0u;qi6|_Q{_wqQ8}&8%pja}4ng?93h_XD z-${?s?i)^eD1iT~p^PfRz(geH;OmG%PGt{Lqyt5sSOkvr{7Jc5Cq?Q;hj5Euhe&ah ziiof1)SeqbNecU6=I>$Nm6`n+S$U4*wbGeMFlzD0nP&=CWyq(#p#X;|xluZ%_I>*} zO6_csp)vBCdrK2zH$+-T1ZE!H>`mB>FNK3t`4D|OZr;kI%}M!ez}!VWY>L`;_7yBM z@mn`~m&J3y#p6S^ui#@xyE$>|qsGjQvK zQJ9ST>)#6nX0&1w@_iv5Gy8!P_2m$d5zCubO}zG*UF)^tYaf}4AWj3G(u*% zoZY=dSPDE?KF?YS!r#*1&qs9Ag@b)RqZ`ATcXnkmw-C}VmL?05k=f;|`aaJz0wI=j zaRt)l!c$pFgamma3#+^ne}38WqGEJZe);e{uu8w-|AqzuT@-gG5J%gSMnE4HHNuKU zApil9Or@`Wv(~kj^lCxkHeiv}b3<8fLsXRYb7+c?8@rZ_J+I@k{IZIKhgh!713~T~ z0O>81a%+Q+xNzGpq5Bak^mIRp?`=Z%u!2~o-h9H0N-tE!Z2KQ7=R?lW`b*eM?FTJ&>%=UeIhK} zR>z}0Qs&oZHGef*|I6HG(KE8FBetmA8;8a5?*HAMs^zCHA*UQ70(@((I-OcG@Mrr8Y}NoBal^zx#r<* zgUN)0;@IkLqa7@A%$DeOrM0~zm7(4dzE{C|(8ViVl)A@J{nfufQ?6D3DE7URz%4x> zwvK!Ya?7hl|1iJwUcRi-W|Te3Cl;!Ib(o5Eot1phCX~)d9g!g2@HbfL?X9&fME$8c+14s3dS z5tZs<`@X6ObI3?G83UEUR^*_RBF+oOSH|q7&~cJFPL~1@S*k=WQG@{>5~3T=RG6mf z4!Q#k>@jn#QI;|ozd*|~KDjm8X^pZGt|q!rKibhaQ7L~(Z1zPH1)x%L9tfXt{R}8#Nn`n; zTxg)V0CtQ@<|iB=bdi%C2|<%Z-R@aa47m_LnPrKnKy=se_zdIb;Ue)(p}AFfN}X+( z#)!8T0T1GEvU`D}Wt3(;e&&!d(yu|BUpsokvoxzDOk7%^9$C(`E_j> z=yA;f(n*6WZjKtxx@T7tQff7@8$@{IWh=0oQ_M%whJoD3%9!W@I}bMc0dxCkq9&nV z1&aWf@$x^Hy_15%3qAdy(VCUT%5y|y70v5lr`T?${iHAGEpg zTzF9#AUof7eS=p95N3mLkPwQqcPkaVml|?)7RJk}?Fscc^ggHN$YKgZ&l*|EWc3G9 zBE)&HyL#PuO@cZAdYUZds*rkbDw*z7HfY-j@#iu1$1fPvC(fQ8xK8iJem>P2$=gJCer-KyW4seOyoS0UA?&; zKg!A&skidigV4LGA3&x9X9)p7^;Ypd67w?}N$hH)67fG21^pyG>W)PP2Mg)+{JqWR5AnIKr$T0{l zN7|QBx@$y21*%)0eom%(#V!~fb7qF~!NsrG@uJxFyYh3K<8OO&&;^~Aotd`O=*qPQ z-PxwqTyCOLc;-Xe6BoT{)@wcS6K@D8oUKzt7&xWGV?=~!Opg7$;bp@3X>eQ zD9j`x$SFvf>l3z~7}A;rj>|7)WkH$)X0iR15*zfpGZKdT%!$2?TGX?dhY|vvgsLu3 z0_~(E4--MlV0$@M>&#rm^Y38+O3d zX))_*icO86SV*HvnCDh-3;aa(4=^m%E|lbn(3p0rd;SsW`>(?@fDf4dWu=0c^B-dJ zq@Y#Fxs=K!6QX+%;wc5z0%8S}oDvJuwMp&5+?WU=d4co}ongmHW%W6}u{&e`KuzPG zcJuvb9_aTqU^AlI`&R!(v`~{Cpk5@`hfIzKcF>t;b;*ImgK^@wA2v2 zWHm9NM%Umx-)Afya?PaitIvXgs64l{1&_+ZKY5(j48GbbE%J);s>8ollM0t^XEC8| zG#P!v8E=-jyM%l$Xi~*=5~#OvlFC+vJJD~xSbO+hup|v$b2_2@A!jiDF75vh?NJZ7 zzr}^wj+z3>rAijRIaK}CRJhmy5r`Bw&oChcmQi0mPEV($%Cf>SkP66Dr9G=zi5kBc zBr8jzIO^Nhv~^7rWh8P+1twTD`<)I2YO4%}TmH#V$W|TrrPmqJ?6umN*l(QBX1nBb zF+cT3F=`ZL!P2(#)RCa@T)nzMw)cegR|Q)#(TFsdeI?s4B`#X2Rdw0zBeTvqfg4{<7k3S^5Lp#A$o9~kuDuhO ztha31GFi)N4Ic%iI=XZr+u9E;9a?voYl7^cGji2r;PnMz`oL_huRiOmI=d|72yl0F zBb}iB#;>>m?Wdlt9BVm>1R*DJ;Y$*qg5Iw>zn^BAhRafB6MzbFsOwe99H!{KQo0syg1Yf~q;*0IEi#$7TKoDCML@RqzXrhNtNro3IcPBHMtCpo zyZn2vYp2K$zwo$W=`$O*Z+%VhF-O>1QQLLSf79U7{Z){v&Hd^ka8+Gjj~b z)H(9@Ssj>nVp^m~j6nBDel5; zJvp$&Ay2%dzE7eCnPf#|I1{BcG>qiiSQx7aT)Hs9Ai4rNrWCn!FvpjlZ*H0xme^nW zQl4&nlNJFmew+!zK!%;RU*0SI_uQLR+gYMr5XsSXo=Ar013x$pX%<%e$!8 z$ld7+z^iX+kU4Q zlpc%Y*V#eF*|?~~XUQlLIy`>X{!e2_C=X|<^R$QK4k5eTW+7URIR!yzbAkd%^63Bi zwl`q9{{OT9XSe376l||j7$b8Ao;Pk;2R%w9H{&6EzD~9tAKNgk>^3h%px0Cw``~+uee|*EV4jQJY$0V-pv@rdZPq-;RJLY}HUl5eTbcrysJK=0zMnxm0Bq3xU5SchX zro?eZ*%ia6(QcPW7_7X$cAZhwbz+K3^^H{bZJ5~gVHrQvhz!0rvS&&IDc?-GN77f3 zUl@PBmM&~oK_4rkYS0H9#D!^e4|!2F4s*S5eoPA$TM}2Lk%|LY&j148THDLA`>Tjz z+eqdQM$)tw7M>|iju#fl!C+C(ST?GCFfEdoG**yB3^tq(bJ#ojYS$#XjH2+g_2M&& zI~c)O_ulM|zT|W&--QU@F>sRJTTTc2hX(f4%*vnhKgb$e8_R zmM7D3_WKJv8e6exG%ev}Zro*ca$z|_B*q|ld+fxhnSo3+bX-Vm!p(u+J$cXI;IL#& zOlW@pRc&*}C^YC?8~)0NemX=ocu>T;KQ{9j=uCHS>b z6to{BVu+b)Ay$eS7eAQur{FTo85aL)IXmJaqe`jGG3FmLedqgwt2o`{Z?+v-Cp8U| zFWYo&;Qb$8@>>;oR3T)UyR8O%AZmyNOt!141NzPquhtU}d&Fz-%H8q0UCl%32vs|q z#-xFQ(uYYrP-`Me;pGr-Mt{PxxWE4%*TpEktZThEn=F03bFa;gSUgThKg+*(b98@6 zXv~v1%=wEf-Go*eHMp5=p;etn%QA%-@Ji-tYj><$7uN2?R3lvD zm2`#s@dH`6u`rBY>5*wwh!gffFsSO9-q%adf$91GgE5nW=0oQ zOE7`4E4fA}44dKzf?gHiOrP6%%xKu2>{Xu{`(Xmu@=P*Lw{}}T8$o( zl1a8;Tj-dF`chNBUs1&MpVo0(OZaCLiH7erA5#nG9;nRck z3Bsi8oWL6eH1Q}ct4Pxq62TRDwUAqA|L~O~8?u##oQ1?7RHx%1mmr(h7-Tsx#N8+K zkpf|*d6v-G=WRCbbey|^DVLn~{NA(cx-ToI};}$bn~<-jP-uV54)b=DnGI z7{wrUf#ozWpM|LYB|GSDcGQMJMfw}ucKbF+NT9~}Gsw1%Wt2~TQOcS4=Nx~cfTxOD zI;moy9RvpqzlMRe>4sG#&9u2A`#LmR++|*+^wS79kl6aSKkm=p$WcWv76fmP+(K1H z!sN%YLLNl!vd&HcoI1+UiwzlIRI~qrFa?<2|20;kQd9l^MCq^N*q}y7)s_>5RIMK2 z5aJso>t6&cKg;n)>1`3|8?f`_!kiorQBmz0F#Yxtos>H$xvYg}tebZ_UBsaCG@YOA z497=%7czTJzzJ_3Pj`Ky#z(-q{ExB(FM52Uy%(QC<0FaXS%>-$>1tVd>~=ERw=U_8 z?`?(?SKez68}3hD`Lut-zeo<*6ZSBP7^(}bE(UDSL7fG%BTopTClZk#|soforQ)D_zf)_H8gVVtdC9*#-HEv z7XUE`_Ll9gS9)&`E~(Lv!XY3(@B4W*y6r1#Fgsqxq)?G^{TaJ;>?Pa(m<|XrgYX}E z`t)5o96sfo6f%7J^a&YP-Yb}TiPiY%B7jLDj zG_b)YNy#umReH`WwR;*gj^N=mZL~El4(uD=x>gA&kNjJS;u~*5sdN8`%F<=z4C<{J zBtI%Ecg#k6#GwGH4kVJ_Kjk_QK0x-~KLB%lx(n3tG+cM&e7MqeFi-=rKOGRqJ9R1J z+#@SIp(DUzDO`5kGG)X9`$^$ffs4cg>r`)@WupV&U8-n=HpBw&5y+DCNBaq6jW1(v zm)2BNH-jYF&bsL9A|7s*Riy8--={Whw~BU{kNi@@8!$nf4H7NaWuT9gWPXS}%+9Q|9fIDOO#m`SK&!4y4oj{zT~L6wdUx4h{B_n; zWY@oBPEr5CEHM$56niNiw{V$MRiND69);EkT!N;c2(LiRfH>k~l{>iB$U~TsW!9HW z=UjZn$CKi$@#THPW%)*LhsQIAE!_m2GCh(YWTE#Di`?O8RKC@1Rohj!_Eial*{>pO zUM^8?=Uvou)Fpc0~p>ay0mfLGxm~DT^l1r+$yHD7I^s>ZzXM6!%k2Pk0ojL`j zjrGMXOf(gaM&u~im_J!5kV}#qHZw!h0m$7`UhcHa_TP11IAyLTr^Z%20H7ZAOwM{l za-LMnD2>=5iy)BmN%ZHwQrB5V426d06ZR_vgR8K=HGh6Ru@_+a0j50t)W`2205c7z zSk~aYQ*De+%pEOyxAnzuPvcp9_a_%qf^s2NmU+Sw^ zjk~j1$d&HKvY^vU2)7Wun|u|59O|^Ul9X8z|>C$+IAQWS_6(Ta*;soCe{Y_Lp zjZVAovczV_2&hqn%ZH$3FFq_e63x*JCqN&6T7UZuY zKFpMs)__QC=U{AGu&SmhqdkTZgM`0V5W9S9-~iT6Y;6*grpV9=_Q ztTwkzBJWCzu^gD_v_&-zxq5Wml()p#-x5!Td?~ZQQHL$8NAaW(ldW#Ez~;b8g1RCh zHqLw^U(F;|&ZWlhGK^Au!M}h^ByZ4q3lS7ek+(i$<;)KntuUeCHrg5q>30${?mXPO z*x2{OZ{2J`^}39vuC?-ENt=zNkNrqna25RF^jyyNn@TIBQe7ytcyeM9U6p`Gl@voO z`?;!}KbZMyTmQLbDlXVF0G*5(i=C6|z;2SUl=0DTEe+%ii=0lh3f)kGXI2HjZ zCKQZsvd3iESd~sGPzd4Ml_In z>_XKbuuJ{g9uowFDKL0vXE^gY(S-ZgadRu7+nf9V6gi9I&Jx-uaY-vN8u3m$mD=`) zQL3Ms&XtCuDodXTVZzr#KlB_SNYkdBz3zWvm&_n-wwCl!6N@Mfvjl*;Ckq{WzQVrN z5q0n`qnr%ah|ex>>;uV2HKZ9oX0ulz4WTQbej&tH&aZF}Lj%FufUgcRN3UZckorLW;$rSx{V4sA zJ<`&NG8!E#&#dpgHE@rS?fArh^<91W=%Xwd7Gh8?Qz`eZe~4}H7>pIY^cBs8fcA?3 zx%bI#`+mH^DMfhT-b>uBIfO&RLTU|J5UbGpqp>|5Wj|}Y@a#Uhr*^~v&z8AgGqG*! zCaC|nNrc6yF=-c1p|hA#w(#SmGy8|spj5612zrqhZ*|BX=5xRQTEtWz2Z&+UVYrH8 z92f+Q@AvHEoof!JZ(zdXT{#FyIo{gpWO3Tjc zET$BZ`oFMagDxN)_L*~yJ-^M#kSLQjP*qk4#dIfH#{|}X1N&D36M#7s{~5TcWhoM$ z)e`^|td`P-WaHN5|8`Rr6EAb@`rR}JPZPmdzrp`Z-jAqj*+e37wO=09lW!%CjES|(1XP!HM`dNG)_WN#s5vD_ zhT}30b?zcPz~HKS)8T39lvkB`I z=23b?31vo;-Z45#f#moY+%iR-BppV90Di4wO+BL`+Q{VEO6+T0V;)=5l-sMp)VRZl zM^}Ai{a1Ip0dBfp^U*hXqE9$kU=Litjh-y?k~yg-=$H+7#ML=K#Tk%WOn>)GBwp(8 zcJf9pWH!pZ8mD?r=~N5Z0P9ZNGWCtYhh0{okSmlG;!$KBZY2>>GtxY|h2H+0I-mJO zEVplBTd?#OJ}X+2P|{4cglJgphIA>6Ex5&KksxuVf2dzL zh?MNK^U_tZAIDK5eX<&tbbObd5Gr)49EW~cg_@=cyK`e@a~400#K^I z;>hRhO<~a7kG4%hA!c}-v0O1OTL*c!-u58~?9RArRBoI48Ry{GOwnDVu1BkekdNm! z)%MjBzCywZ;{hYIIKdf;JGjn@GD5p00_+wxh@O@O0)xG+;8G}!7@)>GDdqijVTnjJ zNkByOGAo%3H}ZM=FySVwd&atW1aIi5Z5fG^!rs5>!KcL~iwZOr14)u8wrz%K7I0+A zRBfXbna@V;F;OUa!}groLCuBrrrbBzP_@-1uL(j~e@_N?p*m?viaqHFfK;a7Zu^G$>rj~a)Tq5>XA!>S$OBg}w8Q8pyfoq=I( zWXwU33W1F$p4Uw>IvgZ=lYR}9gh~+-wa=#KO=XqCb0VzH9?y{Qdo1 z`6kiK+L8~~T~k*72BrMm|FT5vhIBwc=)rbBPtQ19JKjzvT;vA5otD1($M?%gDLU~?6mv%%UC3ej(K|d{Rq55@H42!Rct2}% z4sn_iEPcPg0iV3S)D%1(E7vVrOzR7}(Qnv8VWz`@WIcCZM3Pq;%iN2cJ!`& z8S?TKN}ZPZla>XJLJ=fJf@=Vfhqfk!Yp=F{E$&~7hxbjS9HHwcp30e1dNs)oSZ1kg zw##YQt-Oz1aC!cyC&@{#U z^=E)Rt^4?}S(W5_8Bo%iX*D3G#AQ&iyi%)J>z2apG$g z?+c$i06CWbJqJRAa1hxk6u8JIu=;_}K+>eO$k6<%AR}maEhJ!!RNNP4G6(T`x8e8Z z{Nq^Ov@XG}K5H+7s@DPelxd5)r7+k>?&u}1{F3(_SDfzE)dQ9pg7%S`{t)?IH-;4h z#`>Vvpa}Umt7OUjIK%2RxvS^+u`=CfSIvZ>p*e&5>W zz&!rd#qPP9jp|j^`+eP)AbElWXL^sk=x)|$t=*QNUqb*g!$hkcbF?+#z zoH76qXJ2n5xvXGH%DMN-Um9%zXg6$8RX-?4)jQ^RZlJPgJ7Ct(7Lxj`(%iXh!x+z^ zX9KSAZVWsO^yKkdz+{9&j-bhQSG?=5Ml~ET`Wx+G6s59WAQ6)!`iSA!0oa!+62l7c5V0-g+_qDb87E;iRZ>bV{X!Uit%<2?91c~R zaQtn~@s5i*Z&nGxlbP-8{qCygRp)P+RvQ?jQ$%%+FHokBl%Jct5{!{vD&-HEa967y z;UE^)K;1vFm+mNi6oJAZ)QIXv7mVdj8)Ter&tNn`g`5})8x2$ba*zSW-f>W>6Slrm za;`d9q7;}24NA0oV^Ryd#K2PO?zH{2rEH$|bHAKx`RuZ~{qurG!|Gv%M0W>WZayny zGrw$u{WNQYM=a+~!Dd$HEx>Qlu@^aGM_6vL6USror7F;JGjSnTBz`7Xn|U)qN_ z_YBUXUWGMRjp9{3tSPI_IjbI6)u2XeEYhvF91DWX+K)H~hAR&*w{>MJ>Cwj>rnx}%&bgU7ZrX6;nK9h4iuc2PWuPYaV(q#G z>q200kid%->0TN9jUf9SLbLZ9wZUy5ezWSJ*^X5gEvQDr+Z;j#ikB+hbXL}gYx@CZ z%Z^^!?6uQUXa)cX;8(45T4wqVIxLXsL|kG-H1F73(G2@bwZxCyGD~dPGxBNBtBg(w z0}8cpE^&}6gtM_LM{$7~r2Gn?YE&q#?w)kJQ*s{t@afWIp8YLqly%3hq}QV1Zu&ss zf@_2k>lxjH4B4%T{Li10aK#uaLck7~PyPNs>G^kf5!jW4en%T`yIx#oP zf=Z3J6d03=Tk`nCbYv&YD#|Qr5-^y4g#fQL-c8rYS^lg1WZ8C|$XDA=YC@)56ShQb zJ+uzQEW`*(CS-nbmo>uvD`Xb%8yX@!AVnf~LL;4WGN=tbQ2nN@J?H7TwHi94OTNW# zG8i)T!O2H<+`lKFTW`JHn~j-Mr5a!Mz@xNUxuER(aQ4w94|BcoUNx3cg$)P2-9lrT znbg(fZH>b;oKCjq3!KS66i)=?RQ>06q_*}~0hDb=tW?ioMO%}u^^{PNUb8vJwPYLD zs9}^w;uvJHmGjU9<}>xFpiUIyCY7O4^^hN~bum79wv1F1rfAiQ$XN2oskdc$kUMGs zu2rAv8DDIWRQw&wuJq<(Y)-!$cGl-eBmN*Ycrmn*od_711Ox%&U=ilNkckXIzaU${ zw<&vyZGLF>ue`GbX4GOT_WFKh9b{5n#g{dO3T9BVzO{5QJM9UGd?mfv#iCis^vYa- zZu*e{zma4^aA887Y46xe_BXIFApCXcF^#kx!Y|?$e5JU52jftzKCn`76R!IDbH(JjfAcfT=y_Z=RwZfUZ|#0b?Q^3Ua*YK(OU^5 z&3i$tZ?T|NhAo$Ij%moKW_?e#BOlX`k=fftA1KJJf zD|&wZakw`4H`wAgRt8R%hI2$%kxcc+>&M4s{n(3lDWzl-GU%zE=I_hc*r}tvS*2XL zpZL}9P%jrlmhF?js@WcrfvjxWC^Yz=Vc;od;#rHHxm=<8YD^eI_Rf5Pfz8#K0y(fRE zWP~Thjh4}J3e~9kVDgF9I{mDwU;+)aFk1$e&uc~AZPkt?rNNWxPg4QvNo^P zwYWCN2}4qYDZPW8?It7I`LPkO`}Ix6ks&LZFSj4N@@08y+YV-rO?!T8F_ARLi=DqQ zW#BR_2%c?+H7)f5l)c*jCEkENk`y#S@o#d-9=&{vt5mQkaAi( z!W;dM*ytD^!KzN-)w_3B*Cm>}-U@jAB#(LU`$(W6!{ww+fg|bzMNtry@jm#;-{si? ziu*!ABy^={2wB@ei-~f}8t-ON)RS`NMKxH`mWsN_#*y(@Ha0@g(Xu{gu2uaCD+BCs zj%Q_{gFCfx$nUQ9P6^YQYCL^7N#jg>t8fovnE)51*DNuynpjz?*W=STf#PahkA8@9 zXKIT&2!#lSD~^)vnPPe;KE@wx6g#U=DlQu7vqoWDgSO7`+$Raspqr@Jc1#g6X6GB) zt$7gq2Zp3Dh$b`C(hTU}1mFKE&_-&j4sef((qlDd$jPZ>(Jl0@LDD`}z@rHi>cXta zZZ)t~Le;(%f10s?o&^7Vn$Gnv1CfJyj>J* zQHk23WF+_9lxwE=rxYsVX5e4-(mHr-WKoc6HF7bGrnqCr>V&WMnkEmW zK&R>nL_q}Fle&N9xYzf*F-YIiUMk)SB6?3YFMDreXJU!4Y^GRDgr(+Ci{k zNG|^Ni|0r^=_yBgZy6`{?V;wbQc$w!GihNTfT<6uK+$rasddR>D-uq9M0eXmF^KEV z37ctS-leOx=V7>VpFEV!DC)m(a?^Bul3bWXP)?)?rO-f)-L#I2AkQDE<8b%3{WUBg z;hq^q{cR*jyCOt8$@rCotGnHs;vtmUHKbXhoqQ}>oMlH#W}!(u>+%Yhv!N-Lzy_AY z2whzq9<*=1Sp5&_@`S)_&5CEWA9w15h?QWVg@}Q%0(E^ECI2D+f6vVSe3QUHBFNu$ zlD=p#l}asKEO07UnMOfMP0V5=MPtnE8VCLhbf27c+sjT$iO8y``PKzqMeo5kHZ*q zwn8h`o0MJZ!zyl)`P%pvAZH;?#K9CP1~Lx(O+=VzLZ-sAs-%BUpvbW@T&?qRjYVNL zU+IyVhj8pBSiU0}Pfj$_*9ep;#FGF?^rmm?u^L`cz@lK`_O$qRJ;Ki8zF zP^3z!(u)|4+Ap>je)?LR@fpp#xp_4zX&5#QhSY5ca!*2w-0+h-^K)Zl7CrhSy@pRY zGN}_Fa0Gt{*)SFzyZ^D+V!CTMu_+g`7^>MnMnP>bE&}vYPiXVN0N8FjSTS|CzmP8q zkaP17`827cLCAjTx(1UiYGsDfIDToW=EdZoq%-db{AJ#am`qC_i3gUk;?U{Figi^T zdrEG#{JF)uAfxeBtdAj#CC9|EHX}>-nO*1UCsIj7WG{IiGdk3N?0EpO)EwT}OrA_8 zQ^1}|g3Qrp$&;5_v9dj(tq8U9DqPyZs@`8b&jl5P$%FmM$O2%-9VTJU*MJSg#zde5 zWVMnu)$|iD_geXT#Pv&gY(hv#mktaMgpXR&OHpWbN%>yjLq6vUd)`XhgswwBeE9dr z)>gl6Bx34vaAl_Zl!gxfeKnS>e%BT`6_+HkpzB6%Op-Q8aVr@7UHA1YCzdnoS}7Og zF@vY7g$yhf`5}2HrO*_xp*S|(Hv+v?BKz`hDG5D6{~{CPy_H1vSsC2abh)XtWUwE# z0p)YwdrOB-)un)XxxKLi)?Lzf#jD%6O&zsp!q_V}`yp;_H0s*FGg4-7ULix-@MA_e zpUUU913EGIv1EM<@uSi^43!j2;2K(ufIi0o z{S$EaA_=wuRytK|-Yu88S1@95q7NQODku;O)Y^PIVCNz;v>9$YUus>I4Qhsj$Zcsp zYOQeoMohtTs&)yx7Tr+cw&8=0DPhcsdm*&Xp;Rpk$}E?^_zKnGcQY15S!K-}>l1Sn z4S${S;>G+x1WN$)H!vvt_Uod`A0O9KLEhRdeCT!h{4F3n*r0-UbZwP;tsWfh;FUnt zXv_~zgXPhGf9X%9nv30^5USL!G*lB5wj(NT_QW3@kQAEJzImszxP9&Ruy7TRZZ&F8 zHTon7wt27WEU19oaV;g3sBurE=q9c}nDN!}UM;gbA8pVHz;Zgs~7Z@ zv&%4VqQK}gkvbFwSRBP3bb1cv&^z?`D!(-&H+vyV+={bJwtu5;V*6eaD~sOPJa7`Z zP+H_^))v+ya!DX{TLl++Q@GFjyXaGBPP|z_xpJ4cy29Qjuz|c~rKCCwe94^O98yJG zs-v)ceM!Yb#mFJN=RutlQ==U%86n}DqI#Ax9al1*>Q^dI0@Km{e<~P7_JbHVkcD$@ zdNE+ER>D~{z#L~ITvV^^pirJ|_#xt~C?kJCws4fv`8us6XwCNgL=up9;I!R@gzJ=k zA|oBDOk*_vCUdn9c=__Hm6H|;>ZkW^QLirke zIF~?GEEP5a z{8k#F#AuF%ZX^2VbbC)i0Ph!Tl3frFv_}xFk8=dvsBpeqh@@SzH2>!vxT(aY*dEi- z|6}SMpfhRKuHieL*tRCNZQHhO8xz~MC$^J`Cbn(c&Y$Nz=l%Y(RGG;yrW`!I@Fb9nS@f^)@VZ;Q!-@< zvXG-MDCEtv*?az!PNEFuWIRBT+|dwKi0M!B8viRs(7yHyEd)Um=c<^0@dRzYb@ss$ zx8{fSGpsGIrG;OcN#9>;d2D^W2_yui1uz)FiqIj(nop3$8yZzTdI3?OFFw(AXZ=VedYK^;)}FnbtzDv!>LDED`s&6 zk7f6FyNH9!}Q0ePK*>mN>4N zT1apD9kk^e!Sy9=`SMMul!Fo+3GL?~KXxFM$_!6@CK zVD-IQePt{$R8ejc&l2g2*ZcHFwUQF1L4qHDlKE2zVlxmlmqHRGZuD183&IC&i?3OT93;FA1mkb_`EDj79 zZ(l%mt0O^P!iL(CB~wl61$lUoWD8|H=H)**KKdex0&;^4pLmFt`i*wlugb|`^!an? z$6?lTLIpc(E$__ZX07<_12>YX;C%t@TBwLvOl4FjV2^}--4u*qGajP0$l5_ zH)H>mC*j$>DjDWH>~r2rx|;gSq5gYwbE)!TU0Hjb^;**37^t(wOXVXo+WJPSl1g-- ztFMfU8zY+Dy+@-P7Ky}0%I%v@oKke(aNqK9TG2ID@Xb{ky*`1?hLj$0B51n}x_ADh z4yaZbeQDlF%GXF=C+e^<`)GXozfozJ7oKn?$OxkuF0b;}%rMeLiwe}xS}cAK2nTCC zJm`YB_931A7rHJ;76`M-N^%y3>fjY}*+nVihiAw5__ zB6R>Ru2rHoKThNjosfZ!FwfDlHIQ~@v&lIJC9!MMy>d1Y!-~klS5ozxGc4ZXUdTn3 zXGBO9D7hkbuHs@vU1W`0SI)>~#%`LGm_m}OTUfZ3q9F_>o+wVA&?!{7%%$b`aummJr;DN%I(JL>r;T^{C=bs7Y)trG}5=#IU-VTiQ1fEueTD z{D2wuR>8Uj%*A660SyKBh0+J>NO_+$=!j)3UNf!>J}}uWgUMS8(G;^oE^AfoTjit- z_82>X83a=a2WM4QyV>F3ZoEhfJ4H?sFqp=7)W=EcR)kc8fEZjN!;MmheBP{t63lG2LmH>G`jJ!)^p2Y{xMR9k4jN@Uc#3ub*u zxCa9sb8zKCYkM9e(f4DLOuI6LngBSz{@7&;=xnfM8l_?hrn z2ka(aB(+kiIGGwsMvpc@?z8*sk*ZH4zm?zgs2|e!`!jEU9BVi;@a?iK=x!ooHd}A? zoh}ngHfD$RtdASplKmATzZ$q@g6>BpH~y#7BZNFvv}YVy7qZHoPKnYRcCj^pbBwYy zh5kI{mEmazXr!qkiyxPHwQshRTBQD1`{UAFv>|9y_{x=@>v#3^-E}=$)YSp6D=+Ry zng#RwQ~kIZi?k|8yfj`l@ZX8OvNwXegiT7lS=C0=W7E1{`!oJODYgmE?XaQ(YHUaf zXnTrok$fC5EUhHUfk8tghr6HK(M~tEWHb|^W_tDXlexri5iH-!9yF~r*kmXrI6kv* zTttUKlc*lnZ?1pgxy;X?jeKmPUn)9LJ(pJU{PDR|e8zw{u`2i71z$p+4Yy5~`g#-I z`o#7oUNacs1+5Jmhme0WJ^7-{d_8jM>^FGkT%ZtjZ_Jd?gA;t)g42+U#C?f0*3Les z(rOZ7zeWF5x@cO8pnpV<&Qlsu=+pjgR5(g=w2RfH5uJAWqRjiOUISiBhPa-X;2C~R zm0OZI-O6mwRnap-y2BY|?RB08i!^j%!-znkfRWSbsa<2ZWh7DQ36LO%OJ(fw z+m;9iKr}>b-s-pEEDuhx*n$?hrAHWlzNSM62L0`cU^7ze*rK33598DD+Tv#?@ZCwd z_<9ZIkIA%RZwQ>9lc-CsIk71ZDJxV?{dnZ9(-|$rY9|9 z12Y>LG3*yaq-t~MwR~w3UbYLqF1c8qDulyUlG@DW5Px;vpzdUdgBWxf?2cv`lXGyeB7gL>eFr z)#`^!bdJJkccY8W?f|1FzhlG?sAGfr*;<($iKoTBLaeA!^{gGEpgJx~w7tW2R%??| z5Xw(28>vVrg?zWM-tyQq8_HUX(2||N%KG`mX-H*o&;tgWg#!%dI?9qpogJ$Wn6GIx z^;}R2<9b@0G@|Xcd8al2*yLmT>y->e;dS6zuWVDd0d_G1FkjB5D)LCBgh+qV4pXqN zfUp8)x3)HKI!)#N3onj!vv04YO;z@4vuL&drNu^QUzyLyW#JC+h*o`8SWR;IV^ez` z4ZiwdaEw6m`~&^oHVhH$uL|D%BIH3sU{4PZ)Yy*ZrlKML=^C;9Q$?ebaufcGHs!94 z?9gnZB(swO%Xpu5UgA%_=4h&JGtb9WZ0%)~(pLviVQl!>D-!n+n8-~ONY2}!^{V16 zEfm2i%mrv|RF;eJ?3@ISjCfafReYeQ@pbB(?6lnmZ)Xn7;oC}>W7zyAS6j&dALO&91f5b@*hyuVinFKVk+JwE^bp|6 zm;nD@M_IESoND`lid{-W+bpsCxSxOx^EEsUvV>KOTv) zMTb)}(2RF}y4NqY%wBv+H*-JqROk66S_wR|RYm1_NW>N&kre81y#j6*=EWqXsh#F* z*;+V|Q&d@cLFIun6|Fxm#11^vPWgS`Lw9F987$nSL-3=tEEUcVAv^FB@BPuj>RFp; z#x|`35B^$~?Ej8;OG$t8^P+fqpVIyM@w#z!a>*2(YJ{mTY|rYS3%N_Pz*F_J*OXdy zJxykRvp23PI^d*jE>Y0H`QCg)TO97|%=+h{9lrJNE_q~qUkBphI9l+pN8}56Ez`7S^m;&l>nRi`Qelq8U|*={*!7B9{9t7Lw(<1-3~MR zHgj~TSE?`9>533sD3U*PkPu+m$Z|eQ>MG2Rv`KKWZ@Wmdts5U{4p^KEW%@F>Y_=So zI`q7sOswF*5u7tKuUuEwprH1XPS5?cB(YL9ABZT`p=G)P^2`qvhsHKBr3i!PBhpFn zus%n;jcu4ao|o--a!%_nP^wDG==l)?l}i|}ldJtZEhU?mC&>Nm#CDL8)6uk??yP;Jlk=zTyGv*Cex%!!>MO+~x&6eq z{7||-H)ueFVL(pjU0YX@{0XZYe7X*43WJ3e3Tn!2HPdVJdB3015Wf>J8auK<27;x& z_w-|9X~(GVrOx&g20>PQ5JuF<$l80Y(T+s=Gt7ha-09003Ukls3r>o8sTf31F#5>h zIwRHVOHdZbs7gVp?RUrtY0hMg>F(m^aSwvq<5owI1L+X&F=%SREf&$8-DRzb#aDR3 z2|JyZYhsqU6EY_F{4c6Li*m!t9=z6%-^p&#A!OTw`|f`k3YLq4-#Ay`3y!|yi# z-wcWpm4*|xZ&T6%#Oj#ft?d3xrMiXe&TC9G7s6gbd8|#=~d<7Gm#Kz3{8t^t^ z9S49Dl`42!Vr%Zc9G=~Gk0kDL9VPE_HeGnOb_^udY>X4Q!yVR&8cySkoj0{q(>%=R zh~F2dHf=B#HKC4yMP~tDX@izwdt!m*N6X`&hVsR``;Wev-XlGI0AuxnV^-;#uhY;^ zc%IQw>y~4XqPlx+Yc|zF5!9f%T8XBaGLYs^0a_HJ0=R2EfY)*J6NHtPIM3eh+|#)e zK}?A6jt%@DzJ{^1wpo3JAT#*L@h)!`V}-S%$|7 zziH~GJf2Vmfcr}-rJxPaQD-r^tQ{fP$SNr@xqF09fZ(P^m_nT$a-|feLtD4Cel%MG7zJiCHeH{#1eVNotnxP@v3a>{caEY-mcPj}_hZQ*gXqV0;kw79;Z8Y8zTBw!(%X&uwjIO-BZD!n~ji z`#Oz3Ol+bQTPsIQ48>UabEPvUa8%I1>eZ;`Fr4jDygE6 zrOIF_3B%6u9BPkHx!ibk9lS+G=1>@DE_Gs7g8L$;o0mz)vxb7JPYhj9^{1w0m5mgTdZWC~< z(tE_*MP~=`Ko1U>QEUUsODRnm&Epg;lJaD#WmSlhSr$gU%9eMVG7aQi=P0(AzAclI z`n!J)J(Be`e1Hj6CN{Q?DGI~CjVD^h{z`L#rTMg!_RcIv6Z?lTs?XHZoZRY71a1hd zw#tR6gzSg8?d=7Z)yUp-yz7p zY?Qwwzo!e_gbs`It?3VxRF3uyG6;_4!#b`4@Gv|2!vEcqi2hh|P115A~H-~g2oe9vA`3*`3rM?JTPawE(al>rcgMdxYzrb~tKJW#XfHhU>X z;lqe1sl5%h-aRvX%>um(5GmcFLxP@rwHNO|_;A~IsJjCW@cX9j;&=%99og6O=M?p; zhs!cuLsMgfv>aI^Yu6#8m^U}?Kwr?&AU=oY*PO^fDFZV)MfoAn)c@oYC3JuLX=ZB` zQ8G{h<_{OHoAjO#Pizz?r>XmYi}9W4-vcb4`Wq?npF1%7e=cC30RZ$~08l=vm$d#r z0THXo`i^?F70w|)L>VtRx=8nmAmhn;%b;v2z%93C+I8}WgD(lmqNr?RjX2U#EW?0A z{9hlDc#Pf_eQU5NxgE3a{=$yn3QY*V3@Wx%*4KMnAu+vt9l(*U@Zte4?{nG}Z;7k% zrM3kr*b>Yht=weZcL!-fn<$Rn@1B9l+tfp3 zuT?jj6CQ|BGrwCOTdC-dz}NF0{uH0Nn(_LMNUKrk$8|rDnYr`)K2&zs#OVw4j!@!Q z)!%iX{y^`I`Exf@4!P2+c`?sW3T*`110=KGb@{&R*6V|21PeD+n_ehG1QIQj<>p>i zp{JXShga3>j;iIYO%q=}P-<6}ywo{D?OJ!DKPG(Q)A1-c<69PT?G^aVj|8_6+Ll#e zeZR9Bl9I^&IcZyw3D4FvK*~T13^%6&iMmJ@CQm8~;&02H9u%QXR=FPHj4o}bVI0i? zGKxfX!1!J~L9(jeN13}=RE5Rx`9x96p`lGMgB=Qcj?q5J^OjOBW}TX+BW=wHHM7CT z31NZlf}H*r)}hpWgq^JAgP6JK6(bJ#Vr}cp#QbF#%0)P976nEp7}-;x6tN)lUMh>)tclb#GPeye3UiFqEI4|RGt`1Rg zwIc3>Vc<4nrf{?fCn~i6`oO=Q@O_44|DO;p{{P%`eLI(2V|ttivYp7DA7Y-d@*;>q z_M*Ai0SL+VS(T%K=h}1IV{pAbI%JBFP+Gl5q`R7Xeb?dv)p~gW?qh!pydeTIR#l`@ z?}*JE9P8C)xB}#>h{g4^vEGXHO)>(u0MgIQe_sn+*L^np9#Z)g3{-0M>R+Y?rN)|P zN)O2LX`!!Q0dL8xP*t*XA|t2*87Vdo#K}08qdW09ynA zI&dlfrzqcX$Rv5f?{l|@V~Lt)hV!09dAWX57bsqfK8hc*Ua%b;lWHiN=E_e>t0(4p zO4?nmf!w?#%Up8oFYhDO(|b-o5Q~{=UB@tA>tqk^secu(`fJ%$-GlUlp|YkQOFtbc zepUC=(&*xTC`+NcoMDKB{NVWV7kWm{5xnfi0C(nDwSYt_ochFB8@Fyq_|7Jxv}qUs z0GgZ$bcF+!E|P2Uasm|7y(;z{#ZR+un|LoF=|?wFwf#+gN$_V=V*p+d46^*ev}%cu zsJMA8gw=*(m;q>sQ}oYrNeo3f2;)*nx79|5V}sL1jOx#I3IS{SKzVFO>*|Y zk3Jo;uMZY%qS>u)8GxmiI8u_3vr0O}@L_b0Gv|@t%V#9Kq^otr24pGbT>TPAQq!jbLCS>}kfvOG+h%cO!a%u^-eau+0oe@e?{ zVtuApanb|b@M-Q%YyTd0*IpgIy_V*M_t4tR!0*PW#thDnGy`pbYJ?kxt7p-PeSOHB z4+({4t$q@QJ9tR-b5x)VICl@inELoYKGAOkmHkTu)WhchUgb~e67L4;-rC)dOAjC& zZ=|;LDUaKP4f^Av?UNS3^+eIpPHdpjJskT3`@7b^O$4efvaOD)PH%G-LWHcn-n8nX z1P>PKa5}P)^3SkH>;rJc4sQt$7DF%Z306gD1Ofo(G`8Lbok{>s4t0ng@)VkJr3H3- zEeM33b#x*)3c1TIQbuCxO*55isx7vTJW7!B=yZONv?YwZ>|u*+xuq{x|CSt=eAkpH zZ=-7rV44x)-i$2g1PaY}{y=SUF3Vy@X-fy7r#6@<;J=LF0wq#7iz1Z?-un#r6g_c! zTpfBHtm*fb<_VZ&;d}~E%@2`Kr1O|;@RfDyb5jppH$!>QTqRX z@*ng2554UQ^TU?|M-N5irGy`40XARZS3djCcXMAJ&jUQA`<#Qz$>78wPLZdfdy>K+ zy8VdQ774*j>_h2~B0ob|_lKig!LmdZTBBd0H$_19`5U7J$lRBM*phSiu%;Lm2eI3R z2L-Q9tsZH805wm41~Pf!Uu!4bpLW03^x~rrKfoaXCMyfF;2%DC%KTAM{$$1)qUniO zHo2@icC_*&_{ekYjOb%rGae1Ur$-BFNe*ozf$3~nSoopjMK@wc8)yNp$A$dcY~rTt~+e91XsP%Rx?PpfTawFCDIneG)7bv(E^UHyWB6NbL+h#U5 z`an9u2k?qoww-+klzZ$7YcL=&1FU|>|AM*UoC=SmZ5NtEvds`fT|Z|VNu0*${lA87 zE0AH$ssF7K96}8d85QuM9A66nmN{n)e}@;|h{%nHrhB2@M0)uW;Yx?;Yv6xa2| zwYkx;%!OG)y&U$ZV!QHe8u}fqT)3;>C$6B5FE!`W1Ee;vxlUieyPNZ3?}lHvdkfRU zy_C})yg5z9s(+|E#-Q{b`{J|5%u^-1-xvq>7f|T=T_;Y@e3DiP zH-)B)ECZb7J|GybPy55Zb5`88fQtX(3>=B!(P1jhn;q!Gr&LbXBya|iQ|;@0P9QgI zN)m2-;NKhqt|FA(fjlw5Es9^XUzi2&QNwW0zGu2GV}9@%7fPE=m>*^=Jf9!y_)myxY4sue0YoE%Wn_!dLRmHmXSW^L?0i(F}s)k`=ekJKkr% z#r&nY89(UFx;#qXN?uNl>684ocm1E%piTu$j_027|EE~sj%V;mc4-cxrgDQ(Z_VXg zRrSC-X|3VyGEb$cfYdIS`b!W0giy^8ZD;Ms))z#u>{AEqm&Nf7-jpFP@jXfzJmm(2Z{w)R!6n`T$AlLc(LT5B!<{1M-#qBzGq&I>6p5L1% zh_cVskZ^tBT{^7%!Bv@F+m^s-b9$+RPy-qK?QnYf7ImTDCQV2aFk`Pu ze=W}+FJ-AA;}(rev^RxNk)2&!a0fJ<0Wl-(rfP{64B3UIZcTv35sshoLuphLqRf&D zH{%h|1lxwwAb)$_IH&7%)=sCC#`@7uD3<_c(|GY_d`I+zGE}x+s?v=d8GlR6rg$@q z$A^j)PVdQdhLh!aRdv0s-r<(?vNhw9Zry7tclL|=-gbN9SSL`e!w=^@w9j57r^B7be~Hw7At(Zl@Nd902!-&~BRB6`VvTIHx%HK+Y`iVE95iwsIXQA z$Q2vS{=kpA?8fNO}TFWAR-wluElKIFr9o^lo zK_rKqy9jDyClHRJl&@8utXB;tU`vvO@5T#ADz7?ZkV0iG*(ET2@WQuPt8?WTrO;ed zEUmD>w;W0;APN_fObxcPC{D4%@0MYSM1C@}Rppum(p<-w`Axg5ZIq{KF;b@_5%(%~ z>Y6H=e9=ue)4*oH@2NG-oRlZ7B8}8`hd{O`B8w-N!XwgU^xf;I^nN!Bu=4+F8{j6_ zBva)=7d8Lx3dD(?|5-8l`Tx=YVCDaN4WxiZ{pH1-m6B=O-Oq?v)QYknhY;brP7()z z;|+S)p&nzurB@(3R?qtTq9rM4$=ok~mje4?Q?L4s1-?MzJpN7pVaE`=2|AS-E5ziCb@OYaNMM741nE~~gb0TUdk`Sq{w1;kN1Lh$M^7Q%Y zCjBPsUwPt6xPDndXYJq)HCDSymS9OQ&yEu3=gsfXLre=yksHhJ5EqRWb4Zusl=^qW zB3WJYfY)wmH6T(sUHYJTEw=W?MKX!ke)ya!z<}$LtjExHbvud%Ow8w*Qh%GvI>|~h zY>IrMbL8t4Q8O?U)Nti4clPbawZ`>Snf*hs-MvUeXbEm-G|~YYvGUPVNg{EwNx3qvxj%4RUAaV z*CmE)y$imyXWA$h(I0|8Du&G>%YmrNwb8(_GQ`qU-Dk?H%A;v)bFs?8LSYFW#A zK3`_X#t?6$-^%{5InX@;3!ZzhMsEKB|MlsgByV>!K;WujtPX1WV zv2yHw?E^8!;Je74m_X(g`~l|-$S0s`{}GV~bY^m!BDK9m|J*kn2zZC2Z7$uZmQ=?p z2gmTiUti7p53zUQ@6eTx3zU7UErCYmYn4@Hx!UwJ?iEl3MZfCbcB3b}>KfP2^&o{9 znSlsGWBxoIUH2(FG7wPB;}8`W*yg^D?iTH^gRSC$EZtmByKeE3aZz&7La$;I(R^p& zLimRoQB=H#25p><3Zz7yItptkaes1))&m9fx_(E+d!V{m8$ zQ4=;N5ONwphw@+vnMCgVLG@`gm0|sN7-@gUUFBfaULtDf zcWQu$oOqK4QYF+GGpRXWReHU7;PuDmVmeMmzD0t2pkis zk$X7$T#L41FlGcwX0W%RGWDLg6@sk(@8XMNZDW9CHhu-g+?Mv~7x_@tJ;ed1aF5VF zr{Y~e$*IOpyyZx+tIB|t28-SV>LW_aRf&U{s3x_= z=ypA@vdlI!tKkPhN=W*?R z9Fq#9Cgy+#mn4o44fbqr}ixlOku!1ijeL+Ug^vdD>HcVU>g&bVLb*olbL=3@FuCIlO26 zuoRE(pc#GaUw6nIiSw`?5=z7>Kzy~?e^w6okMb-le7QTPui6JSOmvwt!$!}AbUOar zUZFGUu6!PAfdD5rhy_gOf9ePMz9Q2?DvIvimxRnPM$26TV-Mu5BhGNeP2Y2s96|HY zkGX#=AFHRle+`RAymf>G$P*eOAW9DM2fz9Q1n6R5YOqPcsuS_-Ra}WPUBtBl9+R&f zML>Mmc%M@ttwh~fecpMvYeO%4a?rmug z;dt+%&|Ds*$5VCkazy42;UQ>0j?~0}KLqMR!mN~lH&lHrna;n=Fa^)k&EeTn6Z^+i z9eC$ZtYvXh@nv>6S5#uO=oYie5`rwhyc2uO|GcoV5NTfDFgx-|Eub~Dnj*Hol889) z7cmik#&zKkJa_Hgvq(K)ggK=nUAS&7yZD;=VeXxiyo?NZGlI4z>4$v2L-SrnCMz6e zB{ei-o?t{6u(kkwl8Fv*4JH#JhOqq=h5A+4H^7n*G6{2#!~Gj7Z1b()Vo>Gs&xEU+ zcK1MQix*pWojg*&2u)4LG&kFdTQ; z4|e?H3jP*TUYu76^EABfg_8Puj#RB`yBV?@2-Z`_TvO_zWt#~?fgV+?P=y~SI+2EA z2i(Eci^E*op?jmVaE;olH^Dn7pW6zX>slyP0k2CPX9jjftfW{bR`}DUi3dOrDiQ_C*@52`9 zl+A+yX1&oBvCh?2uFh>?#1zpHQ!j@+=r;;U2><|KQ-KU3Yr(J2!t^43G~U0D!s>FE zA&`=Zv7k`6^obAtTbWSON)U@fBbG@bQVGpVB_KmVLVj5s)oIpE9oUoMD<#KZoZ!p{ zS^7gbqQ@4Ud?YUsk=Gr&u~j)MXp-UX7W`@`YO-)-jWVGd22s8eAk@&Oqf#0%p&!U^ zV0G@&P`xt6srQQX4DH_aJYCXQvEaXa`<|zA8Tiu@)X);WheS;D{)p~+yP{!(>DHVk zBFff|@v7bg)2TSx1Pl;Wx^}j2dg{+K#G34@pJTtHl*%zH_Vhl2cr04+{CdAjIR#C; zQ5Cu>2par#?}1a=A|X6*Dw^?%LZ7o4##~5v9IQ_#I=7W4&zptgId~1+$q$2hFJ3uZ z{7~0{ZX)a&QZt&+Y!A!_La`1;QQp0l2?tj?u*YkkV4(o2LCy6?WwPMiV3H+hUK77f z?e~koyfaEk5X^>EwKfPjgThE*&Zo%akeRb@!9%$W3-+J#pBpZoEw5-4- zwm(1=7ErPSscZnhdCQH~Xb%jcNjvod|89$Bw0PnsaKC|oOHnaL1wbKFPS2z1D{)Wo zp(Wsi&OD~O4&2Fj>e}CCkQ!9<01&4O6Ti^;sFuG4meBS&qy!m~e78 z{?NV)iC3sPyhKr&S9lGpYYWC(4LW@_BH1Ehn+$);l6+5aenQJ>^XiftnI{I18zG?+ z0eFSVVYffg0*z~*1EPm|gQfP~SjlFCTIa)Jo*WL%KQ36lpabXtfk9II(( zWdN|`JBGEM^+Gn5RM8t$k=D^H+*B#dR6VV7^>;dQP~P*LPHK$k*mjSsn|3gk?F?Y$ zT{7h=^Lc@Ba830N!fie(LFsH1B<_Z8NA<(tW6nzJ)1{s^Fe^^E7Oj{h0el)39u+p~HFF&JKFJ1Yi=}a>> z?^7}q00C_M>dD5`PV?|I9V2vI+lp!dj`Ef!V9d?=DM+TmMD;_-QJWbxU`;qr;MSG_ z!s4;^3|l;r?kv~#hJnBr=5?J^+_))$8iyg>9rK+(8BN6MGiHgN+R&t2VEzgpH&Ep6 ze9D?ju`4%<-1z$Qc0iuD6y$0@jh|gqfcv*h=`i(?!7SLrOoF@cEmnUtk$*=7p~=?VZx`!h`4fwoiQ`F50fP@>z|<0R(fO#eQ}f)ssB3L-Y?v07qm zq~BB47RVC!FiStY$8AiiBp2I*z9z~CzlE~6K%`xhZv{IU%m^5sl&;{IQQd5@p>*o}>sy`s8tk+*t%S)*~Ya*PPfcixaAa!X- zg%||`Troa_-by&SVr4*(cIaM4OS;FOblj@mHX(wdz*NMOEJRp@bVSjOrP=Ky7nM}Z zK0djaK$OwU66!SjSmH6pBbn005A0TkGZBe|z+KEasSnAd8)w6@oe!-q6~AI@x<4z! z+&CpO>QD?5p=;cit_?Gl?;`IcYP}U#_`bghF1gqXlFMMmbst_b;Bq=1vaqKCY0aB_ z+vLvv1e_Ze4BD*knUH>m7!3#IxSnROzNA^b1VA_M})mA@cY1(9nV1fmc)@rd?0 zh#-^aM$y@h=Thx$j&7YXlAc+cmpC2xUz0h#W<&9xxQYW+sCG=&yim|5JklhWJF5Yw ze=cRpTGq|E1RT^s!&~`Db$&3?4_z}5y0HJs%o%c~{P78oOh*kOZIr3})bq=8%+Ruf zp#q>LNFY!td`{+UJ$la&Qjo^Q>&oGf^#;l-hKxFHGaveLJ-d)ySbwK{E$<5oHdpe* z;5xyf5|jOSiz4#LSwExI!dUEn69R9LR;m4nfuQEy7t z0AapY;j#qnV${&&qpE)B=XS;qL%Aed`E^!cZNw9fD=GI_6!i<`5oDucaRRLLW#$sd zmhl;y)P#0}Bwze{=gfHG=qn^^*@EkmLSn176@VjI*R#owWoSMmuXS<9z5MhOg0>>! zEJ>3B>-dgP-n?MrM6VIkZrhzZAMBmF+;ow3fmAiAA z3^?ehAc7*0dE_^R&McuP>0(}ozp7K6E4EjWjkwTXwioo27fZTf1$wovT=rdty7Kv0 zs59p2;-4Mbun@o(jz#c^pP8krKNNwGfeRs$l@b=kBm-d1vWS#j;}wcb%XAxNmoI4!}cD3!uJmd0CJ!l zqkq82hCiAN;Cf6GSIS2ir9i=+u$I|evfLENC4dLqj*n{tAijN&MIgiEzdi^X|9Qy| zump$I!6^d;xo7MdwWl}YKckLsu1eGF!{iXxA>P$;Y9zOceEcQRv9n2(R zbYXJ8OgfWEvg}|SQ0}g3JN)Y8p`1QQ>ozI&kb5mDej**@*NBde*WBQrXpjHec;%CI zj1w?0iEf?vkt}BU#(y<^J~ZkgrXb(!nt=#}YoOX`0sx2q@=2B)mT~t+fi4H3QSi^u z>0g{q^{>&iR`_jzxY!Ove+Twf4%H$t*=-HF=cIR5SuhDN8UaL1* zkY1vG94f6pkP-|8j(ONCvMi(X%N48mtUMao1^ZQskMJK}!uw|>3UC30m^5L*!NBeE zDpJb@7aBuIS=S@f;Tz7M(jFvxK{I;ST^H~3RovHlBrCg6mx6~IN(aWEOjL&En!|1^ z1S7;?gLjjJ=a_r4zIrZ-`^Zu? zHtZ3~j4T&fjyvK(eNmh*e>wUY$mTu7+;@DjT_L}BL?I_NHGjgOClu!g?_NC>=J9cK z%b-hW$dgSvJ7?O0K&xL8dUM1}5(D10kh{GH90MXEy28at_y^_9ADfzoqym(Jq7gBO zZNba&RT!2{yz8MQn6q4?nURB;JL*HR0Kl$+K)MSBphfHmV3HMHgJrdS1%GhBj}V}A zXd7uM2FjUepMbrM%#3eC9op*HDE!oop=I!X*Wt^JXlx5V)Dt_t24$X3MQLQq%!^s3 zjxDa|T6fWkZ?1rafx0M>(1^jfh$mC#4}LGO0<8*Ug#Fh#&HrbF_Ff%>}2>2n$N zae@N3wS8^M-Lv=}h=Z_m8LC2DH#TMeFr%B5ASRm0E6*Aj6ZAE;Y-;j=tZH5lU%dc_ys+qQIfU{#_1t0S|HC z-$lt}OR~TL+rU0`F9Pt7WJ2o|_1~UO%D>ZAK(^-zV6|jGZnl%Z&fU}ImpKLPYjG9t zxiDgLYR*6{`Uhbp##qga=Y+E&az(^Y#QjisvxU?*(T)_Q?{MS}zM`RNy%XeD6HEn( z2HOY$k$G)?m4(f2v7zVTDkS*(3r4cs5DqKa08EwDfsLgctuz>&N@{BG7J82l0AIFf zZsggZYjAHgVM}DL$DfnC!}fqkyshfIzDb1No}jq;bh$dQ)ZS(0Mr094PCV;88be+^ z(0xW_-v}ya%fiyWT=oMX*O5?~#e36(NkDTX)%JXRSa1#@ba^BY;xU4}u#m$l(KFq2 zmn1tJD83f~Z;G(8Czy;b*6>zy3gyM{m=JjLa)%|l`%9dULP1QMpf}T5CH=`JDWg{1 z2gFx5ag272cD;+ePIyNCusnbi|LscY&o{y1>$s`Cdbwc9XThMG4Q+Szo#xl^SrOA( zxHbRUq9B0RFUI~5Lx%X*`^^*O5?|wk7=~X_eL*49JQ*D9ES<(_zy9Xi0w)(NJZONc zB5_4YR7EBy5*B6OWC^HL1*&A_1Oa3`1?F*~iVG8zIzhGU_6x|S=ZRp%3YO!$y!8fz zmm1^aLefS1VybKXqKw}U0n*T!jDF>T>}rW=;Iqo|1`-5LC{5^>oZwk7bwkWjy3A-h z49j#_rKI9@Dr*6nUXR{E?O&a(s-hTS3| zxvQj!$GY7{ThyHB#VzS9upo_R9&n?DFR~?+%Grho<7)MREAT8QD|h?(wtx72SKRac zD_hBJ!~%7BT)!dwy^HSjX*&WkE=z*bt68Tpr$E2Aq2zn+$4|9+&?`FY;?F{w)RXL% zMmL|c=Wf`Yq{qfk=8E&=<|L;^`TMOMR~(G(?@bJVtUyl5zs$l?W)a$V<;ZuVeb35D`j-?G*O>mR2QqO< zlOb$~gH3lGnDl#XwX@AhpxtNi$dS738Dzp3gJmCQ`FB@m5ihw&C|=Miu9_ND4ObYv zFxGXQ&tdr+e85KguN$}Bb-jn6Xu+?L^|k6j;DaM#hfMT^wP@y}eQ|GZ$VF*po!`yp zm3GTXBz&=YOa^$7 zeVb4aheCFp;uRA&Z6P6*JQa}#gGHsd^e;afP8h+x>oy*Bo@5M+d ze+?L0^w0;<{X_PRY+)SHQzaA-GpiD|pjTBUr}F<^@}L*U82dl%7KnbgAS%FMypT)` zw`1+aYZTS)(l{Q8-8pB5Xmt8ftp=mj{eM(uSpVOezJy&qJsNK20X^g zLP(@gE;Bhw;y>|)V&IOKG!m0zwhmO`&2nmjO$%@E0?uRPv*$Za<+Ij)QC>uVmd z?JE6ZfB19f($z_AmK0lH^Xps*o4Gip3iuGKlW+y?xC7Sob~HDztGf<3Z0(U3L-UnT z9v_3hfcU%^xmnShE*U}^1?7VYl|gvOfa>x>%3PunD7XdR&pX&qt1eOkAxO@Z9TCgfustM?)^kBJ zY+Tz_1Bdhf@LlEsv{d&>mVM;x=2IB|Kc?O(JhW&_8jWpxCp)%n+qP|c$F^czP&%` zejE}Wr9GCbsAHSds9TSG6U&gy7w^gYGO{~A*rG%KZTyydoXq%%Dgrp~D*q5p`PC@Z z(IqxEoVrXh=L;yLS`~ZjfD*`cSlJRMZ?A$%lb&Qeq18Ie)Mbjzj_zhP0+qe#nN9Sm zBojBMOu8ClP1fGDQDcr9)N*A zOxgV)83DAwQIub%>8iXwzq^0$BD1|U%&=*Xv_+<1D`^~w0ZMJuoZ?_%C)^EJ<`;;j zCbz?PHsysoEnza+(bQvm91P~d_?pXDz2$hV)G;XK?DUj{Sx|dJ*ftgSKoRK#wL|%_ zbV{{{@I9Jmi*;l8V}pgYp+J~Os_C~S&_&2f+)jqi!m2(X)|}3Fc(Uh%~iQM9qtr|>?AV3RR2|3*lmHs4Z zUMg{Vf+*IBjyabcTuG{N((g4U$u4ZKAOP|LAYIP;6q_}Yu6(BZa8(sajqdl3r0Nd- z`759OXTvYoaY4?ng1zDeI6-}lqda*PN$0WHF3iSqrQN?uc#7dD>3Lx0*W$0=f$Ic~ z0J@jftDLjFe|oM5P*&`+&;@Pa25M9KCM#Goel$Pa4_>lG2;{hlNkO-!pYh3cPtR8K zdux^H71N2P@qp)~2h+SO9GAj8KQ6bSx_dvo1CU_3t8-qsCT;1m*-^8JKN~yqUxI`a zaSD|c2V>^>R;`Uylqp{}@gTuHKZeGoXE0lgKKKS7#*9>dAPRP`Fw5Qv)F~Ftsry<} z&I!M(>WCGu-X9ZKiBW|3eReHx)Sp@dhON8!?{71UcrhhXvzFLhYL;+(sgF4Zpp8rZ zn~V{UjFa+YaP571!|Db1O>YVdQdNSTiiwcb*FUUH^dlLXm#KSEFG%>sFU37aH%^Z* z!pWNzUfdC zHPs3iW{m|WTs#zPI=pi}i3Y&F{CuIyV6Q5E4Z12(zxAlHx~;$XRfhxnm_J;uqDiVg z@Ss#O8A8bU7Etu>hMS^N%4q zXS*l{`IEW{TLZ!6fWFh~GeMUGTgv@KO9xV2!F1BO8!*+y@|IJ>>z6Y6)EsNI-%@;M zh`0-~#h1g?FlFg4#m+Ez__*U^)uM~;h^?S+0beJ0( zNYu}o)Pjfiap-pb5{%GJKDn*j#ay7zD|fmG_2ooC6!HXasGw_Rjx)aVy_eA13Rnoa zw@7W~WHf&EQO8UfX^+a|g`>-`E2(~jZj*@No$FT@+-eHsUoT*(0}}YjAbD9sW}*Dd zev7Vg7wa1LloPO7Z97zO?F=g`inv35M%;wDzYa)~W0UAI8kM@2k49!KVix6su5mVk z+RB#?;= z$z{$?Lp>2hQzuZSH{*XK&4MK?EKeoqKFk6wfiH}yzRq(F*lY^+&2VNe){k}DaWyT<3ssN`#U!nb62PL~Bd4lbFQbJzR4WBdz9TshLiN^UXAOKUbL8Q{ zOmq5MZoxiG;9(zx$+Uo*4TVV#S-pp46)IIuHGVp;qDK&W?!a!+35TZ2E*$0+kBnS( zF)@jgk*dEwGw0$I%`_>zZJ5#q5yan>I00j2K-=domTRz%^#IPnw-yDjQ(P-Qsm{&oy8eKf& z&82fS-rvyR1I(fNZ)kvjs+pxCB^-rJP*ODU3EI~yioKrzC|j6b&8Pj|!&~d!=*snk z{SsfMDJym;d7c;++8xpM#}T9{%`PQfRK`p)h9oj<8B`f*%z#YVQkyHJ5gw; zF)<4)n{vrLWT<5QYk2CMwW~r0YX_IXX?c{K#brrFYfzE(LEfXhUAz z=hQ?9(Yn%k%~X@jGNDF3q!@kl)axa>1Q2<;^`U&Ksy;vFIoGxKy%aXy->^cGdRB4MELXW-uB4`k( za>po&RQk_&-he9xsk$+4GP2ij58Qc`i3=aV0j@&uom9{EBpH!n0_K|PO;A3_= z+g!tjS}I9CP-`YZz(6Y|s_XwvCC3L${~t0Jpf4qV%6hCr3RoMYBv!bo+1U`L z3}JS6u+!!GQI5T}4}r$qi0%}@P2C}qSD=ikuEl6&ZK(+OwD`J2+Avj7ofb*6t^9n*)tVI@ zRk%&6oV&qISMW7+$M!4kS+7#M<=xjr)0!bn5c`%o{eKQhH8J5HzBZlLC5LVaMahTB zcX7SgUl(IwYr4Et`dm{}*C(+st*haGiA4hu08htlbN}>gmuCF}?Ix#jMc;9Jja3dg^<}1L)Nolr1eimsV^fiFxo70goKYu|l+j($O8*IrxZE)8!t(3A zaJ#7n>u*@f!DJuuohX3D7F&(=0?SrBql+SS-Tf!2!W+1QkDyHjIS^waL_u)}OE98= zaa5FV$CFNB6(?@bZw>q5g=`m!OZe5l+M9;c z-e>rO!=J--p1Wd>>`)wu3@EL8yZdc8V^-S*@4HP zFogM{hG~@OPLGWl^+=$4Noe%0p7@rMP62xDy~1V7k%>+mU>JczihepfurJkGJet)a zQ~Y4?G)AEM&%$m(L>>>C4YjI5qg$wfuL5Y_^J&*2H|(gI+aev`awL6gSN z(&rAVs;)gaB3O!!I~0mV=+@56Ylgf<5i%k2Oks3*OCKPloy5)z2N0*rH zm97&n;zle{%RwfxiE}`9L zL=C6D2yCBu?C-&vRW2!=!Vo!_KYzZAk*U=FJ-w46Y~%d9-vj6d%(3~8|C8g(Ihp|t zM3q?ATUTr}0RNM9lHl>IndiS`o#A>=$n|joTs*=9RLwrV)z z%!y=J;z@S~zLxQ5WYJlCqXb5JuxNkk#{5w{Cq1Qz9l}#viG3N*6_2=*MLu%u_e7Y0de-SB`b_bn?1r2^nq`c7rD}$hPW|R_KeP z7EE8=&|0MuFa-@K@^i`;6`fT1mLw1>^f3*TG8qyvzzY5<#;4u`Hr}ui@9Lm++G>!E zE%(K>lM6-!sqRcF3Yw$9cDFW1qJ6KVCO3+83;Q@?@>=B`IYXkWBF_;3X!2pU6KOP> zLGv^sTv=6Z$LF{Et7Ru#d9ySLYj_b)YX>pHrY)=62b@Djg)_E1BBVke zo2Hm(AQNNpa&5~O+m0TJyc-u?fGwuV+Tnadoq6o=YzkSkI_eN>l6t-~))DLgik%XJ zZ+#Xqe|2ejA_OeOBObAJufN0}#|0wR#l}n_%E0gg+850J#b151y8&g&QYY-n#uf2NQ3%2qsQog>3)4aAjoi3M1eod&@-zSfG zgg3!%Iy~+&++bJC8YQ}bSpzwh=^8er)imlQ&5XI3sy3QCmbmW8)<1O^yQr_?RB$4oasR340%-EEczaKCc z$D!`br{$a;4|?2prYH3MEmhO%I?j@_iB6r5 zH(x&#g1Bnbl&QTj(Y#_{(UpxzKfrl&+|fEzpam!nXe8Kl?Djx&1-UmrAc;RfDYB<2 z-pfS??>WXy@UzPDtN{=LbX(FZ7&1Rtq|97AvLuk{9m<2G#;-Dvxjp3^^ zD6ARjZyZVh=EVOe4qZl)LFhpr)3zyzAzFd`Ni4kYt1E;mOn#jGN;zX)a#ruy{=Ng_ zc_efaH5TtL z@po$eVs4pfKi@q5I3$Ft1}QdCTlzq73qI5T$R;w-4)d0 zUFjn=BO!FWIVHK{R?WyWcbk_3MpS`I!`}btTJzUUIGN+Mzq*sY!RPnn@P+};NhAsK zmg$gn5`?fuz?aiq2M3T79Ii*vr6qhPWWx5q6`<5oXS9`6(~2YE!5OXPYzq<*zH+v; zx&D@}I`q_ZuPak_V3WVTFk~c)Y*HZ;ZQT!>F>9to*mpPD|BD0F7wlCg49Bb%ns!8r z3zh1T-BYaTS&oaz-EQNF21tKN0nwXlH0Azo@cFY+2pCq4XKeI)8wgm#pON^#Q(8%? zEV}v)hs}DCl`Wv<-o;1{c2MKpEQDASq98=Nb@TPNlJJZ!TJJt2e-njUQ=PCXdvO z7!+xIlQ)mZ4CUKoJcS85QIqTcZnys;H|Pz6~qrk^$nu#`fKg!1j)yqw$-v>1i`nvBpdNKbyi4O z4)+tupAQEtlQ#?#_sdRgB~bm^xtJk>wFw73u+s$?sY8@_`8&KzV_7j>;WFBXNhy3H!{m0>Ltpr;$gG>2SAe*XxmKcCUeBHjuIh`VS2LpJpeh5#$6)$yxfm`wU z0gx`cdC3*7P$N=qJ#@3I2{WIyxiG@wy7l7c@>8DN+f z#@W-E3NNu&HuP_JiJD~ykVQVy!f^0 zzST>OU%0o-Pwyw3{;6t?-f!)3Xc9{!knYHGaKmjEk2@dIArYl$*lipV zW`d@Usv<>LTJEnu9z<}RNm7t0qLLjFQK61rqeC;FBXYH+D1t%OVW+oi<+M*=AO+md<$k+zMdjJmjvVG_vxibs6Casbz#qeYDa z0JR|qtVC?fzs$umLw)_199Y6&mM_(^QIeE{_~tX(`6&e2!D}kO)w4W0YM~0fL^hX% z-G89JkM!tCbbVeoHzX3GS*-BHd%)!{PIYj4a?Nm{%?f4(t=qLJpQWQNbpK6@V9XmM zgX*lp9gW~DMCTEurh?~R3qki@%kKjjtEl*VzR1m{yfLt%4SAXkb)>@r$Ba}HylJ?@ zNgVoT4Ars1%cNbbTj^}@2$e3ie|ux|JUlX&{VA-Jsn7i6*QP}q$dI&cn|>{r=(RTn zqSZe9Z8nirE@x^q~9_4BwJZnZ|6~t7NeA5 z8u{EuGN%2Ou%@E79V8<9J26y!Se@;;5M#bPgKd8Jz;jfMnSsmPG{C5U+OG7tnZM>3 zQdV;7B!R)G@((2gzW=y zXr?+%Skn?NN!}icQN#XRAXKecPo%ohHrndrcIf@f3C@`V(gVVXiY=$6_5}eYy%cEY zD`!^fZwS$bIL4FM-^khhI36tpP*Y0zzPQ5gSYC36rD;dC>H-$gWj=%kSR-=0WQ$zQ zWMx6+rHA?bF4bkn&BD~a%LKY~ulU+GC}s6@1v*P@!>v99B_3sX?gtSZt9{iBM5Pdp zVMeYPhP@9l<2^@Ga*xlo;y0Uqa<9Ll3k~cd4|yJS01453QY+8!bN5yXi(#k1aq*C^ zI_Zns0FN0{chG;)51z!p-wthW{yVpkIy&*+c~?Z+H8RiES8WLXE;iNyYJm@Uj6=ZZA5 z*oV=}s`vpxonFW4U?fF5H-`?d&hL3sB)hsHA{UmiWC=B`XxXZV_;&|5qKpJeG7HIB zmPJKjf#ZMSj(ZV(;5noE;ld9d$J78n;eAHPo@DkyTrR2$Nn!ob58v6I6+W3h7!ejQG(~`qH z7_rjaz)07+6}mqlUW}z*VVi76!pi<2sx==ISVcjR5~p4|Q>v6PnlzrH1Kd+KA-xIw z8W7$hc)Q`x%I2Y1UT8Btv7T2{wG75zbgJKrWN_^ESlipZ-&bt~1$XXmnWW&85*y%g z^K9$~AYRTJWI+-J$siN0Vg^6TFXeonVZ4iOnEt!w12i9J z`Wp@(V7OcvuE4nTFjQK8w$TvDl4nCyUFTK4945GxdN(e;W*@Aie({(HW3}SX+y5&_ zH0$g-*w8cK#{p`k-Fx~QIaP7Oat;iIy7X;23Z!JnUg zH>o{cfu1EV-4M6llt($=2#hVb#TGNe&d{s~i~4NBGtJ%PUD<={%0+-_25kB?>9h3# zwVmn6`2~|n$5@j<>oto4FT4oAsuyTzFp`7`XCSZwXf^)QK4a8A(kS5h{U9=B z4#~J3x^7C2t#0C4Af(GOP=^)o_h)K80jNT}Gf?yXjcLJK)Td%iNYF|5{*EPDfH_b9 z<4SH3=^0lr;Obpn8!S=C-{Qne%nyLS)4KI{;vfI<4YloNE{j;@bh#y3K%Afjf3dEv zq?ak3_S}jxpP9{C5G2dws?)R&LiTq5Vu$LY&&-{!QZFDMdKF3r5pimeW>vNrH8$Fy zg;D!{^+Z!90ITwP(U$tRvXceX(mDG^=wphhVQY<==V=$1r`KD@`}i*d`IbhR594ep z@L>c!QC)-`>CciCfJ-7xL`aq!xugY#VUSiCRlc@BarCf%J#m>lYA-@gt}Np?unSCnvE#^|fY4g6DDhp^HndaTVv_}kHuuIL5Lha99o?k=my z3<$+<%AjEOxd{W^KTv$`jg$uR9`%QdrSXtV4@Zl8`q!k~&!A~awa>i#(&j5n_8r=p zp2l7FP4yMvnziH)$^ZA@qzqsxxi@BMS>Qc;N}~lOpCG8TRE<5^9j>Rx@@f_m zD=rkWg63rjdj-gXUbSc@00uG4S1UKlp-(k?WMG?z?li|Fu@p4^FMy$8ylF*m_(WFP zv{#NkGZ|e}@L+W4{M()6^LEH=>@}!OC@PP#ctBp2g=J9);{Zzsp7(`236_5HtNGCm zl-_zWt6Ph?Q;^f*ZYnxc*_kRw`;e^)=0IVcuLVZhoqK;o!gZ^Q1VgV3x}cEqO-=|1 zBn-CMZJ$kD2;u!unrfJiX^CI&vn%NQ8G|~Rlx=q9s1AzleD%Vy8BJal+M&pdrEFD< zI=eicF}^jH%q+20It;@kT3DOuoi;g6I$lqo)(}A+UOK{!)I<*o3c(Sg)-INan=gVd z<>i(Ln*%1WnPGj*VKJRs8u3_8uV-W#blh~ zOqH+WD=LS4;9%LJjFu|Reo(q69WCN)#tKB;emOndcgS^Vn)zAWxVpok(F=dZfqq!u z){Yh+;Na|E;c_2P#`OIa2JPtT@iS_JJ-DS*6Sj(T$2w0WVvfc3LA%pe7s?)LefcWV zV&0_{3u|=# z=*17gP}3xQB9nAnm^`*3)X;y&5~m~R%(B*;O==xU{}oW1*agB1*^V9GmUDiOLwO;7 zM#zE6l8%l7@fWnEt^vaYRW_1PRBVn)?iWU!O1O>tg1%p%V)!^m{{3G9rz&Tp({ zbxlD~PFJ5lb>W_W5KJ=#Fg#_w>kT{uSRyARU!wTqcSZFGfLNy-#atAm#CtT1gB}*f zavbt-`WQrNb+TGEf1^ztFdOr~(boE5sz>^%ml6C2c82ssBI^V%985eK24I;d3{RBI zcBSrvFcM^33|wT!(pk(v3%y#30){+3h=5R9ekU#T z{&vYCzbOAvoF-p9S589s9HQB1jZ9KCa0TdRszR)`Fs_OHDLL3<;>=od$83>_K9~Iv z5u|i`f;ApB!d=Pm-lSPycJUA&d3rSqSx}kaJalwpR%seP+d*ZO@{I++pPfdq>`|ccNr#uobJ`;kE)iXqLkE}*Y<}b69tJ@*pQ~*RXN0S_WpNTcz;_I{ZTuyw z4h{Quv+2wwunyi^;C3fhq%ruUIFjQtPLP%1G$}-c*Y69q zNd&;~R!*Coj&)YOi4uE}+iWWsE76MV-!P+q&%H2a?6JSbSTT5eP-<-?l!B+sP~|8v zxUU3Oi40CE+4v5@ik}ksra5+;Tr}&lo(_bhMiPoF#9u@9 zXm#n~OA}g?ALevWMdu${VwPl;m`*hetpL=bvb79t=du4h8JEW=kiI)xfMN!`xpKUR zJ4Yiq6!3VOzBobnLo}=Or)?w(q-DE|D1hOM~HQ#p$Mf=nKXC8Lf%$kH2MfT!L@v+i-1MjnNY?1=$lih5qXAlE${ zZd~UsT_a(kH>(oFV>@~P*OA6|bldlB+RIG+1vdO>1sfqWC%XF+mi~fnpctpmV_P~Jqul62a&*BmLzlOkGvsfAAAEq7CWm{W|^R8PU zrRC{4w9M~6dxz(Q4YcZw#|^|b_U>2uR%x>qR~05Le)_+yD1_h7Yv1jim0}Ys8Gpsi zaxGJ2Gg%4cZH*?zM9o+H!NC`i6mpvv)M0PrHe_f!sdL}m=aM;OCZY_qhtV`)fAc*( zPebX4L{2**AP0KoT8}S2vVaR*@0<*ARW6sB~qfT`xh#Br+XSP=%HY!I*lv@asg+Fa)Ut*ot9*!QNpq zzbGVVjL|HYQyei7C!D8^IT(4a{NzZ}4kAK{R)6LZ>wb{X~*^ts9apIV{A}X{*F&QlM&idSY*BQ!YunfggO~;t_BA|Z*IB~5J%Nb_bIPt!5KlG{&L}-OwZr<@&`}^DnTFHl#)|a?`=em zzll&20{}ofQA|qsputWmVk^)*5`U6E&^Ib3iirBpo>*Aev`8Rf`+v1u0h9r=IsXr6 zKkvMPq#Wi{rI%#((}Y#v<*x z2*(8zZjT_=ebdFmguWgj-wW`2;4#5vgJWgyU9$JB~6Wc*t32LdY+Ne`3aEpTtEDgp9-jBL)G6o-6JYOcrJv zUzib53m|U>3E!-}El&d=-WSL5Q;OZxWtxB~h4@|JS#!@3xckCLap=C*q3K1R-1l*X zdvWvrzT3U{b_4YQ`AP4pmjY>pSCyWVXWpn~J4zW4!YPptPz?-NM%V$TRnZ>h{8?Fl zyKwNvkCQ4n)Sshpqm4kBX+l`+*YXc6%38`AzgaKT6*9V5Pkt1a)P4F(Yz?wB7Y31DYwS`Xg6xznHwP{?dk__7s6v%qk zMlOnR5AXPl@O|N4p8uu#i|?%3Bk3KZ-^tVt)X?QCC`-#WY4|5!2|7S=a?a(^Fhyd^ zUjBNz8^+0ztFLN(TQ)`A@P5HAMHfR9aP~SsyuF9g@il4tD57F z$40UW*=uNPb}KC2CPKJEA5v#9tgGfrhjFQRs|NG^(5CO%VnEZt&ToA?VX_%xI?8bNF*T#FEFm$Z6)2;^gB=S)$$i>mDm{im zP>y<5#O#TOTYXaiXImD!%-iacXX8? z-BPR`_X@W9%>R(qMhiSJF2QF7u5`fRMJKFd#7W!pB!O? z6fc-SrEj~14JDEV2XM#iMt;SHpBU$u$|hEh;ys;N-*-;j+)#^+li1PNcY`M8B+HHh z9%Je9+Cu0gy*Wwm*f^)N5yCY+un9MZ#~>v5hl-ie$tV72=OdOF&*&Zx;i#&_2N3l? ztUCZf-@5;PIW{!yifZ#Sm&#z3TPo;KYs)nVgV0RczBek;K-kO@c7j#tVx`dW#qUP- z{Q~Uf{OSA{1iJsl*PR-FGFao7&72zWj;Fh+a-0LI0n>M(eY^je^W9=gpp?^ET#qY* zxGU~(Rno(`3EZ!N&8aQRz)#70KxT?lkqnG>PP)c?kBkaApu6OhBDaFbv=5X(B#5Yc zt>pjmF>+m*kCmUu3rjS5+KT@#MSOBYKlg>hv-O4Q-XEc z2H(y6-3lYPaK*zo_8VmW{LFHhQG;Knt>mfumY-ooDt=TvU3W?va@_N*+9V;SEqMhx zA8PGCKMAp{``-Z_Fw~*jfto$GyFszXUu3&|gU2&s9+yJS+2;56@ExkLW%|A)sa+9prOt^5?h-!g~PF?-$en*>wgzF3XkQF7C;|vfek`7y68mlQlf4i{YrGEm|*WPa*S?Y z$hW#h(sVVFZ4BHp!LhQ?FswVsyTo{Xm)nd{#ofv8ZjZpb#2atY1zkxyqHCvE1O#NA5lWpf)?r z7GljKCq{tcpx^eR>U3Pi{Fw|>biAAODd`%k23|D+2Ej|`z9Xj|6B4gM15BV;8aV>3}a1|G7D=ezo2lxQj z@$U#~m<}C;R9a|t$SE(-J6-b1A_m+zTgs#x%#3j_8D|ST;+^K1)kI{0VQB@iLvKC=#eAviWR;k0@rS%0%%fnaZ$Pn^E5U?Ci>ML4W`T@?)9E?T~Rwk zxIsfa%EHEM1szmL(B8hIW|4H@wF6LM)A5?Jn{C8sd=sr=wKUidDOpketmJdH;$H%c z7({L-W4@(r@p?x=i49DBWlhEjVh?@6Wr1X~n8-_TxZD?)Qd0CC>1t9FM1kPXyGa3G zbtt21lM|~~7Ur9N^aMhT$=wJ&ESyj*9)^bNUYzHl0(82n8c76_{+(2+wA3 zgU2#kGh6eehhMySc9e?_#q~9&Yu092ql)c&FA2}(iwA#IK#D^d(-#SR7kfBs?9|0u zM~>8s{u+gJimQyAQ8N8#ykUOhhGQ76kaV!jR-9K-@W5u%nZF#E^IAJkEfDQ50 z%v5maLRPj~@oupkAn~x&j&y!^8rX zPsv;vnX=~V-Cw5x9+kCXa~gA({Qqz(VRn0grfD?W6B7x^YXVmx0qjHvQ@~hBN z69`Xwo8uFwa)uIxhWz~pEv?~tqfG|m%+o>6?CGTNp_} z23^$Rh|8%#6TebdpWjcphT@d{)*u0An0kk3cTo@;{D*#9_2wso+$96Zy}Be|VeNG@ z6yaOS?Hc(;Yr80}6)=@++tGHJCobuRp{knYu_?N}re@3|YQCP(rCUX^_ZL$t;LrB? z{{!ar38T6$xn=hT4a3}=N3=i`6@en!OqMB0u z_>^dvkm1j=o$AEsB_{80nG3&`eURN^q)WUug8lW)u-e0$tWDzoNif7Tbxs%mu|Hv) z(0TFp6tZu+O^gd7%W$47fcUkYV|}L1x;%xYp4wC@TF4OK`Q$#+&kG_ht zL#Y`^Kq5d}V(E+e#zZb80g)|2B;lD6b!sQ;5O5nf&A+^fv?-b;ZZ6}^QHVPdqxouFkfm00Pyx!t!L-V`EUwMT8!a{dPJ(Y9 zAee2%pU6JoK{bt&#YPIS)_>aZb@7Ce)XnOdv)UHlU(b%X7B}x6N|yv~V$9xol!D8F zw+C~$WZpWFVxH520y;b&U@H@=yAck^>cf`8GfLxbv=NUAJQ5xl!)i0G52eEY4i^BL zfZ5sqyYh$!#GJO?H)mAq_!n9}>=+~$9{~Kd>oZ^J9SOm0)obepq`)=fap!+UPK~_5fGq{1*HQ@O& ztS?GNi{2K51#>6RzgU*lzIz5Vge@*Cl>K`k9}xxXSgGnkjfTEIRe;oC9WX-FgV6hz zpTQG6@&zTAWph&dEx?_&P2Q|(FoV(U;W=# zTNJfX? zM2O;#G*4xcx7e$6iwd3ZzK^4z?B=^9QX5lXp8;d!#`v9TD(LxQ^C9iwNgjbR=rwG( z7SjYTBQa>+kG8sylrvqPT)pEK5>T(5X&#fnKgRy|U(Fhff?YUnlYTA?zA6TX1(Gnk zW6GLqJFZTgR3d?B2@+^J=#)PpubJRqiP+}&MSq7=60!Z?poeEh8rB4qL_h#wTyg~^ zU9FNrzPk7C=`r>&j)I+$`%c^bKtJ}N+;paBmaerP$(vFapp7kM7yC&&kkuPTOR-Q) zE~6}GzMht-a=LMp#2W2S4V@=#5z?YN_9w8nPln?XGaADAq&`mVk+=6+e{D2}Cf~C5 zW(N1nxayj;FjtB>yl}RJhF2~CILd#@&+UdViXkVM%Yrl;=q%&yB9s2QXem(3WmtL} zg+7ONBcq(HHIxp@yXkUI#|$v!UfdhuM;7K9%oM>gt(7Yfm)^;ot z)9A`!76{>tg~%OK!r^r@achJBCyRnhF{PL=oK7+}Q%WQP0EFXVQA}d|Rc9tu3I;6z z&8%`IVGxm#opqh=KmD=ZJ<>{cn4UVVBSskLXvzhPb{1*9;Prv;jNTM4K4dpRw?s^A zEhmT>YCLkqXvmcw0v|Xh5?Jm?+~c;jAaYzi85^@3LOns}%T)VL{!$1GFkiMR*d{#K zqa>yU%5%_c&K};tvI?L$L)1to<5^KDfFP@irn9;xLOwDB5CdBlHqLi>a3Tm}A5FZI zsp)W6<&YGagTz^SWXg(_m*xgNOVu09-;1fQs%aNLmDe^5zr``=i@zssKS-8?7;ZT$ z3F1)*9|7YVAX}P9-zh=b#)Ywf&D%#{%N*MK!(2Bf4glyze41n3$DD@B8F%@IccIGN z21_q3xu>lUF|*O~q)-`-O@|9I@Y_?YI<2UzjGz*SR4Lf0%UA;xrv@xi_WBY>)Driy z=OV+`1Aw=7*!O%L#W`~%Zln;CgWTWg!s8Ya#N3}hFE-JYx=ZG~{bD`?74TPbqVZG{ z3TTW!Hn?DD^3_yK$V?@F#>GNB+AaXd%6!LJkZ>wB7f1)c1(smgD&yQ5-J zclWDd=N{kc8UcO2aZx@Q1NAzNr=a6FJ29zN$4A*gT{g*1L(Y)~25>WUTgGd?5v_(;LDBM`ayTajr~I?m-)h7Q zn4SOMa>(5Y1bBDDA|Q zZ6b1|W0q`9dq`Ag9#jJV22L~`S90@I5^6M!E^4Q>OBk6lPN?{HV#Qb#RhHfSEV+(y zyvU_@p9wy$Bz93Fx){UlWk~i3%Mm({*}{rm)n78DTKwsttlE9;klN)8FK)G)&^>2@ z2B(j2p=4YntL)qOOAq`{DiOQog`F?;vVGMNb9W$O#v{>mRt0asKN+MGbC*>YVtVjf zSshkM%=NeL2Ym}^Mpej3Hv=4-%&`$HWBEjD?Scd_Z0ayko0mv2V%Ny{G6~Y)N8oa* z_CNfkUAo0RUA871w{O>^e*1f;mZSlIOKqW?6?2vUcUe<>R~cG8n(#oKF(p*MlAhcS z&sZC=eLn3iz+%G}Zvfn&MqTA0h1l;IqjqeW>B`MTaBE*6c;P{}D-v!4#zrDWK)7C384R&po6!;FhAIJ^<)jo`~ zJ;WbP>&ucA(w~ETS^^gJr! z2>JSMRf{f;E6V!q%w8dE%tuTzdbNb#%~J%}JGMmK%0<*DR*^;8RI^;2CyPLciGxb( z3%z6_b*`T)uA%jpIxTZeT4EST-qQE_wqbixo%=0SYt$xbu5ocenh$UvIdWt4NJ8q^ z<+QlWIyNX8Fs7MpDQNL2$Ut3B42UK;e^bB)+PWtj1q?TM_ae#UNiWNi`Vaef=wQkmVYgkb?;Qs-;ASW1{u9@$0OH9=>;U2`>^v1XjpmS44A37*JzVR%{h^Sq7a;% zQzX9Kbm)SUf-ROM+$;#_g=`ZQx3GyLQw$;8*X|g2&;X5ncm&BQCTx$UYT|^xG=ZGT zn@Dvlld$7BjW(OsdUb@dGr=Lfpzjx&gQ&|a6L>d_Q@fQ)iXMA~Do5uBcS-AlU5^C5 zdz|bKXYvrX@nKNF@!(mwno?I-1lmcpg5b2+IoTtI)-XkKRq>ZWbJXkiCa_R{gz$%A zTB6T-I;cqonZ;UB!2CRfW2l5eUVSLa85~gInYyxlEk}!CU`eVnF+;}~g@ZJ^0;f&y zmx#l4Y%C;madoZN;Wnf-+)+Iwb+N{&fDe3xO_P=9OE~Ow^kb|9u&Q0v8G!sFW@)fx zI_*-tm^TNrpnH&P;;%XdwvIlCJVK%`$0i}LO#?Dj(lB%0@j!m3O(DU^p_D=JK)mAh z6d0EYA;O-UwITT~m6p=}&GuN`aZ3Lgzqg3j7!*bA7;5vKvYCtI4gYTqtk$=Y4$4EN z12Q|tR;9h0ImYp)1hw=mXfwyhEj^3pS@^2>b!v8;MQ=_ZhL}@PIKn8Py?0clc+({{ zj@u-VW!m=h4$tj?bf5wmk(i!?7*N;3e17Z0-VgxHV}h%GU^4vWXEec*YN9XcS@`#b zm=x}z#I&b_zUtEwwJE*4BT$S4dHrS{NfC7aXlK^~_%HM$K^^Tq9VV#EdpYQ$wdiq6 zpuxLYHN#%TTp8o;Pgi*!Lgwkq{-V{Bb!-j|@wF&tS4E^L9BHC~zB})E<_74SEi@#C14$ z+BtoJm_{qwX~xMLKdmZ3o^e--%_HIwtCe*f5FlTih=m!7j`08OUadI`=LUjO0Xinl{!KZfMpv@#v1|5u@+<*A ze!0RM|Kb!XtepydYYy zcOGu}mY{LpWUNk^oc3{ACe&6ptd}mi0PHU<6l+#mAzS;lz7r(|g)mdkCKkaBPOX$3{Te_qRxh)U%N3*FyNtCpZB1zZ$ zu-+q9YGnI4>XWQf2PTo}zySs~ubMoop|V4jCeg(p8GWTnKK+$?4$DW*hF4G(93Uux ze_(kse6M$0{kTg;-RXbqxyz)O=WG>tu5OI)uF%U7;*9A8fV2%e;9R|!j!>O(H>8D4 zd+?~@OlKG08^f#;hdI$Sbqz!cH$LlFdkoq{Un-wxai07K#n1xHJNQ3AAhEamlKg@c zE5QuT=d&KmB-?OQpnUXkTP1SD_L(?gN`R_FKy;+d%G%DgUBi1EM0dGdlw;ZY9hFaZ z_s7gwFF8sa+5s$qUWrXH2n;T$;7V00j4>_TR?S6M)JX&#NuueNUeZcF-LJn-HB?v8 z(arh}`DT_4(aC(1Xwm!U(kCX}$S9dsBwLpKHQ*wFZ3iYLto7xZ09CwvM0>jeM;Z*R zt)IF2!#i$xO-_66w~Vur`bpM_T=RtyXsf4x7?P+AG}b9#b-`D&u`E#vZcmj(g3ARMcVDw1isK<{>56_dm0BWaIYy;jOKDjd+Kfy1<-elz8HXAil!1}^@crg=km z#{q#L3NeyOj)cPN<+J8;74H&A+RWfFnq1IK|6hVv^3pyW2rC&@dM)s{%y2( zfxQ+`W1+Gz^);&tQO#X?jIQh-&gYM@@bA9x9l>E``eajZ)N0fT2l3OzM4+P@19yT; zP`HL4@<-5~j(WvkLT*8-)aP7BodKWN&UJsJtg!^4pP5ezD<%ox@!wXaZ(7~?H?0ot zzibq=5+j+-mj#+8*F3HeX`J#?fwZ=ys6XqZX6;p&)IHeK%U-W^!cvkmChbKjp_u_^ z{3=e&Fsz1KBEk)(j+j!XaLCgjr z*gk_hk+^hL+*H5xOXi!S9yOfoYRz?!@S7oIi*RJuZ<~A`e)n;#<#cGXyG-*rvYBD0 zo5>cLwB{kq(_=$$G>xd~P^1hb+(S?`)B>j}?TPY&Ou1 z-WnkUy*76@tWLc-)HAXsoRfI3G%s!qi6U(Inv>;YdrWFV+45Fxfzx3Yixu13p9|au zX>wn%wYzU!s0(H~{a(6c#vJ>~VG&D0Gq>whSuCh|jVa3g9?(CW-L;InM-;dVL#kof zq6!|Uf*i^%hf~lAj#RQskW@E2VP7fUl0kd_>{ij)CKBAk5KmEEyih1Qx}W?hHmxNB zKi`3g>cgy;KDznAJaFTKN|J+^9&-qZH*(&acg@ZAOv;xKwG=)@`-mT5i^)#&xbYGf z8mvSo6Q$DOzE5PomX<$SUA(Y@(~gdFeT!{v%XEokyAt0+)AO!v zb7d+t*Ykyz{Ij$2%ZBdVFZ5|Y&!wQm>$>C?rZcgfes39Mx}!nl-DOJmManLweJ>P>8ge*;UuAwx?;#^F?bL0*rXRec>ECyns>f}kP@v=%5sJX4laQvkewr=*IZjy zLcc6DZJ@7Ytdjbb1i!Swvo}y;!0`)_BgyM z`yUywY3g#wpd)ZHDUc&@_utjVlS^@!FGC{Vau~>v2mtnfxphLnK&383qtzC)NDD9L z9@P7PAQU*ZF*D%2fO6FPaS~HLO)|QE^AM9=FE^c2ni3R3z4elQ z3*f1FwnoSa^TQ$@$X*yEynf8|B}vv=d19~J%rl7;T*`4Hrre{yystysYG+eNQJEy)NN9uWW2aVzDBI)wheV2ZzL$j)tLnTi>w*N=U0Q zC>zA$DncR}r5#xX-)wF^SH3B383bwwVKfaI;==B*P)W8P2JYFa1S?@-VPjbX2o4AG z!4=m)^rm-YAP=EryunK~=_l;|!3}`v_D+>n9g8Cc2dZ^D`d3~}6mA*S&9PlUQww)1 z=iS_juHFS=X`;<5`;KB9^C(AT1hStmdnp&=IL9(7Z_sG=?Q@U#XF9V&NSZ|GlDG|VmxEUo8bR{p$sXC~^b6s)WBhOxv z;YafVwfj9GRX_nW|0OpXPB=5O?9I$f!^%v67U1 zT!%yxY&6Phw_S{Afd{jSbImslUIuh4NUU(=ntIv65b;!^oJN*hTCO}`BhO$NaW$9Z zh>J~INdwDjRXZ9okfzcNo@Mx#+);U60mZS1o=6s?3Tn8k8EIy(Ci|}#_)>|l>!?a$ z7X<+psFV3xFI6vCMk$kAi8;-kUrF*0omcw-!(8vyK1_(}6Qe>l?U)UO)#;&JOOn1? zGm+ih)K>|2{d+x&lMcOway&{*P6#b7b1gx$<`%8S&BJ`OZ1^PIq~iZ13j2g( zxRh%2O`){MTqlcWZoVKa@18IhZB5N>YoU0={+GNXBmA=X!c5=y8?8%PPF+G(>Shh#U;jFYH9;Kt65%=($k2X1(C-grlp8l#>fq= zaaTu&`SybP#lrQ=x9r~x%^qC~+S+yr-W^=9%Y`?%7K1x&y=Eg@TYC3XDd(teT-z_G zB?9k1Kz2%&ssKvu2>yF(CptCl4Dn_wxBL%eOT*1sheXIW%^}$#w^X#*w$aq!eIO4N zv<`EH*ktzycaF2a)9U20>~m(y(HA}2DRhcsU6HM|=hsSj38bLY<)D44il#GEP#>o` z#+DmG8Gzj?hKIR8=dXJbhbasX7}A#&d%)ZghgMXd=pi zuC9+MFnM!XEO32~TIK;|z$PZ~#R;F@bw)mVq-|(2^wmU~85C+Q9~-^=Rw?DN&_anp zy(;Yz2oX0nD^F_AA%EDpAhuPl3ihB)ERIO?{B4?%2QzYQ&^4FxnHTC8x!Pw&> z(dRBwP&Q*d|L1}x?-f!q;C=%tjzcP;y4KvITAOo|3BlGL3<4dyhHiiY{nFVYnItAF*Lv+U0V>s-M_8|1M~Dqkz3XD;@pDEA~8u0 zFJQ*3YZ||Wal5$~)gr9~xt1Uevw6BnC^sxfU1iETdDhpr~*=dxmg}g_yrw;d_j(kuWFbjPv$!ps!z!5 z_)Ay&@hYN?-XmE+AX$3BcFfMU%x=U;f=O^%H>86$eD8oWK(!C}p0kah z0Gt1E7oA=X{9Y1XLj~{Zg(P0*ib&oY5G+^B5um?{dd0FA09;`h6@qDZK52tj&6p&h5Tf4A-sAdR^vz}j z&`pj9v@j-!nbr`nKhN|z_c(V=nsF8l%h-s6LNhd=C-FIX~ zpWj`4?a!$U0wWjJRpi&~l%}$`q1R*%$w4kG&RfT-*RMp?$MVk0P(wG)AAahpB6O`Y z6>(i7E}EP%PxlNs?`sbuR^RAuay>1K)B~8$qQNNx;<_}_ATAnt6PV@Vic62&pT{Ol zdp$J|)DJeB;LKzqh_z^|mWBx`Yxu!Q0%Id>S`m9$xJCnx|3ddLnOaRDSdi2u7-_Wq z9r&Yn-oXxTmaFBElr_MTv)|y>?a@pg{F4AEp<8MC1m&p=N(yyQL<2j_k zCp#Mkyjf6xJ#tEod?&Alz-sPk*_dDWd>fUUr4!=ubk19vVE0=SZxYFN{EzV*@?Uir zRCnA9NS(AT$-@0n;wQ|if0&X~MwKuW&slH+a&Nb6-c>Dn)it!4_e#C}nXK|Y+;rOq zC(X?7=e>9oH4$^~zLLX*3I=c;DR<~>a8qerE^E_2{#(Pu@7)p$F9^9M=&K5CH3ZyKhrK}o0i~8Tr_P0r_oLt` zR|5w2;7XRIYZu4^N|WuN31L-@^EewZ0I_gPkbhImkvp20H(O^gT-)56LtAu%NTJAu zBzQ54{{lx1lZ-SsRZt4Uv$40xy5^qIA|^2{Q6+|pl8|EySn%`vzIg19ib2nV!RdVW zl39XIZ``9!M2;lh$THsi*vE?d#2TJJC~SA*619ZW-g37+ER^e#`w49ZhUihArhoXI z=q7@~#j11tKwuF0DI?tM`s7Iz&bqha#a37Yw&Ho&QWj~f`SHTYF&P9r5YFK}X>j(f ze0Z%dpgE`}ewZNyfM*&9JAlnvEQ1^*I7Auz{Q6OFs~9Yb5*t2fAQ)`6dlnHlR;FX} zhbaJ)#=M{U`|KOLTFt|n7OG#Q*!|HNl%`X;p-Ja&T5}BuoF;{&FYnLMM4f9XRiMAU zdS1eMBJvgeR0$4(%b1dDcUUsuubyQ5q*ZFEIfZd6n2JI^jTOyc!-~^;pmx`~j%C`r z*XUJ7;nJ9G4VvPMi^h3Z7}ATFNls>;n2mf?5(PRaLWf=vgq97iFcT|U#|>LHz3CN~ zjmvBluC4re4}X&arCycxvGsyXS01-Hnu=Xsg}JZ<0FsuUZ1boSgYThiB`t5i>G}~m z8}~@(ESnvgfq6Csg>x!0Iwu%Yx<5F;$TmXKo+N`D3auFoobi?%7k!*5R`2wv%5EiC z)w;OvLUWE8=TP8Prp^XY$e<4`|6p-*gv2A@tyPg}mkDIY45M=;FCm46D@urnjwJF9x@J&f`8bX~&KlawrWbjWP<;%$Py^@V9gc$I+Orx4Wm=k!} z2Gr&rYrK4R|N8sFh7u0}dLvxi&5*mmu!*(PY?N3CkSH)62k4lhdiZ)7jVgwXp@|-Z zz@?EgSurro)mu~dyn3lhnehJ7OZ^q*W0xj87kh>*^;gsP;XDn(u#d34>OvUY5c2rG zxZz@JJSkK`-zi2U$#p{^q+|PU88s!H-M#UzKG{D@Wq~Eo6RKlHQ?Ta$zc zE*x%-9SffAE^MCSd(#_xYI=EiVA^N@i~XI0=O4X96f8ufO@_h*2+4+7Ox>E7-y|n5B2bo$M0n%1Vo;X|=rgU=(P|&N%b(YN^iF4Q z7eF0y=cJsO_y?jf`imJ%e=#{DN*#u3@zC_dbzM*+d||=6#*v5@ee{KTV&9&isWV$| zwf*Yk%V}&SsAV!}wKFY#4qnA?h~6j>#xqZRXCqU;xz1K3h?E5W@jjBxbYI4Eve}l` ztYgi5Jh-D>}P)w)M*zssB zwcw=BLPClfBlcH%W;>p$yyK^189lvEb0!RzH7nC@uPDLOmC|MG zn+P(Juw*L??d6}yq=Ho&fxi9!W_)kwM7K9sI|NQsq%0uOgHH)^_IAh;(u(~MB)MK_ zHudj2Zf(si^^EVekxzXpZiAKcm0Y$Caz6N9$N@cU?22C4Nkqlr{qaeQbsszi@o~9| z!C%^b%E{0kMZWImWv@rsqU5%@Kk+CE^YK#%`V$%ZtCxQyp4~-b!hR8V~#10j-MCwe}Y43PFMqFt&TK4c5g6G33mz}`hM zT#T+66Urf<9%`kt1xpYtHzn)M6ZfD~oge+F=$|Mw`YhGM1Y>Z*0~D9>N;!|s+q z&N-Oq7bi9m>BEoyH_h2ga9ct$A~l2G>KgAluc_5$h>wCt@|sW>(%1g;>yE&@Zc@KI z<(QrVdh-r048kft+OV+-8_^!2?_+=H{>|o1LLV?Ojuy&3i}#88d08KiZh6^DbDuRp zzvCGJroNA=Sp%fR(RMGVvjC@QHg^ooZit(8PI`QfVis%t#w7Mpx%CeZ~gM9#Z3)Kfk6kBVQ3`?IZ|? zH9aSt95OMssG9jG-k2|e6O5>5daf*J6DsC-2ymM39jZr1zr7+HHmL((j|w1-QaX)J z<~X9Y*s9$O^!CpXfx%q2^BdK=05K6lZgT_19kLxvKeN0cSQ1AabLvLlYS*=G{~B0gJKhio3L=tO!hv*nJ2-OMH8&myy zE|C*Qu|GoR0}X%4kRZ8sgLd;NK^xij;RvOJWI?e@<0C3;HAKX7=fVJ z_1wZGz34?DqV{J!aYb+JT6a}i&!zwPgHGI6FwpXWVVc!QZ46U;?`ee-B*(87*d5_z zy+g`m)Z$K)^Zf7;&T7@lkjq^!d(Q)BnxNN(4<1--D(kE%L7Sr>>CPXl$qb5j9ui~;cK``IGR*-%B+D3 zi@8}t7$7@%)r!!ADVkqR-%jxUYUW_R9FoIMGz(rE*ASW>-imq}a`pamI9NMqWJd$2 zz@#xs$@oR&`472Hjl8F&6ZhH|Gcq6BWv5b}7B-+cL~F8;XgAIwPtO4xd?iDCi6;Lu zR#VHgP1zh>a$65OoT5F`OxU#N;Tb9AE-Q%r>E7RJ2PVA^(RC?DcEH^h^8DxQgWQto zBfeMdF0K_#1ldILWsf-RGCIAWFpa6AlhlE5pRwu+)QNDxKHVzkzde4rmUBYSjpIS> zpo*46`0^0BXYv7N9BadJk%uW_F3bl4>}nf~O{Bh_!fHMHw?3O^yvF&-K$d7DgEqxw zb57BUWNXi#EV!dv@LU_{T^TXXYu$B)G;wmhZ+6XSX3_N@&9UFGk72dRsfSb=u-c`$ z{6K|DZhh4Fjt~fmN8sa2D1{pAx*O`}L=DytRK$hqF&l}mBxoI+?ARPIY`%VLmX|Mb z*Ti2v&0n+TTIVfA{BBSKIHO z(7g{K%S#?^K;tdcTW%AZ>ZEEr;C=jl%1&=FXp`_h!Ub|R7BgcQuhvmW0=ErG8xBG8 zslxUekelgGS3Oxk6W)QZAct-D?uX8m!(L#fS@L|DGZ4ChFoYNgD1E#KkJw(RODsMa zW-dte+rB8B3Jf(5SNh_cC^!C4T+d48WrvKy?#5}2^y+~h@8fkdKc#h9byV)gZ7U#i z8uWPfgMny)vYLKcUq{$BP!c~oNu%Xqc!;=1P-RZND39o?pnm`>iaj~9g3IsZK{$az z-~%tX(|I{NU=>@7TmZ|<#I;cy2pWViWZxO6-ODEfbB1K=#tt0|g1&YmlqoWDJZk>S zt!{?uxu`S++i5qgPr<$#0z1wm>t?l^d|~V|qXXr=87bCbU3(!5ij9NM#FUd!Xd+*8 z#CDAon)4I)8(yk1DcOy|~D4p!k$^=$+|#1Nn%PY8aeSI&l0NXTR*0 zU&7w^gwUFg(G4^$Isb>XF*@L`@{)rTA!*lnZsB+$R?_>Z6>Ov(UMA>V_qEy#+U02u z$l<){P!W#YvmZQrUmpGkkDP{|Q&x2olNz2fH?Dk8NKM3L?3W=$T+Z)bwEGSPdo}Hk zohD?`jfK;{@if%X?xH;Xc8^SyDh6W$_D(Fr(Y{YtLF|>nZk|j41Kpl1^Q|}v_^Pv$ zAMEGiyjiSzzbWK5a}9166twBR^BTt((4B*@NCcr~yodM&UW3wsR<#}Ao(u64y0kfs zeKk(Y?|Ph#o0{j&=Q3GMK~M>fxMZ^+JM88$fx43h6(-yD%8k&)9NI?W{nwG7o4qo$7e@baaZ5$wR(gIR=JqU5jmU!;ep6>8x7M+=OxMxqQ!Gh3a{se%Kcv*;rr0|u z{&nKCZvsG!2w^6&OIQ5^`l+yc)d8b6J!)^gWQSA_6p7KS9P;HPtR@Zw`S%!SK2(Bp zNx3~{KNzH(P(e{uQ`hoeNUkSBPhBDCtER96oQcZn^%K|tw&vfO5wY4?juL<6G&$=X z=*4i%3$D6{o~S0{!}w8rp8bZvn0Lx>$X=b-Ut@W8OFZi(vPMi2i&GqK{Y!DN8jjzK zUC8>9qhO-XdYgUa=TD=Q<1nGq=yY{oNoKZyG)GMVhZ{HL^XiqYi-?^~EM8~oN!GSV zD8jmB?MhHAajv2x8kT2B8QU&|@tkZGB8;r_d zd37TtthOIrr?9Ng2~|+w?y7l%BFu!23#A^e>yxlW>ZAieCmhL5wL17_gZ$rwJ8Q#+ zT2qG39oivtp-XkGG=ixSeN7Vi)CHd>L9Uw{cFA6*Q00%i^N9lWXeZLTQsV5!)afUx zKxdI-82Wfv3WBiaa*LU#z!welHG=pY4fCnOMr^F{j;Ey8pR^@tE7L-@5LL;R4Lk801?>pTVobltS1cU_ZTMl;Q5ycb8mM;Xvx&A^d8+6_B;gRU z)NQo3-ynZrb0LzKZ)DKP9Iv1EHf>5RLr9876N85$B>VY+o{#s9gsPvq52TxO`>R)jUrvSTy`0 zbl)!I8RZg2NY($2}88{cPQapwp`nU-?W{+3Ph8)rZWO!^%9qT?9QLJ4wpw`@7t#c_NTvfec%8Z)~?_;jkhb8=uh^$8l zP@J_h+Cee0R233+nGn2cBlp#(b4evL2IdrphlYwoc9-B|=@0MP`b;k2{dd&np{MI& zTP)EOnVHhCV8-;sCeN;MmHZzbYIZPj*a;mhn8X$H%bFd%k5q_PIn`b*l23I9(u^Pd z{GVr_)m?GInv@X)nr#Krjz7w=(d3}#%q0y`^ul@DOEI|mcYXiF%pr4XoUaKSM-aFF zon3Iux!*FZ5}DPWsy#b|g7~dsuX_YN%o!!>>rep+4r*8*mvgP>?(i0Efol^L_DQkx zGXs7~TF1Lmcoa%jU(HS@X-LF{tM~teBTsyBTW)JV4ho{^|P_|FNc`ZI63*C!Q0#SapiqkCoTtej*ho zu|xG#v|SKTw|ayXBLYh>c%(#(<@uQc5!H8c>tA$m|Mm zQF2vMCIsZi1H`{%eJp@xGA5_<-ru-V6^6PxaODKJ|m-&Z(U z8JVtxf9ni;jaJybq(X$Zudzv$aAEv7>-abwu4_B2h&~?vw)gjA6GZjRcvRzzO})J4 z89krn*%9>I8TFK^#B74@MhY7JrPj`~lKt)X?nf`cjE?cOFNIoN1t7lLaA>=&pRpin z%YjbqrFY0}n@G>l#HL<+aR z7WJW>3F7q%$(L8oJ2PrQ5jzC+D9f8^bh0E#>OUG1Q>MDe8Y z?88?AF}dJTu9R08TEVDzK1Oe1q>A07U<@8a4gaU=6hAE;PY=&ug%5y2aJX}cHP;#@ ztj)cG=`--4%<7a)uFqmK1KQIv@!|M8@HdI$9Qi{j5e=Qrh`0ZxCX{A^apZ|v54H}} z;sf{sX4QQF2SF%YiIW#P&Pj(%hX?=hugg51-dyIqkmh2O39QckC>{9WkC=Aa1SL0O z+nL#`98GnKaCffr%kF@PFk6F7)6|F6mSLOZ(BPiM9O8ME4XIgZ_d9la2M#SCouvB0LJdtr;ROi$k@F+@A(Au z3B~Dcj_;^A@bWIQsbyO2<+OGnE}Vh~gtp>G#+V$Vj~6kp8iRF#FjBy`+pYe@hUxZn zMah6FWoWX-n}|gzZJ33%m|!ys%lr_J#zi5lW+IyMliiGc9-qB%i1^*s&;jOsQl$5d z8zmI6Cr#8B2(5u6-8DkH(K2y0S16f@hI%u&)FmIClCut1PCVDsISngyT#Na6@9y+t znA9!^HOG+U5QWu@rZ!d(ba}#PhHMYCul8l-)f-HmlFV3Ef56+Mw#7uyY)?3z6!&cp zZ}Hoh{a<(h!#4cy50cmS6?Es1Cv8jbkEcKb17H0xDqQc{+uie7>ATRZ+mZIcf8%9g z%6vRzdJ>k)V<2Gk-D{yXB**@(!<^`sJpQkz11wiRNs#tW{MX6^IKm{oy6oEq+(?YB z5Z!nx?1|Sx8LwoGAKW$uP{Q%6A{3Wi&?Q#~q7*~mlpZqJtdI`4sp-v}fu}5M>nTa~ zLtOfHITu4@DV<5g&bqD@W4(qaBBsR4Pxc>668=vme?bY_ESr!7K}*45ZD%1wh+Av7 zXdeis6YXH|Hg0SuBGAh(HkSE*%EliE6y9<9Z|dHaTisXhzb?BBq?NSLC=Z1-Ok1%n zXw6hFwDhV&!0T?@8nC}S(a^%g3{7`39)X^y`DKA0obxu#pWphIA*RMKY4IP4`?jm> z-Q6GN#H(dro#rp`cnf#cLf+QVe{xEoAqq6-i9IvMF_dI0jiVLBqM}sMZo6L;n z;dAiWb-EkW{eT2q;C-Ov882nLI%El%2b@-N5GC%WyQ`J@L`)%|`?ol_VFKmlSW3g1 z9Y#r@tNa`&hyy){TIM-nv>cv7xhQ6ktD(&dROx_8Ird-H{VUwdX8E6nIUfaEK`KFu zfGpgr1)N6V>vK)5MdU98x2AxK!-0PAH6G#3GVwvRFWg&hfN#2kdx-qcQTfgb4 z%V3lQW`d}VeKMW?PB&WQ517I`tovs9J$?Qzv67)5A=Ha<18hYq`;N6GgNLaz7 z*#1?OO|~ZWDj=&QU7mVn-6Xvhwhpmvq}d$u`c}$ zekEmA>}x5Q-8IH|xP*lc;ma;Nw7FP#QR8p$DrOol9&-tIIClC8I;7h4;rOISLp^PZpJNkz1ejv8^!#!T`7zd>@n!4au8 z(~;hNRO(bV&2A$g3CXcy$Fg3#9z@CV2iPPV=kh1E`i+&^ z@*cP8jdjz868b|ac#%^5)vN+@{(lA|(LpyioLn#dXAD(-Dn2vIH78Rw6k?gtk1t@t z3DE=ua&KzT9yDZ*G;USsVFpEU$Xhwl8NTH5Ao(KNjcNN|g1JAIWbW|ZJhkQP*g*g9 zK4fbmeh6WZZ^lE-@zo5m$?%@kRvMq6XjM)K2)t8x(EmJDgTc0R|1vb(`5B6xs75@q zX>XS}iz_&D8c9|ewB@B{7lgeJMBHCs_^2^jfOU>D_hm9t+A8#OW;LG9@@8lbL>>fU zJG3i^_LZi*Y2#~0AwSvAA(j`0*gO>Tvj&XXS3q18^^=E0F`Laz8(yzPxiiN#`aPan zOIYFdSU)cwE9~erwDYK7{rwl#bnX5>g1g_s&)B^2=)?{s3`!#4Ko+Qeu@e#LHT_5f z^eZm4IU^?i!)t#>+*yr{{WfQ1R8D!$21GC_UGu!NbM;PTgwD^t?=F*EkI+ew!Mv7$ zkfuAv2u_Ci9W!N=N`l2Tnq!u|r~azcPr*s+THv!s9c7;?E1KZ+{}moS0!b2<2fLjp9G&FyVx{-6yD_h}#UO;3JA@Dy zuv#UHvB!*QdrLtU!p*JE9g9#{Vbd7vg;3{1$P5s$H%o<)s65zoxxE@|v;C|L(B>`Y z4M-Nb29Hb1{5sxf&VWLsM73FwD4t|kd%soD0N6bbz%q&+Cih?cZ#?l=63(duHzsrq zT9nsKtRCx+_*mw#DwZ0b>thrmF0s*DD+Zk7(|hOM)5Sw)j*#u@R@JNus5S%qs>rGP z)ZcwUoO+hq1S;;27cRU$@U{{_=~Bwl(J#2C0Avcd(Gd8d!&0n^-`ogPDam>B@gx6O z-m^gXSugL3ao6-M+LcZDI8VMwt! zzBa4?`_VJIsnsjV=B#VExjQsIvhuzFcLB^OPBj~mTE&(glUqK|`+AzMo6G+Wvu83U zG{rY*^|_!yIYSClzd5G=2KIy$7*Zvm3{E#cNe#^DegJZk3kN+R3ivuqkm5q*Cz1shMwxCf83kFV#Ml_CVa01FsgURwjQ?nlpRw`Z7}YyKdl6x z0Xmwj^FT7uA(G}Vg*=NtAvHQ-oup`&@#A7GZB`gcf0mgp#w5`YlBMI?iQnOW+o3#F zbL2X4Rx-7!xmkd3B!F$cW;O^GpOC>SsKp^^7$9+0+{JqvR@@sDKJ29?z$InFLwW8g z;6zaYhV7Y`EyLLw$$!z97Y{qf6kJbJgZ+i$f|G6)y70=rjGs}(?ocYU6}U=ux`g>} z=~9D0cu@g_)ytE>Ko8P!r~xs5$T?3zxXA04QJBsQeoG|8bCKU5qks??*gf?29u+n5 zF-*;wyXeLGbvJ2pnni!kPE>)00s3Kjt^TKZ@%KGlq`*RV;v*$ILc~hkE^`(VRI^=^$>na z@2}Zn<;i8T%E21O1PNQW1}q)kaz}$-4d_VsO#DfO?SiQK`zp0{U`A{A?0}cy5QOZB zuH+9wv(u>vTt}mpfQ&%xPpRiECY@n#XE(=@sE3?+ioRf$6NHKr!>>W0Uf*_6_h+L8 z@7{2PVG-zYe4PPBDUboWOB;{TXj>0uFVVBdEZ}J8M!vrH?bC*&jdWvhs$DZg z2|T5_WeC)_ul&}xH}sy@P{OARtfj9Tpk5p5izYItg4hhzLB$O$n|s96$H^Q63+KjG zw}Eq^=rVI(pc=Xz#$W?tUY8(VSGqs~sZ1?Wg_rA$;7&>D{Z)vaUTB-;9|+_Rc;5PR zGrlc0TlYBsA$c&pwktCSu_m5|^1onU1A3r5*#0b~I2Bl8Eqdj)ITt~bkp*pD$?Cn1 zKzsxLf7|;XCb}z>2KsFNB`4GO#b| zZCI6`2FU&mnqh08pyc{}+6*avS`RHPp6V*SGX{N27j&bfC>JCPd_}yGupBvtxD)KCW|2S}3LO$N0Uq@Qw*yPSYS+vy9+N zr=Q_4B8z?4(4pzLa{hsQKd(^w+kyH4PW2CkDn54>MY<4i#CY?``w!Mm5zva!f)lMhkIuK zv)Nsg{HnF)8@)(a98L_2wA7k57{SCxRkRrjeHl-Kv5lKaE`zRiH!YJwu zTp<8Z`4TQ9)lSlpiahF+uW7!-x2ZqO*|9rv(%?ZEaytEpT<{}c_c##RnaCIcgF zi=k67HqvFrIAouIN6GxA_^SwFw4je8ixp-30LgmXpNL?@%a)@5`@_RSk`p$Mez=JZ zl^006bu#^OmIgeIC7_-j?BT|EM5)P9-pO*NO^LwtPxJb-AOS?UdO(Jg$zwp!cN8V< z-1lQ7@kf$*0$+j1jdLCFi#znp7TBN5S`f0ZR}GB zco9&-XZBhG|AkooJB|V}`TtK~2>+sq?oi1q*C%whl&VfR4#71&JwRT0 zp~~261otcEj^J7`2lC>yb-V-=5yS;Hje45OYY2uV5*eyg@tk`2rkGA0ojG{sDXJ7- zKzc#VRpAr7MgnNn{iC(M_eZYOYI6{Su6l(!mArCq7}DF#42YT0|6HHReunAy@~$pgVQG2SOMkHm-Q#$ZAM>qGQ^jQqKf)g3 zOV8T{oK~2<|Lh;ghHM^K`uXxU-1>4i>esIU`2*k54NI~uCRjzrm}@=Y9lzf{P`W)o z@*^-uGxMG;^$J zmPy8$CdYCK|FE%@s3wdz^KON@0k`&~^@p^ilA!6&%``!AS&xf+N6LC#^m)&B7{>L~J04vzrH62_yoocWV}H5pemqXYWrH!HJs- zlw)Vq2rukaA`y4<0_VS%ap#C?n=cRzC*I60e7Rp@7m36?#YJs^Op88Wo_AN;8O_Eo zPW-3J8Vb!p$@NP1PUhueZs)6`6ob2Bhs$vbOqvixaN=sMtG^kL;HL;Km}I$z(%-vr zMbdr4p$?Oy0#FNeajB>NeI!KHU?*$ixYW=ko;tHLdm5ZpW7{|o_`J9_-hWb)mg(#& ziYLiQ`eJ6Nfv`CLZoM&$H*M1QauH8~^Ws%PW@BkBA*Be$nq|QmFPel|9nG_)<>Oeg zKM;plN6GO~UHgHSri(DL`#{a3R=w|rE5r8a>1k}s#dis2$u3^wXws{P@`0g@90{i6 zROI@CeC3Kkva3v_XR3Ac5M^&wFhFpN7(Ab_hGQ>xojYn1AA;2noNUlLch=fK086eN z%@i#!=q5&Gy=@aYqVrmrZ$)sD&HmDb|@n|j4Vs}Ox58?FRViG2CG+Be#8K6MVgKMT-Y5rsk z9LhNT^^2E(`vBh%@MlaUo1gX3Gd;jp!{l+}qpzrmov47;2mm=`1RG(*-w|ANUxGWa zh~D1e{_wk&cUz26jVK-Py?_kCpYi+6GWP|Amu}oDv3hnR&Me9JhC`p0S-7y~GHjXU zlh_V6c8y=Xyq$Bo5b5h(@aR0 zq>iao+HL)aZE%M8>td=^lhb#L(JQy&uDv`yFL@8E4EwjzNRsH`Md_d1NVHO`->n5w zC+jm1=~wIleHl23{!UKaN@NpZ7 z74o7She4tr5yV;f!w-dU4?ceUQx>jXSK4#kb&T@BBZm(@GBZ({8xmiAXEZOWY z_$1oZ^Gew^rR1idTYLM1`z}=cbr8jPDm?%lJrM30^abG4>cQ+^&z)rdeTn80oN(JR#}g6PpyCtdp*Mu2D*&d~X0-@U!@5=PEDfvrdqt5t zV-|W8B1Kf5MwQ~u9R2C`lH(M)B!OCZR-NVE_@hH&XOfqqt$Vf^S`gzdyz*A5xIfc& zw!ICd>&YQ(ePh64!TUwajdg8I`;GK~;7r6L2xdDKQ-v;Q;4K`03-$SPbXA!@t5wu7 zKn3!aj_{|ERM12ssHAH}M)s@1g`tBj|E&%7M5>5gyJH#Oy~=cqvaIs17!bT2YO;v? zjF85`A(iG>$`ds=NtJn7;k}rb(=wf2V>)Chf|bhuGy2uLgjZ~w4VaJ072L*cB}r(C zv(+tL-VcG5kVCii%qUyix=v7^%Ot>%{Fzesn zF#<@9>e&dGpc^83JH`uYuQ|611zwQy)h?gkI{fcI%%~T}^Bw`iH>}V>r|pu0Idf{s zIZnKxH$^CF6uL}=u}jCW)xI~FZ2VeyT|;F>MPT(pe=dw{-1$G^bU?C@XjtpBJLR~X|o@Y4T>qB%kmCE zz{T+5N?Ks}923fIQQgbnkFxpd<SbGSV!x#~QAty8TJEh6j(9sGe%!`(D>|p`1(!}F*}Ws+-6r$C|;V zf*ZL{+DZi=m*2NYXtfh1%CmwElns^Ch$V^m0?^xbrtj8zr#VoIed6QlKp!bY#xZLO zN5=Q)$xk(pd_kkbTCcA)slhJM`hiYB?7h#Swgw%_cZ@`LbEZn@vFxdvBqyi3Ccgch zO{II?j-X(2Q$t$dqz=vlF;e7gL&bgTPo77RmMo=rAO4nyf4eu=j&oH`ib!n~(;z-0&rmt`Ss>Lb!B?&p@^Zw;Dc$#cGAlGQ z>K8z^vY>5UP2Bj_(L9M5XRM=#5K5X%YRdPD zki|POz3E)iIC2j;wvW-{R%8k|=31kF6d1<@ggg#x8|Q*3tC5J7eA)ng_A8^V|0xaZ ztpaobxU$v~w_=4asy5iRCq={JyR#9z>W|cS6|DP1Qq)WFFzJjxwd+_r;9q0ggk&g+ zhaT;52Kdxhik>-XulBtfa8HbuhpdG@sYyjuy&4MW zxOaDMz)YyK%UXbD+HRi;W8v|R@WeUiTZm~zv2fy9NQ)MxhrTj*vmFujCq23l4O;tpI=1F~_O@Jn$djaOXm6f+%FnK`T5&rP4>c+r7%eqH^DB!%T{1Qj$?YrWWvJ>AR z@!vClE0_4|H0fjNHIRRGjC__rNA!THr`%Ya+qx-Ni!1r}(h=anT3U z+>A4-<7yIY#+<;p#lZg3_M>L5S3Y!bi4wD6eV$R-)}GEhKY~1db0NJr`xUHfSoH<` zcEd{uW{_A5_5RZ6bY+(Sij~lGZKo9~*A2e{686{XkXba)epyL4j8<6msz{YH^WeoZ z)WJ)0<58HMfT4!BZkkdE)KONEd%6~?`vIW`Eywa8O^T2l&MtC9W86vgWgmq&6`xG` z88`ZJp#5Vy2bFI73KH30`lWT-ntY>Dd@n+mxH(vue^BrczK=ow@LkW{v*evFx7!T* zc7x0KGl9i?W^63Q$~#f@RW4RQ;k7ym61X{INI}xi%4A+%7KL|xD zAvi3(L|_CSM=AO+Itqa->8vP<5~(X1ASm5(Se$8vNF%>mlc1b`0-MHyA4EV4C?yVs9C)RgS#Pcdxp*vnDU+Le=Afe=UBF#Q(`v7D>E&GcT*4vJVgX6yq zeg>H4y{AdNf)+sjJn7~nkkZvSFBqdp>8N0~C(4=~5cz+b6IFWE5vX&3wRtqe5s>T& zi{wtyD^5z#^$}`#dQ(c}w*X+xb*o`^Cc0A5RC_6O@uJ<^8`~RtIb7S zh)RCbPdF>nP;B>wfsUsYfCA`MO>0(^FeFQv!8nM?h?OO}8O__0SfJRotyQVV*u>Iz zmS$mu$BCI@)K?e0^}Y0ta3^WYwr+wdRrtqp2Q|rsV(f9kiS|0Y)6td;J8nWE*R($0 z#b6LsGn=zvdSkRuW_N?iyfFkw<;6;HDNA`$j1<$+8jvX8zyJ=28)g?J1{=u1-Ba=H zf;$}t0w`mdK1B|hP{iJwK4O8b-ORY!Q@OWmRRB!vrxgHU(85wR2A`%pI%1ie3PZ8v zx!#?n1fV5CNV3;g7u|$e6Cyc(oN~e2)^{S&1eHhKiEzQ5qSA?{^_YO-u=oPqCNdMw z;ff@o39)9Nl9$bG$w%I{Z}YHEe~MlC+<|fC5EAz^jwdw1Nyh~yP};BJ5EKRb?AlOmdgY9P>l%jC zEj4Jr${0m;MfTKZ0RR953g!s8hxh>~t`+w@0w8==;}{kLbqEY8e|GhTdSN|nn{V4! zN$%_*z-N+O$Ag4bHy3H^!P|l!Z4Q(vle&4XB-Wv$@;#F8js}PTYacDhUnxYO)`m%E zZOEgght?qQ^&K_QcqjA6e79leM23>U6*=29$3}enQEPHC+lWT80Wkvdp;tMN2~&ZM z2-Sk<9;}oX5;S2+EC=fPL+5!38u@}+Ih>+fOnbeBY3@#2TtPVo#y(OZJ9_YvERAXi zdZv;c62X{9>+tBj;gW82@UX$ES+Q%LW*0NYQMGJmA_WX=w?wI9p4=q-ZKu)S56Ljm zn6F%9c&K2Sr&=XqFB}Z>e$>nC^=(p?KVOhlOM$g!&z{5l+)==yN6qbwem7X$)^`Js z9+s{%&r7!#!4{=yoQ%gj5dsNO#C=L=kytC50)jFn6Gega)~ak=rpR{PNl_CxNOG!4 z%lD9Wo+`{-CfL;XelvZ5G;LnbanKxSjHo|HtBHJ6le&0wAPfS5MH`T|7lxt?)-+J2 z0?{w=YN1J$o9A8ZpG1HL!xn-dVgnkcEj;-tG^d-kE1j~%$$dW1>m2cc_DHHd-Sl?# zHv}=dM~qogpvz!yHgVbs0bekn=Z?qxdx7}+;RFWLeKS^~1YiWrG5k*( zxC&D!goX1NI!x!`9LtNze`Bm+A78YYo-jDWY8wlvTs z*!Q2-(z$0E(BL3LLU{_)Vo9}zVUl!GOOob_RRFL^YmsVVMPs|ApbM5Y{iSTH1IN4# zRxPONA=QBofz4pC@-#U;CXh4cN{1v7%Y zzx6E)sLy~z#EK=8=PJ2#U6+=Qs-BPRkF@lT`@PH-gE%iegxz+Enk95gq%UuP9sf#^ ztY|als4lo)Mh)xSlrC9RK(V`YNTeez&l1Jb92^vq9!QqbIFOE4%$~> z-o_xSpREpdF}f&gQ85jMf-F85WuJ?k7g_n(0&050DANL{6$L*e@}M4?95*UV5i}^ z4dxs#U;j%?{UReN9ZHeU>bD{yO@akVxKY>`YVEg0jNEEP+y3guc6_Swxp*1^E|?}{ zdUfAJLTTp+Whppggzhw>YAD!;;{XnfzFbdGu9fpiwm+wN_D=sjmVR;tC}>GeC14__ zSc6eT#uL4@w+II2&=D&(EsKO?^ARN{=fh>~gXXJ0@UR;ziRL>`hW~7yiL0MX>avR7 zuAyNY;d(8eF1&T5CZ+s4El%zrwvk@Jki7h$g)1R*^W-aJ)QWTdeB8U|6gK}O1_uBS ziNUOsGSy_#1+*gb{R267y$sQ5yDB;prAdyV{7d;D`7LDCovmrvBITcQ_K zxvHn)ha?)&cZERMcLvG;PjG?-Y#y8ua*0)e;+h$+ui1<^0DlzF3Bv@E{^qoMj#BCq zl4X+)Bx8zD6=y=VSeo)phe*S*0qrz0R_gIxuDUY_fUfyhV=bUF zjLwwczE1axt{e_p21DCPDQ^u!f0uLC)L{TSj!^Y& z^(YG9sC^iR$^!uoV=Iq2n?tE(!F1x>I7(%r)T>~C>$wq9Rvq_ z3|#9$cTQ8U1+BSG?39F~1RnFj{GYw8cSld6;Cm@{I3@1yT#Xi`oKv{_y8OEg^YTd$ zUssUM`6(WKG^}L@5bN;&Dil*J{irrUd^^y;E3@X^{Wk*uxzwv!T2R5@hW+c~ibbMp z(pmDHsmQEo-AKw31mf4nc1E%HAC(%}CGQh!k`D2x>+bo7IVoWj&ka3)yggJtO>-Qq zC&^6k%1QL8GpQEe5y$E>9wlht{E42wHypZVbDeJ$Uxp%>*VM{Qb>udlmkZDs^1wYX zq767|ZGp%MYLX=1q7_8V)d=YXvL3N}=0!OETxq8?qb5F8azfnE;}d?SZS&w+Ya4Ej%Wk)xbz#AX*vU-auA z0eAp&O8@3S0-p;6ecxEU|V)eCN{ihsjUUqdnUq5Al*auJv|`tg5ef7X_j zb#FO$yj))N&tTCgFJs(?Qdy1;NfrkL=~vQJ7yJ3s;U&KMF<9eiwW|w9xnxD&+UI)3 zkZ4U1pl?~(n#*ZdL%?#Sm<0Nf0M!{TJ-GAFs6I z1dHk}_cHH0<_M)R(083zU@D2EECIbLC93x}fnsp68MZF0bFE#DSeWXk|G}1f9eGAX zb%CxJ%FL})F9L#$8CR!`1d0elJ65lH(WXN?+1=?_CBir^Z;P}yZ`{yXS_IZcZ0FPb z6E<{m-I_tw^+qu6mJ*;UhSpc_3;uxY4ZLfDw_z6L>f*0#cHuP&~U|hkBs{du@0}_CHh=L-sKE*n~H?5*+NVqKYAn*26 z3^*^Ef<0j`4ecfDZhxjZdkra(xB7XN5Cnr|xs-K#Tp~Hoy9%*AG1VCTsquck4L5N$ zNlwK6t>mSNmvYbaWC37UJejRDXNh~G4B{@4nG6A4t!A2`p`oh}IzUcn68+9m>hu~* z-#3=p8=bF96{*2|Z5PoXQ*;p*K=&O~3_{*1x6g*Lf4RTyts+&?MGnt5ykpLS_eYHq1!$}G` zTrsbH=%*t{F~v+$^A|cki)d2{b6&Yt=W6{PJt_+}hUBUwBw6SC!9IVnWz!hBvDhGh z$(_L<9JC&>?51&VB*U^wO%zE&XHF3b>8Bu6SP!dP$k<{37k*cM$-^_qhuUJFaw4to zgjt|>uXialU&1q#9a?*Il$Kg5yPSEkdo#_z--;}V5n^PhivQB>OYHSvUB)`Sg3KkV zFz-JwxjMf+FT64HjHF@?YZf9Shkt=Ci*SfR@|l5yq|_23UTbK#47-!1gm~9Lc4u4X zqVe~;PD^K^@0y9Ta>#gXlcU_|oXPLs<{DrS{SO^>@Bt*b4K%szQuETPov!KaSTBe3 zXUlQGmP$`7-3F`28C?l_yQ&w$W986s@GndQr*i~ za$(|+VPIC8SAD_dCwx+Pgf|5d1+Ze9)eT)wSAeXmFHD4zAHc8~*d!+_^{ckSyzpHU zY^Z(Vp&_&Z5P)8ycx9`1qNS<3w^meaDXqf4&z#ZTN$ERP?6|;=k?<|?&J5Jru~Cd- zxb#7KJ565mc!od6)gW;6y!|+lJ}R=E_-75g0VXVYR;6*rfEDUvTW|OcwXD@yZMz9C z%lnHzp9s}U>bBng(J|3sLkhdAAW3E{V03$tgpZ92{?V=xjNDGA$j1T|*)cz#Vlv ziQsyZ5TRj;$StrWZU9ks81`ZH)9Et+;g^U~08FPxX+&Xd<+vdZcjD17#58zb?Bgnl zlB||eEAf(y$`fu44vM0sk)0uDCJg-?sG3TuaxFmwozmvC)lUDKf!3H{DMG{hLOAz0b2?&cuH+ z2WnX7PGz^%uqI1=A(|b%i~+JtNFxEJ-)N8$e+#%HoHfzfl9r!mJ=yqKPU{w!dwlt( zG?vlI!Ev%IY_j4W6ip|NAja3utTCX=*hcJ{Hb_95805<^sPQT18M1s3)Wo zyYE0R;!>thw&G>X%R{^t0B+TgKTm~)c4zTLOg5^6dk^it)5=rW=VZy3UPL&SE$*$J z>lYkJM<4_VUqRx8HYUI5e@W_7X>2ZI_YRtbBQFyT6QcIY}o4 zx(#FNhZOtrb95XhY903?@prR5_`@na6t|lth(s&j0Zk~7P}~!L&sh7nNjOMvZ%Urv zB*N`0ON10GYppzQN|T%qEXsRJV(iG~`iKM`ym_Y=cPv5%tS^6$Pxtm8Z|Ldz9Etq5G4+AB<+q{XagB!P?4uH5+=9gmLh-Qb=_%lq$gC< zM;eP^Fp>iDBmk7wL-KShnc2G(+_y~{#q!gY8qM;`YP?kY1*_u>MQOLu+lUwL{NZMe zXfKwTdPV*~<%@|~$!etz{-E#DsU5jn4tkoO87aSV2QBS*`M`dq-mgo?W$G2Bg?7T9$_p^nIC+8AUq~dKO>CKOfq|!;-{$tLAUo?Sdh{txYTH3tm z(l;-`d-(aQ*uppd&(`uh*A$NfHkfHUY_d%|`P&8lu45n5=Lm3TJ|IKxeIo}={OZZJ z#8@`ZjEj!+qVi8nn^XDFWq9n5U9cwF`P`S?iJ-Ao{-gy5f560t>7e<-A8Lb>Xx_l_ zcbV~Hxq_-RYO3Xt(=F4=QuPR4?}n!qb*GHMFX#1O2n%>n-6Bh(=5id9d|t;4}4*-Z}$7Nd|4fg4zrDvo=4|o)QE*dOd+8K9>G(< zjN%gcNy5Xmwzi5W`ul=CJxY`(U@kHtLH5nZ^wy!^d2rLKR;Uz^T*U zXVx1Z{p`Mb_EUKMke?H?fe|_8`P7YRm>MH7Kk$v4)u>N$Y0gtBCHBW~Y19qKD~6(H zqbv*Dex+HlGX+K0rk7O-W=5>F)dMHwM>G9da6pLA3g%I`LrVQ-#i2JJ7XP(1#)N7x42zcqGL z3zKrSo^JUuWHjYCxx{>#HIkR7I5IaiXwA@;IQ&3vtDimCUBPR_oa>AsPi=+!VLI)8 zwXv;k-$u!wzZfWQmfIP+bH;EtD+To$j}lt>Yv_n1uhTdfE5wVmZ&W0p2PzMNs1^X< z+J!+$BP**+@yj(=2@r|r6_hd&Tjq#^_&ggs$qucBqI)I}d15rHhXFE06Gw2}<@^Hk z@tZ9ka&)x)!4x`RO4g?=1cc)F9=~t!3y{XPz7x1VO#MTt0R}UP*f?eN&JjLF+`mb=U?V#sZy_Kjm3SV~NXnbld zhYgWn8S88DM3KoPWG62tV`=`o2Hn>@m%RL3Xum7vtUU8psg}A)HPS z&d7-{`E->5@gZ%F%PtPw|Gr(X8RV=H87hO*yOL0xz6!ZBPSRnc!~1e;9DyEzd;7CC z(|1%8S)pQ45;Fr6_bDc(FZBg=`jRZq zNIcC{dJobbR78Gu{+wQ%=_NF%&WGrH5^-ph1umLJ;2~;)l3G0O)M%UE9);S#<6}kF zydqjAOkP0atvUSEc{1;?cK#K13jq9ObiZrCK}-=6$gI3a>I_xs~Vd&O*p4fd_sh^gR;!o>U zmjE+4Eki~c#|k&hX#tIzNmed2hNKdqFi=NI^}))loe*Oq=N~c4Sp@lRxUExobj_V{ zaNXHLKeAu5nCcw6&E;1q){S!3lPZ=SsO5$=XK%iI(WLgE>P4Yd0*GN*&gruj({dJZMcMVAe~zWw7V9oqVC zIAt-|kn!HEs0yy?+Te$Ik=D*6b0BAP_wkuDXThQ3{`3RhCT{-eb7C+j3U$KG= z)|vDD=(jBJ#0)gzn_S9j@Mot94frHoID*TcZ!bhYScX^oz)>qW9m#(OOSgNJ;e`)W zV27XpnPLuOa{vjIVqTXH`n#=Uwl6{{^K&HiUSP_3WJOv}m}V$*j6tA6eQ@V=8BgTM zMnaK(Tp{w?3Q%Z;{D0qD7%-RiKW^LgOcI$lKvgXPQ-GpQAXpyDb4aXx736^zyRh6G z`jH=cNZpuxo;2>Gb8#!Qj9yC~) z#!`Xj<4rtkLD6R0&k?BM-K$zRKxwtI?}>)vASsBzwq;he+PaVyx25X9wNqlumV2cm zaO0r79O9d6{KJH*h%sFb5<8%9ns5^k+@c&uom9vlS!f(>ycx4TL)xJeYSg4=Y9t@0 z^xwD(!t_gwB2$l65|Zh3J&59gdbyNWwvUFX;JvYhEW;uXq_G!E4B08n3=x=&I^|Hg zyzBR9P>^xRU!2+us8+8lgh|H)wVDB407b!KLcqcYZBVs|?ww!D@c`!1{}(bEO#xwq zlkbX#|2D&AEZjH%asBAX0E5j?pV}MGQ$xBXu(vMhTkpjlm&+gPM0Mz3sRRD=s}Azr z9wM2Lsw##; zyFgD#cl*zi9YOL&>@aJzpzXxeau;Akd#z6l(U9fCJ1H^|J9D0Tt42n-xF#Q(B6oAV z3@^^AKp4~=X&hEI=SFKk&awdJ-xy8Uz7WA2bvQ=>x|FxQ6~hkRW$}OuA5$8WIN@1n z0FX#SCSu#1h{OBOteC%&j}@Y{)4UY-ab6k%siMxQdTAd~rUEgRfB|MWcH($}>y`gj zu?A)zH%nVub`FZzEae~)0u;femwr(D>ZNUXc;dJQ!(JNb8bD~oRY@Rl5-FOF2!LQ- zoFj+13`|;MFZjv_URY3y_#krH3SgjQnpMY0^q(|Lz%{zMyfZ+52GR!eG^${NqEA1Q z+xuxqW<*3(VF^S4ts8&?WPb>Rq&W+SV;+onLM9x}u)=c}a&>Q`e-rzgv`_Zu;W^VC z3@sEX>secj(`5}tip<(gEh4hZUA%gJ`e(gww|{>Z5MV{YOqT!4pOw}i^aBZRnf2`Y zzX6*Hs`0hI{Grk#2hR5ekhu^(gQHJIYP}b&$r>8j!FuEFg>a+8jci!LW$BuRN?Axm zgDY*FK0&WrmUB@im+RK>L@_q=2Qh*@5~mfpmDpP48$z1#SOFn$9-y)d`DI{XBc`3+ z4+ryjUS^jLxk*Ot+0g&mFA7jg9f`?GuUzC{7INU|EF>B~?J<$A^~w~?t52B~NI#ut zaB4!d{}h?=-tQb5(rjMV@vbxm$nezx$+k=^n$wy{Xrhkiz zVjXmqMMcu)Ie8&orl@$~Pc9XSFO?x$2*Dtqag@!Ys#PlQ>uwP61=LTxHfvB=yTg41 zcXxmt%^f%12wulR5XtI(WsgEf+LHj(fhVNHDu~p)a7F9NaqM;n0L6s=WrpzP&%>4b ztfp9Aps%ahDSg82E7-8z6v#La5;KU(nA zOD7`K@C6`cea3xp)ot9b%DtODDw@26_(PEHhO7~<@okMsoq|MNKXzCmz;T9&RrZm* zBo(Xqq|CN)AYm{;zuV@$l+9aJ4vZbqf_sROqxoCtzw-1gH#z)dpbyWCuxNJHu0B{4 z>AK6Qxf_=Jl_p?e*XUnkg}7tJTO6YnqsWlfdkW}3gXW@mhy)F=1)E?279?2cNCg;+ z@pw5V_2a^IshLA|O+K0XuYl`EclfMV>IMSWRc|g3l%cbD~2!>{YRGn^))(t`cUQKdMN?&UW}AV=u7g z!k#iYBsX%A&yFf!eiudtJL(OiF7Y`)H}YWCNn#`KsyEkN23j|*s7k=BepWMCPO!g^ zni4^b5fAW^O+!4{hQ8sosW#OhAm==^;S1k7P6_>L5bL)FH+CDIy>9(zvX^=Dwl zQ^)Lcya+w2nz5bET_POwfG3R}1wIoH7;=-dOKEk><6gWqz zCL6@^nuPbBk2xK)6Lf2A=uv8l|L1v=Cw#4wc9WEZX`U3r`zib1% zR*tOa!NgLETMVK^)K;Xgm8c7U~ zVr}D?Xk#lNMwC76D~U6ToKDd|k>Nc7zXl@l{C~>chrKm@T{^ue`EFKTX@#;cP>J}{ zsrhknmGQ{u_;JnvQRUp9$#5%~hOoK~+u6(dz>Dsz*&^HhW7zF#l;x}gtc1;b_I8i= z=(6LI2jepgH~LkCl1Tz>c><&9qz+Z*nREF4?7tr=2AJ#c|MAmoZ;PD$MxKy+fGFe+ z7SN;$mnZ$K9_%vq?V}v5{vn6@7uD6qs$J$SeIG3Nuei5e=6MTpSSZlp?_B-PQe)60 zwkirw{R7ljS@A$W*!z|}Fq_zp`33j0-Llz+H`VE>43jIQc`xO~vV#qj(BG|Lt=bbz zdX9!(P$iRNQ>K&fEY>g}7$Q)*8wUGL#!)g-RgtdhV*7?4C0N(;W_p5PQJ2_ll;c6F zn*EkQ){_$6+)z0slEG+hD7YL8Y(p}wBcCJd(+2j&Xfzsy1UV8X*c`T;F3PEc{(#Tg zJ$yLO4e7khm)3j^x`x&?ZcdRjV5Us$lXf=hEeu>&;<-fkij%#%^mNi@NY^$&($R?Z zGUXinE1$xN2u*pJAp))2Z@8AW7E!BIWv&TOQU$8nUnT-dDE@&qYiB&|xxr&Bq0~m2 zO(ra8VV_%Ba-K*cz4Nx7%#v9Ib;mj~5D(W@OOSrrgS_Sl=IhOARbBA#t6Q)?3?zEx zPep;+W3eAH=Kbl)h1fpP{Y}WU9qA0L%QKlFU z5$OaEHks*S$;6bci#dccH4yqhIkFgj&RdMg)UPAeHa=ah9hw-)QUtFs2QRkJ$)SP@ z2n-f>V+i53QAIBC<>TLKxW#8>0B?55jge=ZAZ1v>lQSNmt@aH8RUTP9d-4uGvjuyv zkffs_w6hQ8p2E5d_~o5a#lZljGXsMpb#`W~c(eBJ{Oyst{KN2$sWbxGU;(yv6rYRT!5LymEO z8GBsoN_q;Zl6m8*zHcmN=T|b!hLL3x){qSN?*7Rvf2AD#r;)r^q1F=YZ++TjG35l7 z80dQ&KvO{k6RU;z3D+ec1lt=3<&5r8H}J6{-5ievg4;v+47y%&Y=na!6cR-T@ao0DS^hPG5fbD)vIqq& zlI?wz?i0~&f+Zc->bm<)6nQWqcH+A9Ap391Vg;VMtL+n`5n#SHY8{`)qcy>WIzEl; zH8mDWWMV(&8`RaFd0(myqU>^?To?#{(MyUy`Q$luoudHmSS)zjX(^cKgB%1@sKiga z;ZlIyt=gBMo{L7`p`cja^^X3AtpxlKW0DG)Ka>N+)OCT!IC~6I`K~w@TfdKU8*|IiX=73MzAKsdn zlC(CPKE!K@h1@?0Jy2Jjlyd~K?1Wb85I<_dsF73Fc!SrCi-wP)-UzgO^JgNxbmXm; z#XgEJctz=NYtFWdWNooWv1rKwly-wliB-#zWaV+9{M|=6s&+A30dPi*4I6-P3m%b< zZC7hWXV0B8j_lX0czlFSL2JbLWgA+24@WK_5HXG*EEO2`TzvRj<`09qTACl&@qR^+ zc%!KWe7J}X)Bc%Yd0XTPXGI&~N65tL6p|R5lqyPD!5C__1i3Lg?8TQHCZAUvRaN|h zeL6;xw;=42K5)e3TSNDIhiU<_Bg9MLN)mPPvN;Zo)0D%jd>gc?vil!rf$kX#7x{+GmxN=aek-IvIVtHwS_OBi@RnFex*Y>(JGu`Qq(ZvL#^ z=5TYBe)*4C$m9p{%GW=;Bv<~yf_@z}Y5g2qkX_82{zu~|0ldHf@WJ6zl1R2#g>bpo7RN;LREVldt$crVe;&x2TLU?= zAJmAd^<)XOxE;}YgjhTx#O69j<(oY?#SEd;*IogmrnG@I|HJicb-Mulr^O{vA85nzjewuk`pUnW_lW1&lm2EY}Zhg zZUPe3P+MJ!cERofO}iD@p{w=XYzK&g3Z25lE6#i+@GIke;ucdQdmf*&z!Dj z8eanMF%!k+%&K{A%RRYW?umu5tJjaK8InMEWakuj!Vua(si{1>*0!K&XH&|-;f$D- zbhnI(yjukc44O)Cr!PsXh5OwV;K|i+{;roFT#6a7)jmm{2m&9-U70jVU^QP!qMM_a zn9dOKn!XRaQq+7=AbOUSrTy#}8S!v}uW8*w?=|f)T%eJY!-0fB#ys6mO<%a{*Ea;Y zXv;As{Fuq`2P-^aFUbB9D!Xl7S}+-l!WcOUIZ%$9pki*4q1|K}YOnQmTL}_!66-`k z6P_A1`O=Y0P`N|_lQgxRxC|_5G&`HiH1~3yLUwR&+*p)}kwoH*4ZsZS1PlaB0^k>o zNe&R9Fo^B17?n#Xqggn-;x1e<;g=GYXi!s@-q;+o`eCU8qO2Ocw#m{XcjkoGDYx6w z%DDIO`F(_x09lRyi?~JQh^>fWO*j^Iq1?DKOOyI8D%*L0_q|kSzn>Pc_dTsOQl}Gy z-geH-F>d1QCyL*l=BT|Pw-`q;2h zdS#lVuo)z&+HM9n!ZALP$hWd6cWiX#xZh+|IqIH6N7fTJi{Zuzsx9|f2Ls~C46wT+ zOBWo*U7U@&nxjg_8N7nJ-;OU<(vx1camyaC)|BIU*x>bOj3Xb35-CEuT^K1V;&f82 zdT-C!<~$>ebW*!S*5j%PvnsWNr)?DgqA4-mFMKl2wX~=ym9V;Z#yRg&0TB)3xX*}oiYC@(S2IyWPp>~k%y4k)Vlz7amTJ?rWBzwp4%F+`?oca(MNX^T9S-T{9zJ9-d}qDT)`Mp`>tU&W{4Q8 zHqU<_u=0u0(|4pdXTX&yrrHI+E&ifpPxY{v*!yCL$8Q2M}hC{%jr&*LlXoI@HKP)4IYq4hp?VhO)>_v;KNi>C3Zx}!OlXg zBBVPMrQ|Xut3Y6oZumI+C z$d0xLGepCC;2A}9tR`VKd!1I4Y^XUWD+c(rr5Ff8h4##EED4Su#$cY zUlsRi5Jda9%!^IXM-2msD#2?hi8ibCgono7AJ6u;$)U)qQ%)5z37^ISSJ9Sq<$vSb9*XF$!yy2$`5YNUod$75Be05lya9bY zrxH>pOS~ zen0IzxB%rUyl9uUDi>bPPKL+f3&`@UX=6mlV<8V2kzm}6`L~daIwgMJUn~V2+~JO` za!&(C*6>Y~(Qm1MidIy{OeWo{`!HuBBNiWF6vO1&Dz}VvQ=j@8(1dYz9zs1=?0(P` z5FkWJrYpfRLW+m7{$o6-?5d^`lX9s!F zoxRk}tq!Xob)j!K7LtC$1-8v=p)}DNukzQ^%t#p2T!4kZWu`0?Jt6eF$6dOa$b@J} z;W2ku3{g@8=~l@N|Ajaocb?!N(g^-Jgq{Pgk1Mbr@!4{++joCCs)?y#)2ju)Y`gZ* z$?#?U<8CBA_N42HPQG>s0(&hV7q@^1(pAV5Y)XY`7Z(#Vu~0||BLDXS*U-bWJaQ(V zt@%0FLmsHR;s;U#crN9yy_5pIpQzr^Kp(9xdqfh?&|VekYk7xOzsi=&DmIu|xm#At1f_;3V|493XoqLc za5!2Zg5lxnnblE=1PPBJ%nqulaTaTmIgqqt3iPn5*_wB@jp`uz+zM?uw=ftxvM`vJ zgQdrpd-P{Mf8PWSGElw*WuSz$C+79HXy@Y34xKa*l63E|9x@ww$;jlaN6LqY*gHUf zQZ-|hJV^lqZ;Eq(um)b(2EiQ9%Ld0ClGUiWtkRz-{?Dw43UKf`qH zD0@IHCaWVy?WqRs(qDW2LhCouo&BE?VSYH?R%S4;!iiai0aB*PA9`V3PoUHzs9BLb zP9D=Q17zWEaKj`sLwf;-NVk-_i+c^|;gol${J=x`&%&fKiem%oo-$^gK{=<{`*B21qsMr3X?vos`p{neSXZHj9(=R<0xN_vlza zszBO1uM|bD9^W@pB4knV>TTZMxK;MqIBa`Yk+ydhMFm^Po3;Dd`Qa#E5?o-eV3h@Iv$#2rLS*-almZ-hEzN6tpct_#N zDP@DhqRQ+5^6}s+lwazO!4By+cLiBsHWUBWq%mo1?c+`~y=Iv|v-|a9ZoT2b8RD|m!b*f9&R+PY7Mr6= zCz)Z{o9bFlI+3S(pu;PjUWLo{tCG+L@Jpi5(IRl@T{9lj!!n;UQE?Sq>OH$e>fm86 z!>q77`eZAkA8#th4p_=ERr+sXWR=> z?{=FxqM@Ad@LnGBR7;NlT-MM zEA-VBP~;w{$Z_Y|9k(cRL&WN8heZwZN5!m%Q83nwl2o>{#nP@Yz(D<4jWvO!$u2=y z(bm7Vt|LCXR&Gznh^o3M-kxSms8U2|rv@xtg}9g|$JkZ3c-1Xw%PKO+xlX0-{_-%$ z!n+J6&!Pb818so75saTYr>i3jBAflY7xQkTi{;}bfMtGg;4TqTR)nz{w;W|;a$4Rf zpC`(c?2^G(mgRMN)5@a@fnxj{_%pHp1N@Gx^L|&+G{hBei_jrAxjxS6P%6K8d-Z*7 zGiXhPMi0y!lH)z4&Bs@**u zWfIA_H|Ow64ekw!72AuKN;lOHJia`$wp@3pr2t#uC@pVREA49g^JGxRvugV0x=Nl6 zjOZjk;%7aoW11ea4qLQ$h@L4lg>g|)R^LPr30zhFtXy9Kdo7=Lu}I;oREiOQJc#o< zo$qIMg%JKzbPV6eFSL_l(9h8L?yirGxMj@3VSgRciQn*HrxB|g@QP}~d232>T zEUyO7pTS)~=P7{PO)pqq z=H-gO)-->WF?PhKU!R3Cj)R>vZ8A47o0foB6krh5&if`Z!&i0$ zTI=TwhWyFU!!323UKx5;)F56nM9CF}lE;nUCu1HEJ}JMGjTF=v4aIRn6Ua8Z*%F~< zrN!>yh`Hf}eak5~u5nWsdRj~0;$G2w(V6^7Ep)VB8!xC{-DQb5If{X7m43-F#=2e} z0o*%7SDgi-jXJ#|fB+@EhW|?g5q3&cKDT7)xJDH~jjBlOOFBNkPdWz2+cPSIJ_ZZj zDkLjFZ($hMyMVqW<8L}a!ToE?OUv95u3hanEslgwDB%ytQvTrxH`Oa#9a2?4h%hgx zeavch{{}biaWI5?-!kaL78-N(6KW%^!}5s9=Y@`+5!!HQeiOdZjG_F-NctVvSm>_R*lCS3DLA_HV`Fp&GJ31zV)nIJN$}_T8 z2zuT-Vk&V;Fveh6;0WWY_qHE906CxArh#T)TOpzeHk91s6?fkd;N-`2t|* z!HzcWUaFkXlBs!KsCNFbBbA&`(cp)La0n2XdL`?l^Nd)giPj$^ zK@&^I!H6la7mwhhQsd@2O888<@{b3ry>~tP(@=jNiN{MBYL3hfnHR=9V4HNIP-iY{ zv0lab!Nu$zmVRQ`hA@+Dkqfpiv&kOy3K($kh?sKc0h(AtV&n;=QAQDXwF?gCx7&@& zX+4NqpZ%c7cW7(Ec;F%5JVZ(a2+SkhlhtrXTWY}wtjHo~^)gIiQ(E5YxZ4`v)eVOE$*87Ew&Ehu4vpp$}Bc-?2}l!S9w0ToG#!rnj^s1~X|J5Yg< zr-E&NyTXNlOznRqI_p|}R$-q>8E7R$z(q0)nMJkvg=vge{%}2eK!KEc0NFMs4_DjU z%Ck=3v^WB=QA((-tR^6uO-pOeyeMa$+50a4(zFD0A*bo7YWx_C98r){3t? z|Jc6f{e#wx%|ah;=ox9NPNwlhDK@39>!2-VX}U8lLZ`EI$+#vIg<%!AVPgv&d!^8} zxGPCKKpt2sX4J?EvJcGrkNL!`<`4ur%wIk2ucieliF1=Q0nk5{(DwahUHSM&=vd#5 z%_Tc_50)WbxncjhTq;tfiTCZsLfDOUDTX@Q*qk+gIENYYX3p<4Np6Up#anAdSvKc2 zZlAFfcr=#YLudKbC^wn@CfWY9M9=zOj2|TIqNs`-Lzsp4<22!+X|IiS)BZKnxF;B6 zaIkP)-6oJIm7=4a%sL9X=P3HlNCdo~Z5_>rXnHXbXt#A}N>Sdb@aYSO2U{K9Q zJYgy18v8hz*=G{nqoWPsF4HgjmENQf$TkL~i`(J$&HLTRtJKA3V>zG&1p@yMdi6(s27n6rVP!ik6 z=sQ0I9b@8c8ia)^R~J3EKzwSdl=>x4V2#h)_4gSO17!aGm({dh{e?!`cjud03+KzN z^DK-J)l0}fPL`C99Y7_R0~X?R;Be^X-BdZ;kHN;I9K;yU4D^W<;bPp{M$c!&jbr<5 zOKl0H3jL=t8&K<91Y{*QA?;wwaWgs_2cvh;R@)V@DEj-5ng&*BOff0oUcDGPW^J_y zOuq8mgms`%dg}JnN$=5Ju^^l>b&D_n+>rx2|6Mw?;dIk#0kd!HUI8wY1DFpoo@3iCl=my@lOc9};Hv(I zvmHq!HIg?c=qNB~I%Ev`r<^1Z1F`gq4-2XwQPquK+t-)%`}+&9cH^xM`>kI=i4Acb z`S+w&A38IACx@5WvW&7uv#8yC1XF z@ki{Ds$p$E1MFJuhuNPrtzF0-5ld@kb8Q>9pItz!CiQRKN7LIvQW&P~KlGNa0&EM2 z^=ea;Q$Ze7w2cL@fQP~&5g`9Y|I7lBLOuNyVhQjyCMjtHYjDfAN`FL|GLc9MJBLmt*Rs`*wWeZn)RBK zBY9=(Kn7xtxJ}fKEKz_Io!Pa}c;5F%uc~7#z5NRwG**%skh2BU9yj=iA$c-qt^TVN zij_p$n7(tS30#ySt<{6=(~F!+Z6xH(6udAfu`FqfyF`K+CuK8N_Eq9sO69V@8jWM3 zOKotsk-CGhWh=vZ&FXRO=kv?)M3*S5+OxG>=n4xz*pa;3`-1!Y>&?B}j$6!~|KWrKY3*-^>uk(w$!&1G$xNiXJ_t*9(^ z@_yA$^REcG5AxYHDU#F;Mm`I816^F?RH{-o_Cqz{8nIW3DWV}k-1Z>9^!@LvV1ZtD z;)`CyUJc+^Ex%7gMe7sR>sA{^gNE|+XR)+<91B3JfmJqtV!?E!(Zx?k_UxT~a6b3O z1DSF@vx->lY$wa;>sZ_><@E*V0n1~@d`u=;VP6ZB$c}Zswm|mbhm-|Tl9^9dmG7p@!elV%HQfhm+nCd(zo9-VV1PKU zyhf6oy|(}9$)BUj&%=JbMVe!EQR^Qjp$U^dqs z9o8SsgZ*+Uf6B{z!<;|K4m4>36d|@pLBks}i>Rh(u+eQjAl2wDWCl3`XLYRSyrVKY z36t+{w>}}LXpBkhXi77ps^8T4d~2$9flU2>PazPnZ)gAlO3Fl%fr(C(`Qjzo*zTp5 z^3*>thTr7K;P=|m@Urpfz-wNbcdR25{XpNk8mb4MI~_e0_OCyx$yS>Sm8JU~d}P6VC#icSOf~HZzV#+X3=x=B8z-}f zJ-5Vgblj$Ue1r^+ROK%B-4QRoXx?!IQ?!VsjIvv-}h zBYuAtN@)mj8lu~*#NwnoJM!s>MdMj*%<;xNV&;7;E2sf!)k{|1{w=UBteD{Mlf?qa z^!>+9lAq&DPL(U6joXtGvZ&~CIw%y>_O6c(-_>JAH*Q06Q`L)>AfC zVi_RQ{~z#FYvIq;>;L)SDpl$XW}bhK!L<23D$sAi+yDCR`W-0f3}k(C>e)G<46D*0u04Poj0@FU?&L`Y4V5DpzI_6B;9#Ym{t4J*-+`EK#=$x2HV^Uui8z$1cma#D4LQVF#KpoDWI`^{i>_cXB7k~*^) zPr|rW8;qM6ul)@UQiT&Q@Wz-Lc2Nv=^!cUqnfvy9t^QiNu3Rz(xmq9uWrje*)Mzff zkiGz6`d<%lBnQhT5%y%v>NjyK4w^Q7rPG*$9zIbj z=XmVO_$6yHn(z>bUs4tt*qjWYQwZAc@2jMVA}Q9pLO|UXisQ~4T7K4zD;|4R5pyoG z0QOiEJ{A6IGDkQhlx4`_iFMyy zV(}hB#s153io#kTb_yx#^M6C(XgX3tTYnQ?r+10M<6xi{}@Jj@iGiYEH8u`4B1*#N!Qx-Y;7AY)+X8?X__Y4`-{FV{0D4?P^0gj`lPO0NZ+Q_$RH z7jir=Q!=406qZ?{qa*O>k^v-CQq~#vW7DzG3(3X#+Ci8lqn9Fom_)=A_rMCz8*^r%PHl}hl)fa zT|b}SttyizfviEn9qCNM#J}7Xa6U;((2)_$deqGb#w?oODEbB$xy&+n z^A_<8qenaT)|_d8Kc(DRlntaR_FdZyty{`GG!0GcXUqs-dy5k<*Q}A z-}jX~GZG2b`JU!hgf8umVk?xDyUZH2SF#~vIce;d&4=3^HNfE;j$QH}6gm&RFd;&~ zKC8nt(#s9jyA*HFjW_z0xxMez#R$s73iSuQg z#X>?l2NL1I>6!ODJFKt%fWyB4g)|t^YD9a()ZSW8`3QJ7pu$tG%5v4wjZ|3qth(Wf zo1eKCWOvJgGtB=cst5C}z8^&f;o^@kW&ASk#@G7hLvVO|UxY~}?XJ)4T7l)4dNL%B z8Kj1wm`K*JTI!`_I^y!-P;7Y&A*?CM8Jblzk0M~G{OvA zmaS5^Najjn*~`ObxFTq;r8)H{&)VAk6I^svZ8IySC+7)q^BuWQDR3@4$&c=zc~*{U ziX@OS2OFHiyCbBGLJC@9Lel(-BrWN(6IK$3yQSWiuH=+i*(hsd%Mz)-12jUrM_;Y@ zaz@H^%9-S1fU=wUm8%n^g!2^2^QCj!T&uXp^>$omkV98d8bi~XIuL6%N_AmNZti{x zI?P9n8``Ef`kCcymh@<|+A|Uh{iT8BcF5m`8D;}UF_8vQFw%2#XTICULnZX>Eh@~1 zl*pal303q(0dGd`32nMWMvh_){#7aQetzeGMjbhwK!3`0P)`?ZlYKfHLJvg;Ow_Bxpv)YAEK8x=bG&MUuG z9|mcX_dCRqCC=M!0w2h*8Z6otT%QuM7WqXpL2qkMdz*14Yn~?W^95-Tn+UYo`5@0v z>z__|HbCaUKNf(-tq&9-Ozn|42)HD{c?<{@-rvw@W{z1b*gj=~Vxy(M5|uecQ-foP zJn2z?>_TKqVfaPslbi+2OM

QA)AiWuecMciK}CcWI7sZkt#FS!0&U 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

{yiJ%la^!5#&7O%|}InVZ7*^s~&FT*}btU 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%0A%$5RLDkL(;?zec_=o((VHZ49 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�Xxy39fBZKAG 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

  • W1ps>;c<~T+6OD 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

    (;PS=oK;%vQKJx$J%H@5EwSi)GlhC>7K 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

    M`1Q8msk?G(xC9_<_t;hNt3C&j%yKPeSM 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�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%0D1N6C{j;eXPVS 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�iZzK#au&Nrvl6jUzMl)BgK; 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�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

    __Ap}@!Th+c@EI)*JJUP zvmplTBf_CcAQZj+mvwblXWL3Li%6UrN1^;yhIZFsj|I_7&kf;es5L2U<>r1pYJt~0 z%9yiWs``+!dJDKsU`)OZniShG4z_KB!rQhaY|Sic&<@Pp z;-aXBFSdaC&_K=t5ztMqH1&d8B#~IL@ZR%w*ZQ=R`-7Ak4X+S}*V1;C7v?zssgi#M z+vU|QT3@>Sj` z672B2z>I-(S_z-R_N+c<3NUEPNfO0O&`mb+Y5z^+S8UQtQ+i8>Xaoe!Set*Nd94=t7s`mt5JsoJ@W!u7I^iU_$W#=-;j4Hf|M5ve)v4X zW&{f~guH#Jzn=&G>(}qhg?l-X`^P->3isK(Gy{Ay3+{JAlNg{Ur~_wzG{G}cAg?iB zL43@*tsWvgQ)(8?k`ML7N*rPj-~b3)P&4__=j4FqGBz0K-!GLdAIkjC#zR&$yvK3LMo5M+)Q3A8L6FOv& zpJXX%O1BJ-LYOKX#O$7@DAzc(2d^)vgDMWzmR+!(i}5*~?RY*zW-q!m7Kl=Gjj8R( z6V`$Aov1v6dxpJpLo*@bJXWsJd^x5k&w+E%9zSNliFn&48&i|c3$Z%ck4 zibpSLIE#lUd0*l`*_W7ScXu$v+0E3#$9~QOy(ghBbQswQ^*`SE@JBfbvDe>Avm8a~ z_!#UDmiu`FI#aOpar;H)C*V({GQj-PZTOubKd_}{)xwAKIblMjm&oAz6bKKj!>NXY zqW}N^#sQzRbVh$B0oRCk$yGv3$l92|b2(7l55g@L0q#zH^eBC26n5F&D(cW`NDf74 z;fL_)x$+N+g?4!bjhzGqq?44PO#0R{t>_k#yGk-p#O`EakI|t*^xU!e6qm+A>gn`o z-KG9Qx8)ZEo3M^Rv3?JiTZ*!Q*caWYcP$ecU}T{a;bwB??TbvLKf3*x?|8+}4EQg! zRl#C;K~oVHIPc1197@8Rw6?keX!Y+h2f$1y^K=H5?6_;)fMZa3;#yq8ulc|MG#9QA zYa9;4Bw)~BOc@IaM1(00X*ETG)*`s=d3KqiNY#aKH;;UUr=V$yE%QU(rQ18r(BoMJhudf`c+9up`cB^8U7 z6Q)~;^%O)=hgUaB-Ymj70yC5jSJaMM#xNWOL^kzGnq^A*6DFhT^u;32U(9hb7kqp$ z)%Jczr`d}l_4DF-*4S4+qW}ARTYlY~E2_Nn1E*yge;%@sqQS91fFOb39|-m*m+o0L zRkwg(mP*jLP+=n7N*EM095)G0I>n$PZLqEGH+W)T00gjW1hGLy#uk=XCoM_Q?j1iD z?Z1KZ&V0zPa2P`=jj0f*7E5eE4aWXXuRc)nb=-7-0T2N_V(*~bs9okh9iHB&w>s(Q z?U21Oo2j%2A!Ylt7vg*Ecc;+UWBL7`<{JwSo;I*+WsF}+=-#E2=_@C9kIV1Ka(x4G z#0d6xAOTU+pC0do$P8V@#Bcxr0N(+hwM1toB9PstAW@6?RlrY?nutmZu80WEi{)B< zlnkV{8l9|vH%8mQ22?-*|L=>*egDonjW8N=SVY=^Y=LJG00#T)uoJAv&l+VCz%^CJ z#I1haPY92!|0M|z(8yN&wbJXNT4_{m5s1D2_X|s&-V8*H9#+?yu zaoNcTg{*_4pgeCJD1;>VponKIm)Pm$nQ~)qKg0_iD;6Sw&;e4XTZboHRB`3;5yw<4 zq-_eVx>7x#xc<51s-?>~Mg}E~LjoR8ZX3WO2`@Ru3#IFz)A%@N!25!vE_ML!HCo7l zJg{o*cHEx&KvIb_52f?WYYWW`661RQmh9Vdju0TFAV7&^qlyq!fS#Zk zVG=<&kB52YB5F05kW#rM#%e+WJkDDus6;>vK-6xh{#ji;gBK!zgawX1)ps@pPs01Q!>5_vp?`GSj;?NBnvxjJdhqE9BdQ#T zWKRj}c&)a$U(J6!q}C=Sio#b`r^dGb%;2JZzh{PN#AZYTnjx5`OAK%_=-YT=tSb&? zu$__7G*h`I?J2DCs9Cl8$T;4}n#U`N-4w2?ZakNA!%|BqY^Ku_i{5usfQR6gJzq65 z8U(QkUp72eXWFhDCNdz*iIdV)Zd|P({Ja2$G=mJEGDi5@l_8i19cq%Q1@`dJ)nI);xdVi>W*sC48~} z7i^+-;ca)YFviI?CFBu_grJ%;5Y`dGlEItt+%S)sznGMVaQ^sc0EGoVS|y<&Nh||G zRp&b4t0ImV{mgiA9u&j&!1u;^#GKX{e-AL zwdXktqky_G{hQ|rA&4=>$M_&D>9LW0NLHEgKmdZwRgOlCn)f)dKunrR;o6HsSK51E z!PeHmQ91n4F^z@}urvr~*O-+Ps84{N?4vc8uq2^rwZuo3FmEHi*weG>S|%;}zR4Qa zdb%w*Uf0nnktGQtmDz>!GT(^|sZ%e0=gn--G{D*(6(Adu;+bdWzs+@h`!=1#yi~e~dM5;$#R!_9_Y2 z@kcOBNUyHJ|1LYND0(kI2(3X>2?KI$fks__E}xmtK~B0VM9?K%tPW?e^vBC(3HatG%{IGV`kkFCRE2r7JvFof! zKOY~_X^k^QC*mh#Wdt)Cy0B}aVS%kB(YNr6#qAmL#$<8{MYf?pA1khNI%P1-z{4iS zvRmh%6hWkSvb>mVc>+z>$2vOrT^(S-8}L(QWMom2Q9q?uScU^xTE!Y=53R|p5vK<` zP5MkW=c%>zq$csqk9&;O6V5PNZsapEB+Mm!wj@lIFXyXR;m+AP)DqeSeiqrFPxJj* zF={Ek8>$@_p42Nv?6C1S#+Ddl-zufKY-AoD+Y}iM?%O9SigSA64j9Mu*=~vmZ1-RO z1hA8q3x_~iZL>lj2lbTV0K4JL?P$n(=fWN@f^{J}_hRN=&lo@3;9DEMBVHa8T<&Lq zdm)d*Lb6%gHAl_TT~1kj*X~I&5{3le>ds0{E4>*6K#D@fvBuS9?9shp{KmtOPf2_T-m9H82vXi09u== zFZ)rCDPFjOqNccN85W+uIbcZy{2dh(iQ>3m$?K~UV(6ozb zUp74@Tx7cSuU)^k`^FD2%}co>4U=JfIH`Kl)N}Zl`J;{Ld8HG-vqZXEoEKH_PRS8a zmHMbMSDuFIK+R_=K}b%Hfpu1`qbR2@h#{ZS&K_-1os5GjNFa3nPEWHrT{3V-<;lg^ zYQcFe;*&H90^rygDsl6|2T7{&6Qb8#EuT3V7vm)yE{rGFkzam>^Zmh32igtf(~p}- zlXXF&c6}&%mR+G_n$zn?lj`oi`G3>n1ljAHZ_(eRWb7c{fy}@m!=H%2Rd3|6(d^9( z&0Trnc!`|mTw?o4HKDpI^@2rnBLpJ6HX)4xHJHE3WsyXvYA6C^)c3>`@`w~_;)Ij5 zG!KhoQt*EN@$*dG`}<>T?mwi+*Cprx3f&se^{ha1Xws`@!BgVd;2~QkujMY1S#-*j z_oa_aE14>e(~T5zAD7mwYW0Moap8)0hVRus6BqSG`PKmMEIJ&&L;5d6uBZ6&7E~wQ z72t$t?NqA{91u>!Ukw!UAuV|P3koU2<*A0U>p*+n(fB=#Z(gUq_N}xq^`%6dAhgcx z3ehbR^7zs+LfQp@0009300zINc6zB=RT^m%B%Ygv+kAbT{+3<>wDS7K!GB%_`y{4= z+7Ea%X-P7}tbBecs$I|}hG zkZYr#SXWpRGrbb?GpId}Khbv%9<-|64}0p&#<(&-NF zFF6!#g9k5Bpj4FE*WefZZ_Jp;T64Flw&l&dbG*A{V+U zbnUpYG-98Xvh5u^v|CYeT`%ELHal{AdQ)$S;v9W$Pf9`=18>GJ0z(sZICr}Hirow$ z9%2=KiD)y$Sk{lX7mKX2suhiOzd|4;((l`vf;79B&}_ETnU!uOtd?w5I7X5pSZq3$ z+4?`_1EKs1XdKZ2EElc>8$$}i1ELUQ%2qGbVPu8j0!&r4u(g+35xYUZ&H2`j;JWMe zQyT7h=L3jxH`>HS;>yb`>B(XOs<@0}8pT1xyxpBIGbTXH$y>`&axdTblW5V30)tQU zTZ!<=0YXHT1vKb_o#(i+6b5qL z0^C=eMW{P%R<}p%@cKYWi)GbZX{%SBS&#^|miOwKLs%9L^3pu+2(T-P=b$XTail z54`rfcjiHz+%Qa8l(DLuGu7`sSFHO#L8s50G_M$dWl^3x_C!+?ao%Zl9~0m_hs5-} zJv=dz;~X-(#hR*jXdBFX`hH)>`tbg_rO+foOw=zJ$8XPh_#Lcjo13d;(1!W~@TE=T|iZn3|HcmMzZwgI2lL}w+hE#(2OoqREO zz?(mWBmVI^OH*??)E(jw+OBy5iU=MrG(bSR#B)6H%FtRo3-_@IxuOm!jzYdLpHud| z2dauF_sVaq;o`iR#U<~&Mg`U|DqMc8o!+FSd3M{aZ6bCX?`Kd7J)qC|q z#IVfR0G3*mDGUaC2F=xH@~!ijz2_=Fpah;6>nq}kXsyW&wL@NeU|8mCx+2fkt&iIq zPg&OgsL$?<2d!7CIO}HstiN=p2 z&(UR#4j(Dx#6of9L{$-fPOCYCx6eU~=Yr8euOE??`}#M#-a>mv*kv(BfXGpyoch9e`h?cp`GXx2?1$0*V>+x$)Bex#)lGHYbI9gP7jfvJ?6daGEJlte z1VHL_;7{*0Yod~tj$FH8v#SAvnhxC+l@av-4U*rjgs$L@6*t5hL@z7Ul8hr3C#o<% z1Sx!6jPHdpK4+Og(eO_^G8_>A1ONwM5TilLEO1he^ohx%8r3q<&qkNMF9QM=DhH;6 z6vB!w@eB`D?yK@>j9NP0&ZF9xgF5qO#D-up-I2=acwmNZ)j+_9a3VR^FelepRYC1q zC#Nx>nu=u@f`~uGQ%yNlVtx{CqHap`K%eha;7`u-;z~^B{LJ;v4-KZZ8bfT!59Pzp zW#d_QnVpGL$fY$mP>XwRNF<)5<1rhm7=F1zZC{OSd}1YhJ>EVa*^$eWX~kJ+t-@AE54XZcr$XcCU!RpA>F-e7Mzd`Xy>HsAo}fu?G2XhL%O_LeXR^F@I*M9wi8~*j zcHVx{=vUvKE;n9k+k8%v|5W3|_uIru1{SCpjgd~%bgOGr^wt0Xi!4X{2N>_toaGs} z`UR{3`jQ_sfY;%c2v$`Uq;PMktoSD*j@0{{R6 z0009300RI30{{R6000pYfsgSOF|2?AEElc< z8zP3rfuXplEEp0710z7#Tt+l(P$+d9=j+gwoJ?iH(2WQ1inr9XjpW&#+dwWgdGlYt zqGi){G?@?ny+*9GKTQ*iMQ4FAtHzw*5%JPYH_0g%g+qldgIt_>V*<=h&If3n-!MDh zw(R_c6tTrWbhwIK+c#}(uz>5tMIt)#;7jB-Q~Wyd5gv?D0}%}5?fio5wEG@sO6;Mj z5h8f~Gw!)vR;H{{HqcQwSykQXUazco-+I*d?k$lCjFpQB zn1NKgj4xBL<9;Kn@A__L*e*VoUr!Zbhir?}BFE!utduc`Ml90B05AXy0?RaTDHCGv zbnALA8}Wa`;q|665(U~87i@Zb4yQf1&RAp;EU49g@c9o<|K#mIb^r#y-WI2u>A%7N zSm>Wg|M*7NCx6*qpM_%ekL$Mr0$}ltt&&9L-#&;q+1H&97DGzFkr4 zJn7BvbkQL}AD=B1y*5x0+KB=&|CPL^wpZ1^fiwH7TkUU6<5xoVy_wMUuj?EqaR(n$ z=+I;G3DUC-%#284NjNu%E#Py=9g9Q6%r}dq0w)iDXB9Y=ly8#j@V*U~OO)Ylw_B}5 zyVD--v=HI!ioHXm?DFir_eZ?wwc@)Wb0Bns;+kKLK=zL7xpg(fJ8;0&%5v^EZ6lE0 zfp92M*@hzH{>)$Dd&gRVXE#%48@Ni3EL*nj(@B**0Uj5w3_25r$0LBaV00H122f&W z=1?VtxN@5)UR~{_T}u#esTA)Ii77+1jIf6yFAIGkWv*}oF6?)5VbXv0Ohde&dsb%L zCopgH5f5OHbBe@vQXxWCTPS(&h>uUgdS-YnBHxmL6h|*;OXSVrM&2t+)ZBnKAiT3{ zX&|qoc#hwrm=(ywlk`8G<;Ve{+dr=wr>mI@?&m+p*5_^1Qk3O}hLkW3B^k+MV^yi0 z_s%gX&U29QWP@BdndgOBEM<|Ta>rKb`V2r-sz0%$H+PHSLLgP>3dBS?s< zAeTUbZY8bB_zu6)x=$19Jn5=OA516iGpK6*`=q zZ#UBRI=gUSCd{&o26D<|o1TxItLD7t&^~+D>P(4%TCxfV&T`^-et(+ddfuEyMSuc{ z8k*eAJU3^vkFSn#6as}e*gom$-<$h}umCli?w`N_00lKcoBkL-006m*t-}J2@zb;d z6iiVdrd3+=SV|5?QE|L2rnPsR{G671#xa99;tFyHOEMG~30JzEj0 zq-(k+4Ne&KgVHxTUoGkw2BAD0%PEtj$E2t6AzBu~lx^BZNgyFUV9XxF=vTaHB23U& z&kVmh+#IN4g1-;r@=P7IhNgcKD{2BPhEb8eU$MQ2O=2rnE&~6xVer{Q{Q+cSwYiFF z<$o^0YT*-8T%wzc)DWBVLBv?? zAL@qWw$@0G4#NoS*Pf#+7q#AIc%UiF)@JP_gzR+(AN>^Hf>{4rsR{?BdLQ$V@ak3c zSuus+(*q#{g5+3NWH9` zZ_;6!c4x?uhu~O@I^(dSiUi296kP^lfFU+3k-KDFX>rboQ9YQVIBl4TTtTTdNT#Sq z`U08`C*R{^0GI_^0YG2)rM`o&CD-Iph6V9h4UJRP%#C(~H-Cv^P_dP{V2?T>=BvxrIk3P}sW9>ns~4H_K@O<%(IZxlcbzk*#8~VTde(50C!5<{IY+X2BM=w^>7I8RIS#0 z5>)AHP|N#su8pXE>1HfP&`i{>33G{&Eeb=yN8>}Cle{PvU66M@Qw^Yi002gH-SL=b z!tyfgE#ktb0#dW;et#=?_p{4p{P5~kbJ#qY;JoS;Vig*|b0#iU15?VZHBMS&gD_6b zdt~`Un4Hu0c^9IsqP$mB36ZQ*Hk!1NmbcN`wkO>SC4(kTk&T22ePI7*B}s{Uee`hF0%D zpKxAKahU2q8-K5)KDwUBrpe1)OX3F4SPkaH{qJTC~!OhJe zOTUk{l6meTu6<|>+yNCZ0001}L7p5%6+A~1HHBjhv}TH97`CQlyzR29%)jKc5JVMP z!jRBj%+qY^{*^l_87u$9@l=R%pBpMq6s!!x!#x4P-emLU#?jcAE;1G$OsBCJ!dJ+8 z2mWKxXeED&LuKz$^^l-5g|9UFb$q+p(!80_K*r1cH!2aberLgO3!!i^Y(tc**Sx9Z zmQ+#!d=A5=#a4iePy4lKd!$d>RcWv2iDQVc86}ZQ`gC((=qJY}DL^&5Y z$+kOuHuaTe0&fHh4Lp5B;Tf1x7K+pRm(;btL;Sn&T_&8w(y+qzYu=}H(3*=D5q@*K zc|E*cla>?}jb2-7GpsVPFv~|@(s1<6Zm&zaX=~Oc0u_TfVHY?vW22?g?#DyA-nMy2 z0xt2>&Q*qN6RFc^>-BtnT~0SL?irE<2}u(>bTns^-7@H}OFLYEItORfeJj)X8_w3d zKn@>=?>Ywn004gho;!3#e;4^HpIZ$EKrQP15!&bQ9a&P*1DEn^eO`}A_K>isv-bzE zP^SWo+(f@$z)Tqnz)WB4XH?L*d@Mt;C7wOerLL>Sy?aU?A1uFwe2I)@F6&HEQq{sb=8>Wri#+I z*yH@{M#(sIjl;Sz#;SDDf$h880}Lb!lV7XCgG6wM%!LU9+yW;+_-XWC zG{U%@-}DY)1Z6G{ZqzFuB4_%JbT{|zm{rVi+2iF`vf!ysIJh@nvu!xg;3xf_w#@u7 z001JEhMCxi#4D{vwWGgmwBvw?B&e^07z5;hK?=`TTa(7>_})uCvuRkdiR9^HAS%jM zw->Mdcc|`I^}HRx$y+VN?i#sDrFddP4i8`1_f5SuOtF`%qz`%jIr(blchYd~@h9Q$ zkbjJbwQH za+~G@DIEcEA~s-XGx1QpC7WN#_NJ;LkdfAmaX-5|q0rG%>OERhvuL)jk@}BEE>iE8 zt7;%JNR~73Mtvgnj~azzQ6bj=d7%^dpnc_*LP_*MYxgDB$$vqKXIPft)8Fvg@RY3H z5`{7WqX9SklWoP4O$T+~{s! zc3ucwUZ&Z<$H%v;P_(c$y4nrLUZFle>FDzM%P<5KRbSwW8I78&c*dtXBvU85)&1k* z>vs25rse2EGX5L0)!eNqfC5`}-v58vv^1g!22FUaUca;Rbr@vANXgNUKXLN<-X9BO ztRSqWYlpjEPi2WPH|6Q;Ei5)sN}MvPz;+W${K%#zARy3C7Wr@e@{j-WJ$Rwpe`JQ^ z*%m8w;{JQy+gMg&r{Ps&yNac+xaZ=SfwMTC{4oFSJ~9Vu*m#h$sID3C&Xs`Hc6}z3 z-g0;V00#3xnj$o$!6yI(e4l)JtS1KAJ<8`ay@*_$w6cX#YB7=#)7ec-TKpN;DvRt( zR-41qR1!3A>LsSaAqG~xklIXzeB3MQbXT%(gKkEqr`r?&}nzx3>F z-Bs*G!+b@>sPV8EXn-ZjUx4+eqC|qafb?|%Qg>w;pet*AV#?#C)v+FL$}YI`3mh7F z9|1z545h*)74^^H29Wp>eqKsSqxJbMy;WI=>FZeP=TWPkzP_UZ8}PX0>xHry@E4Iu z2+`J@J+S#p)0Hftb7;sk-4>bx+m6=#DBcQ(h{5m0v7-l=4q8|wV*Nafb5{g}4l;VC zo@Gs3odZ-oE_s~~NXQ4y22Jef!&;OL!B;IULuD~z`JS7mzM+u4O_xJuTM*R^Rsh>98 zw@gCnD6z#2X2=X~kQ1_diPP9H((o3AWISji_B9@n@~6_ogico-%ELeNjh zXe8779&+HT)7Y9){*4#W74;HVdm@bgL#Li~+}&G(gB6!bCTs3fcbc};1rOdu-^-`j zC9$4QPs96)K?)CIIlK99viJj!=pLe~Dt5%jk(cV8P;3`MUj~Hw zs1+Ux`{kmdszLLKh%XnDaxVWL@4j+heMAAuNgEL3G|I|$uOPN7Y$dPm4?$$ppxX^M zwy+UooE)7a$c0U?WXTbnIQ*m8X(Ly7-Cz1A;Uk*kn#zYjuE{y8srrgQ3W=+S&1~y6 zi^=j3)=E`U-?pzbzPW>QpRgMPU;`pABxC+X;L4pG#hvz1->8EzNg0x_)`BFpP_ zT#i6pR$7AH>MgbOQCMqH_O3;JUrxlwJkC|JG)y{bg`#OqeLeVg6f7jb00$4y0Q=Td zaaY4jY0?XM#=$8$B=h=ULMTC1eWGk^(k^4ssaLd-Xf^kq-1ndtaGllMNijIoc&06H zx;~mp0YOHuj;3imv^V)OVRO>b`F7CVMtcd<(q6q^p|L4E=uVA|RsQj6Wn~ry=}ULE zbs6U4;ijS4H`^m(*xt@t7OWwW6#WK}(l0GKrE7T$4-+f}Hy(gH@P{j&6BE92`K9WL zucYk#?+%7Q;MI}Qgr{kTo^PRme+1TZv%f!&;4HgVZ!{_)tG-nR_uAWanR|@4c_%Bo ztv?Sf5eYsi;dx<^kE#Do`D@)ww+FQ^q!e9wmP!&QV5c$(kq1+j;rr`rM1PgCP&D_bu0Zam8Io#0tXF$e)wwzVKevm#f}hUISIE`c*x z8NvPRS1U4*^rWAfa$YjG+BfVfg7S5-0Og-LkcG072JH-?>9wB(`tY$ZONQ9c;)`n% z@ldf7q)E!W2=Pm;JX-b$6W~@sTV^wQ_*xSKJ{*ftHH~fZga6pA=@~t>QU8on%U%xG?)Ff`OK`%L|$K zL(9RSc@-U>F#ka*c|@AxEkzG|Wx-=>r@Rs^k2~pPMe$~*T%!^M80VA2qa0)J#~ZZe zuK=(2m9X%`Mp!!h)mi4nhq3)_XJ`10=;m5~pGQZjMioU?Hat63?`0F{61-g!_ss|AgNvk4~>P=zxP5g1cDWJ-cXUjj0I;TFBl3|Sl3-H0s zR~JB%7nNHnwyh~!i&2yu;-pLnLwLk7npfVgN#7z&00<58HL zhjrz?k~`AUVqyx`F08er3&kBqfeek&{R`Gkbx!(5S!Q*9n)b!>hj04;J*>BsFPa0CYIHIpKTUf$2%vlTbLeF5HilDOhh z&RK+Ou^milTegrE27my|o|x~@H&W%?&#Ywere0OHOovd*cg_8?qUokXh^p06AxAtu zwtrXur&+|zT>vLIL6WECKsy9Y+<9{c5crWqHky2}{Qx7B`B-W`h1PI@l#NP|SuQ(_ z?&C|j-P`-~SV#hEyQB6WBE~3OcL)buHRMUu+H&!ca1c`-qf-qoeJwT>YEvfOMz-%; z(Ch5F225)#H}$!3cBbm987lSpemvpu`i@t_Ay(ci9}IJq>TMNy!YX&Y=lEm%`w@GH z))m=W#=7Dxk__kS;q%Niin**S8xjOZO8Q^ueB-d&u7@)n5~v%_Up7fcfB*miSplAZ zbVh#{{-`}!g^8MX);yIuYj0!#zb1s&|G)tb@yJM^T9^(-s%F|PJmI&cZACWCKQ#Gi zuGf$#%Qc0|!F_#OrL-!EA*{z3RAbq%TLlXP=<6#J_GV#;d@c0gm@^h79ijil-&bgD zM`ibRza=C=5AW=P6{G2NuM1#Da%Q*?Ot(5z7GZAT=Alj+_XB0Ie^OZGH5yQMzK)!2 zo~~30pfR-%3VT??Yd>+}i4f_0&ri7L;NzLu2U0J9OX^`oo9O7TgRg$W{%09SU(KnhdehlkA0g?>nmMbq{#$}C9PIn;CCY870X z%q%$(aN)xo&#sYh>IH9DaTT}>WMNBLw*{1)3Tmafqpr)4*N`fZ>b=UcUZDXl7p_uT3yQ|#pvYJ>6buE!L2-~& zEE5wH0#g)=xkk3;_}nC$)ufO(lNRTe3d6*`-eem02iC22wu-*&VmIHNp01T|R(`Ee z=!2^iqg)O4QU02C?Cmm`^Fy5y!Zh&q)a0yM96w(4KAjPVSImPK6X^ZOu|A0oSibk8 ze~5|KxJqSvBVx@Nj4&2ZhNgGVO3wnX)HPh5Z)0`_dEABW#nf?rj&pz>R!ZEJOhq6k zr)Ga@{;#dR;4y$RrX}NipbJljox|N&bRszcc%Ji@S7g~;ZS^gnw*=;Z6RN48;=s2p zOE(XfsK2H7e@}-9MU*P0G;e{BJTy*3^Z`UwoNqc4uVywBMUVm_t49HJL>X&!++J-y zv%c1e)BfnGpG>0 zF|VjWzY-~$_gSgQ(or_70DG-|e8F1>9}yN@^8yef9D5omVj9-R;9V}-qQaY5Q2k9t zj2;g_Wac6g@g-jFX#d<4H7BhS-hKZEfu4DMV?hb8h)9i=S!H9_Ci#d5M#B!Ax|xc9 z1luYTdkq<^ADRujv;fJ_Fu_hbrpZEZ7c*eMpaAsnec99@F?0DpiGJ*C;R;rM4HPK+ z64rQ$5TE56+R zAU4DKt@;tEAgrFe_m&Ljre2T6x^&Q)xUePNRk^f`kNx+Iy@!RVfDSl^aviaH-I^5)O;BW^h}(7BR7UrN_Cq%kXEiHC1YAa=aC!j<`a06UW`kpzSmti zRjq+DuTRPBoWF&qjV&E$H%tE>4C4r@iikQ7*dW?JN6 zs6(ShN|kP<)H?C?XF%L_k!%^DXDg(*ci9A?VRWM{><)P8Dfj_Wpv^Z%B^SfI0#(VK z?H@O_h^vP@x*{YcR~@Fa9vMUn9ry!v_*ExW@FkhF0U=vr{us%vq`O*PPVN)6&cp6UA3A{jWb#H)Ibz+_iC%3c3VF>Jg zuONt*Ft%LZMir>{+`USWH;e$Gq!;?~=2Fzbm4rOZbj}i!;k&D^m_)3>IO34p;wgBM zRtWAKwW?dZaO81-(4mdoUm*N*ABKewS$SuEtgBqLE~t2oewtCF65e;f>_EhA9oK9L zfh9V5Nm_HCALLkNN85FlHM}im9;{sFTLVA|knu?AV| z_{LIP{UsvK0h)_R=f!I2^9<(-6GDO! z#H{TT(CU2id?XpT@6rlyq`{+Nr(O^v+%SJyozCHRjQwcor5c*VcZEyiAeGF7}IUHSb`~#?JCQwOoTY@}-Iqib`Y3!3Es;<-1 zF78eyvBSF-$(DsBp*l>>cHn5C0Fp)y4*J&`qwbq91B4JOK3LT%bf>Z*ko+ePNlpO5 zJ)TS12N4Q)?|+=L*N^J4?fw`-1Jq}`Tp9-DFFj_E-<_QhlgzJ%AhBlLk+ZUPy9gP1 zmy}LqjKkaC07yW$zX335H=D)#VcaB2^g!Y%6Eb zPR;S0^PpfCANip+uk6=YYvrIgT*G}dn2iN6ewYQ1JLu;7PK0{B?P0i6lA|}mILEeM zLL_jJjGmF-8=9!d*enC_Uyk&m2_#Fa%+s{#49bCdjeaZ_x7-@ssch#9pkfWA8cYFcBL0q~6QiKHgqYFWouF)YlIz+}8Z-kX`eg zPeItkyB~m-zz{3#C$HX{!qsn+pK{`aLFkPj@G!UUfIiIY4 z+QhF9y5%x;oES}LI;ABiOJY(Cn4WBh1 zzYd7Da8G(D13(~#u+h+z)kHn zD{RwM7;62)h{F3G6etJv+0eN2a&nD(%-<;*kE05+XdP;cE7)dFnxJV;j z+=TX|5m(Aoqk#%E#Dr08Xfg-}M+)k%2wO95avk~iuPzn+8jZc6-cfVSaU`lg`ih&9 zvsZ>{K=O=7>#Cv=Fu`TF>6$tVF83Rw)qniFrwN5Fb4J%PuQj&GF=!cpe zM}$_-t(PIcB0}p5tRtEyVV&YFh~}owlArC>UheZG z7Vc54{8gT!bC4&OGSxcu$S5hFLPE#D86}rOzDo2BQY6!8zM(iIRq>@JlaL$2;)<6p zo@9SP7zNRXUM>v;#Rns2whR1MoE|qe2`W-f+M>j~7p>phl_qiXPYl#!&Pc%??ZfK# z4Q9(meq=NihWIaR#x1kZD_f&Q702mJ=qW5zjCJ&Fo+J5^XS@7soR}8>*!x-|vAqQv57N}Sf3Rgw zfM_?j_z`EH!SA8hZ@*vT3!Nifb+b0l8*_VNCya`(P%djxvekbQQEBS4DMP=+qFpZ> zfFI;e8|;NB>d%~6Z#*VDn%W0!1V$VFb^oT6q?4wNj{^0Z`y@4uv6nL3s4nC?TL^c( zFG4e9VTR%nz$!&$8ZIbnUQ_?>c7-o0aSggfZ*2(X&4njc315c0hOPM~DsYN3Wf9%W zRx5Tqj!9E16C;|2-XBh~#;evdD?`Nd@s;ah$<`V%pD3=*yOkNTd?r166xefplu)i3hn zXe`a{dYMV!|0HY)HE zyU%-+v1z(n+Wcd6fB@R_Lm5Sbc(c#jGSbpiY6Lr6`Zp);kAY5LN$bPKb(x5Hk`94y z5@lU=&JVU4OTey98ayDfclqyp}#{=Pm;CWk)|ldHoV zBFuOVCIoYY1)6AZjQ7tKZL^&T!C8WH^v&}!TQO7Bdz{=UVbV=k)voX;n&0f#yq8IZ zk{$0*VcYnHblC4 zgHk-v_>p-K4H?_t+?2I_@aED~=4K}Pop56W>bce^4U6|h_LG+bmZ}c`I--G_st-nX z9RA81PoUR*c){A8T6?xuN%am0o7_DMwTUxO^kuxXWaW^l{XjLr!-6>E*v0>}p!VTLO3(X+Dh5 z=zQmt2H;NKa#pO{mPO}b-EMd3J#^!6H@`8EQM=2b?`zq^cn1okI>kA-@z8t0x8cT4p0#(upS-4 z&VlqEvj>lLY%$=bgu0rx2jJ5k(J(VgcxTS9#dpPqFWrST^?rM!dCf%^QKK)@1jhVhGMHLPBtmoqwz+#{N!)*C-ju=3WTWz4$z$-0qWd-4t^&gyK>_r#SSwcp;tFKMyoH=itY!)(c%UWaT-KX!j2O z(-9Fq-*hV65Pk|quRYe}30&C}MYdc(g)KD~S=~c~(V73%CW~H*8aFsy0gGuw4;DXC#%-#3L z216m9IYV=AA3OD517tAFtIvLasor`{PjA-VKn%&okv6a)<)6Fd=YomrO4ZigG>l4K zA!UnYr*Rq7Ckn#{!1q5B$JgO)@M(M8c^AH4KYF?8? zBS0mciU3e=JBTD)zD^BwTO8Pt4257s0E`?kpZg0;z;sl7=IP~IDJ^#!qd%{oV>um% zuA>hQTzh?Yg4Ff;mwb2t00GuPo`XddEJweqq+McbI!B!4e98=M2zI`~5kED_VNW1L z6KWj^)R{9xB-Y|~ek9?<^m;R62t=V+{-h~`lIkE(Lr%)DB19un!A_F!VA1ZXAn!{O#`KXlN4*I7pKe;v9pw+}^Krb1$I(H>Kj6J%o znaIF07F+o~5Y!*)U~gNhb#D!K&@SOuWZk+sE+kZ+A+RV0Ds!#nAXw|Ij?6Kx7#lf-Vdn2ADY64B={4C${zo+TIR1u_X&n?o@ zgxF*?IWEABw$bm$-XQ+d8l}q0N6N=~`*_`D1Nb7q_;pdH5AC||Yoc4|iE3UgQ(=UN zYRHbje`U5MvvuW~oso4va@VU^K>7tkRv+AupJosS_Ujb^A=u5FdyZphh`@_1Q!eH!F!#rN?4Z6=q;Di5L{8M$w|s)ZVm$N9yUmou zj6y~u_u&AFDExM_te#RJfaw#D3|F2%{+U@Yfw%}%4nQcm)@|6nk6YFDy-)eCf~GkE zhF%W$>$Ut?5Wzj2`k2HMzAwJRn%0DNIa$$q0$U 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�n%qrYd`|L@A z>6JE@E5~cb!{5AEA!X3K(bB{sE&u^~xo7}%1S#}WMdE4~=%kt^84A|b_R2htm)LwK z48DC*IkBHN1O^vJS&O+BK0p8f0|QGCr(@?|_7mcte6rw`AGSw!a72n3u`&JDgLkf|rN z<|F8=0&`1wduEGa6pWGD68#ZZYx|qJDG^=MEX8KCY?7(~6+&O&1~;7n&RG{^!*To# zpfr8}v<*2*Wrk?55tJzcV(Ru`!XMiwpNEYx&bmr{N(|5dqd@n8V5)f`EJ5A; z8$UtmM(VOd&=MhDVuVlhw>uqt1dj&H+~ChIZQi7RPHxUn&&d87UY=}1?PM;?qk)j~O zN;Soh<^TW#000932Y_%H)-2M00S3*-r@V;3GvfFdSofPxOD^vuJThw&I z3D!v9OX`_{$CfPhq)eJ;3dIieG;`5DdQXmp##-QZEte6WyuldN$VQBteEskUdYtB* zyyLoa|3Qd?yR-lN0RdjaAp*&%1}<`ES5HrcIx(^9@M-q~>!wlBNs9A9V|UbwPx4=7 z5Y-uus=^PMC2vFP%1q$;Lm>CluwNtZlQXnFnThXff2(M`21Z?)onW9^?=?Xo#qK?0V5+{=Q5Su-&vp^FtTb39_#={ zKS&voTfWzn+rZM*mD(w7l0z{uiGNdKf_C63G*>$Y^`tpCWGMsyF0o&rK>gWo%003dL@fINl00S?qP{K_A z;&B{0BKws_QG3+7+jN=)D{W`^4Z+CN1dGsF?Qa2w5MTfR0{{(8xyd@PXG#Er*|B=$ ztO+2@Bslc&z0LYKX1=TZDS9g5@QYiJk{{IVt@--gb5cA7}Io%|( zRIC1oZ6#Ke5j{-&R{@HxtJOYSKP`XRETdOw&q^s5@kEh?T`JnG$w#m1CtSx6v8%Ci z{DP{K64yFQ$$ugps-KC5$%HNwOM2~PKyeF7!R9(_=$EKxy!`dSqU*}br^c6*gD?au z7>gdX000936~$yf9*3V{LXl4M-6Lxe^`>6zpYMi$NDzNUdlPl_*c?k0(E&w~>gjkS z#Km8cfDf|XJW|fYFD3!@q_mB1ez^4_z8oVr&1}~{*(2b0dWd{9M&HG3)R!}t>r@_8 z3#iP`3cg;oN_XLW$B(%~Vu_k9ecROP&}LPH(U(yAwy1bbGjgl|HNXa>XWJ`x-#8F< zzO-a0dn*DiP`%&(o6cevt&r3$5BHLmt}6HD^6TEvLD&=rDdWfe@#Hmsh>0Se1dE&7 z!Z=^t4WaiNwvUmCW*7tSNst`T+YhYhIy#8*ZeV(euHqLuO=Rga$XL_t62DO`ekK=T z?j8Hwls7FxsKd}hmx`jKjFqi)r*u6x-~^CFc04!|a@izaK=6y>5ttk#N}+?qY-sh$ z;Bkh6T#uv3i1szT znn6KMXjg4KVX|uX;wNs-n~00jTT(Tymto6-`BObzOTl`NC?R%vs$=&T0Srhz*Yx;f zW)`%rLEyK`0u6vR`AHhfPS2PN4=2U5@n~AzlC~Vl8Q-Bpwf+}YAY3O1qII9!$0Y`N z{%=x!OsyP1WM$HxeVAC~3shdizjKOe?S5N=m??xsAO`lHGobs)B_M@`*|EwhDg$-A z<($&e)|Xe`{t1HoJ#p;QVMFUoCDBq8)98~96!B*BT0GxaqUl^Eb_x0{6x|XimdbR^ z=EfnNlz{5)VGGZ&$bD!X?1O-DF|(0Y^i3n!24?iP*hNt}k1uMPOZ$i7*)#b5@UNYR zQEWR9Q2HPJt&&z~6Ma zrqah*mLi>B?4+IAcymu}jY z*%HM}&)UzDGu<+X$m6(f`|u8a84V@YjAB-mvnF^9hgC4uV#BlGC)0zXuURa#h;u3D zffQg>Ub5eEmWZOdwVvz7ptAwsZw(dfwoMoV^8;mFF)7(h(Jf4OYaL`k$2 zGILJhaIwPq)73Miq2;+cDr_7PzJJ^1%YETE{+;9ag}un!#) zxDZwxX}&sjaG^NDwve~>i2!QFB$*uEE+{fkyy)4*g;gpZk%b{H_iR(j(m&53JdwMd zdjh=?TXt|ep;Ed6qJgc7*Cquu{s`4^#9#E}E`0cY4V`Q+Xv?(Gw1kHOEQqic@++=I zI0%ly?^Wv0GCAw~(PLh2&5Xw-LsD9~gB`vKxi2 z7(6=7kdJBX+|1uzLC#-7=5G8!ps79M5F;$1XF?pF@%bjSl;1H){=M9!p{S9`S9{z0 zU=I4GTQU~tM5rZV6>t3M5}M(ntG9k&)URnmKw7lP|CN%ngQJ5;m&x`X;WN;pCmQey z@C?ChbBN%ll1V3UByWD;AO!4pNZ@Ubf6cr*wNqPl4^*IiAYh4)OVJ5bV%D0VEK4R~ znCIkWgz?#rJ&60i1~?FV-(&>v&MUp~N1eo{_;fXzp}&qJr>U^usMshYO$FM2fZDbG z8vO`G{G&%H%cB>d#EaxC-*COzp1Y+#%2Wz!;Mo@QiXo|eP!GRjau9p>-({7R5ZS)9 zAyu@iYcCxW*uB=L{K8^)I4GMW#DXLC_*BLU%+d@dB;@#$(pw#S-p476$hY13PyPmM z3;VqDKc8f;sw zofFgr_{+oTdzYV$C)1-nZz&8+jx{G_0y0236;-5axQ=qKGO=9C5iC64d!cmpa+zR7 zDtfz_f{a~;MrqIj{nC3`2zTV`kzQR@!Q9PfMZ|Va4;6Sa*V`ZI6!QU$tqe=>o`d95m(ofWd4O(`CZuJg4+QKh0yWyb2#(K<$>y^F&e!Kk>fe%;gy66eZO5M zPz5TC<_2(Q8q(GE6P$^nkfYYX5qRD3`(<7&O%Z1yv3r;r?0Uu;$8@>`x}~JE;T}j{ zr8%^-<8SZ+rPy9PMJs)QwhQ8-r`b{Ed6m;A%PKiSg*2-`juQ#-(oY72H4@G){ZE6y z9szB?z29)#63c>)-I&o+@Hrp)apiMie-sv|TLMf{Nh3ccZ~m5>vA2*{Wr1aEG6_I+ zT?&mxXT=>T2SoZ3MxY`M)Eu-OOQAhQGDldvnG)9cKt97OM7UJJ+8@eLbF*^VzkKL(3=9?lWbD6+ti3T>8d+KH`M4l?IEdmiYs4(wCvvzDzkxe z-|BKhfN{pPfH!DJ1{f91971n^m<^>wVNH`Hp-gL%dHRncT)yjnw`na*O9RA{&`dAq zR#`Bo`Sp6wo~BD~w3&u$d-FwMQ^(MBuoBJ((d(ZH;D$w|YSHU_to=AeGKNR&pI-PV z#3d6keWuyx$uaDA!Z&<8trA2tTTPXhbeAA*?U;4E(6o@`4Dgt=kpaH(kQPo4aguCC zcCx*<;j{|!{rWvJauAFY>012LgQ~@bF_;G6Zx+oST(W$|Oru<*fA@tBmL8)3ql2QPyo_eZj zw5l9^911VSDPP9DWmLq{iZ&)%}9N%E?XI2Tjq{EF)B zorQ+QJ_OoRLp&Iui(A|WcKIs(>STe=Bgo|uYmhz{-CaT~F_}VtMn5Lcv$TM(HMop# z>Xxzxm7N46HM6wiNU%lDGgvmnm#R(rK^E6cZ2z*&`H#mm+)^HiYGz`f=RL;=vC7K` z^TqAbt26wsr%KUPa(yrb%9h7Gi~7HF^Y&K&{+&``pX(E&h11xhYhkR&KFP1>XFz-x zQ6PS5>>q&MHtmWSIwRkQB@3I5iUDhiitoF{qTxbKMiq>kwHbRDbv%u)l@TGKtY8@G zZM&80p2rv?+i&kB7XM-F>X!(jz-oCEK5jzS@uvgDC-b|Gsmm*Cy!f9i{7w3p7&E%< zr9UfAGJpU80{{xua(iIj@+T?70009300RJ1$Ft{YfC^)wsLmbgZBD-ABsLuxbPu8^ ziA!iC_lBXX$$vB&={ZMOe(^6ngnY<4`lqCFnAV)0iS3FhZh^H}rcnx!WT|?J6Ovvk z);nGP>feIv@_1?9ff7>8zNP)x11Kll0wJV>(0pv)Ur)-bG#n1E&eQAt4n5Z(N;0t* zA)#yU(xFH~%mUZPOd*r~IbvU&l-K$S>n^)6ACbhVg1(>mE5n?nWC_R6)orvB*pB_)yRU z@un$5ES9T`IbV%~K_v=n2aTl?-O&>r@0s%}zMtkxDw@$^DGg$^lDpksjV z^!^#uJ3m&iq&KujYGesZcAc6ijiL8vkP>>8At@Uh4B_Vv#yVBe5ishyge37-Qepv~ zuwR#K$Ez1&OGLByCW!k!arY@y-AW!lb_Jd!n3e~6v^v;qtwp9Z00c;BtqeB5t6RGE zT><>>Bszw1S%8fSlcRiIFI14IF4WILNmi{0YZvHn8X-01SB-j zMJ#f+gqev+cp#8fuqM0)fOwn+2=0EC%n47y`7KO@JYzQ{xtvSri~nu0Bjge;20Uf~ zFI<_HE1oaO8%L(6mKbuxaV?`*CJD+WPVnFy7fFhLZ_50jxe%!Hw~<&lifSyL4XY{| zyF)=A2-yu+-|(Pf-w#0E)A3WT08gzYWF-cqvG-|(Yr$FXREa^5l{H@*SZLZT!KW)? z(9`Ko1b9APkve%BupQ)OLNWf7#Gv^fn)H+)qtP zD8Jdk4(;T?!phD%2}l|ux5TW$)!SWaf=8x;|5&NG`*>H4o%)JPg>G@ z10El;gtc~7BeTFYbB*dZ$U1*cnP=h5_qxu`kn=v$HZTgH;2O3Ul$DKSJko1nJ@^${ zJPkW0HJLH&$(X?r%FVpr+8NB)atV}F7rKCQM0*IHGx5wj0n)*)IbF=HG@ehauxQnD z2#t|vHNvcc($ECUY+vZ0>-p$#m<{&^aTYV~$UN|TGQKd~3=i%f_{XzO^O^UlCqW*GbKcD1 z@bmFWpVKjQQmwauC7OUE+B74DgrL*1LGV&Q1Qu*J?BeoCJ5+m#e@{Ar=%PTbgw&ds zPjM;mgqi{oQ`afMg+N5Ro0OxM^YYylbUr6L(w)Oj_x|mxZpQ+!DbdQ$b_G;&ShJ<6 zN<+}crMQE->icBemdU-1=V0jxj=bNPB;(*%hVV}y@rK~qIqSci*iK~Zo@q#9dj~$VU zynmZ*j`SkP0yTlub^iO=(9K(P7xc$lo#2kX^xY-W-3bcbA@YP|vg_l|) zJU?~lLmur!It+s37Y4fKJXA}(=)mxF#DXVM}33Z{cRJ!P}eJYb?83FG3OIO z@GZEN5M4cq$U)y5zt1S4^0ux@bfElzxS3vIZQ@5;n0$P~|XGXpT{_>d8 zC3$;BIuibTODIg6;b#!p7Yb{olH-%o<$a!phz4*4T*?4i&@48+S4RP*+!g)iI}r&g z4lV$t3I;qDFvffZzUNTTO+K#PSUTX~4n?CCx)7lPITBbtESXuTqjljmQ$N9HqQ)ir ztr6Ej$k4q~5~EtjNE=*9g{xdRLAp8eIP|f$K2B-TySZsF-XZuT)`wd%e*e=NtVj6* z>6w>IvJU1Y%6W-&2!Fxsw3m2ApVw3x>lgwiN1AaAL@x_X!MU$@hE)pTmqVH<4?f*M z8`3Pm(1vFnSCe4sqh{?O25L2(xO~h$DZ`BHcf_tIb&>o^xb1q7eF{>_e*m;P;Y2v# zZQ4K=rAf)N#4PfiH5}{9bW)T?-dQFal8g_Q|9MXm4^KpVh;^!EE#*nfieoRGjaT%2e&Hm__>uVR;+noW0d z(fH`-$l2LU{1QiYRX(DJLlAAGR>0=CwNQrPXJyL^?Y5ZSWGec=B0kSg39tAO9LqSpXs%tqM&xz)k2D-*8|^IrsgpEAc<)$1WeUb{Vg@{eJ* z=qDAJnGEel9+7(lJcV3}Zx+1?@d}OVF!2w_?*~iYrrg;b`(o*hm2x1$Riqau2f-A4kz2e1goqmVlm)fIqRgKkD-1;W-bP;CBoT|wdiH6vgX zQ4i1Kklt^?@d*5@#8yzfQQVo*lCJ6ub7-VhIl~i^)V?O;8 zmD)K3GJ;ElvlZ~Sy)+m}-($9i8LQn~g;bJL6XoUICVNt%p3pBdt_{wh(Dhwz(W;Fj zR39F@HL!m6hN-?C+d*0?fz31?@=T7WqHA;;qhWTXDj*oar0wmLem%~c!QZ6m&0lsV zxd6^;Rz9+@G$(FkI*!$0m(0fHABnhu(PkFg1qy^>S)-Nx$(p*puJ92_SBX+pFF&oE`ab z{mhP4grhBOjxtF?{O@Z!n!fBohioZ=(|BH5zuFM7G|BZGx4@7O>Yw%ev8O}s+3#|w zf3jE^juIp$b2R2lXow<+we((qVa=XVbQl_9f1Vq=TkX@#D6n>gNP-p9n&rNHk!7B{sTV>qbqX>W?ezAY|qf_qWzt zq^v0?TbJgzGcPTY_mGI1qviDMCSI6UoFcYs9J-z^uMjYb1zog&I70YEz0gS{!W?xMNq>{&k z{yd>cUtqUz_0YD#B|l0dTglF013Vz2ZB$mD@X;6J*;=eD@fTh?ZV{>U&d}B>V*u1@ zZRK24x$%1Ek;+A(C;|eD-@ebS$SI5f1Cp+xy%-W2CNlax+qgY8G8hA;p4Oh5hHcl^d5>`eEsBKb$% zo2URRD(o#IG%NrH6lkC16EX8k@%>6I14T@B6~V+XmqSo)u3Tou&%x)PAnn<%o`tjs zXo%lxhxuCq-fGhFCuKC7-f+;%ap63Z9T@If zF*w|L4Lvk@mx*vVzn#6A%*z;o0}PI*0cotsy<8tU?U9^4GSN+Yur=nNJTFS_%%#8q z@`&gN?$Uy7iKa4LGub;Y!&$Pt$P+-*riz@U1;kwVuFzQ>=5raEYgUl4hUx#OL=_dW z?0DxlQCyXjjyvr@rY*c@_hi#U(yHW*a6Utt16ZGIAp=%q+^vNVp(dByD7ceWkbil| zGFEwQlZcgvG_|j+2G)XOT?S{VH`lsJ2)16ew!^wsvLR*A6=Wi9r+HXgRRheF@0{Nv zbmQkc3@of}R6jqf`^F>daO|&*QM6dBAMVC(Xw08gAYp_6abFmPhiHwROE(irXmt$; zq0orrfNa9c3>6%=r}Fd09vn*U&>HM|hjD{s9N_9=bqI=xb3X(@M=7;Qu}ZjhcD>C3 zi(EAq1oz~q|D6QYFR-7;q|{ijY_Q6J&b(PU2U1>MqHlca@g6~i$8&u4P-gxT&MO*e zpgfm5IX*enRHFMUV)!NP9=13y>wD|!|9sI8#mm-^BMH0ggZry?B&3CozXy-zS#Km) z$V?aB<+$YFDhTPN(UGl$+?v3us#mH1R-J$|JElow9iR{Uc_G2FXZ|m`4G7taafifP%pjHYbw8ua7b`M_N8; zg}<(g5&|ja_-)vc=I>L}5d=Uxhym%K;UOA4@y4bLicbULXk{qvYlxT^0RwUoF=$NS zxL{fJb(>Vb?$=?+vXQ5W6(d-UT-4pu$`CUw-g-g-Dv1!{zmLv4*pa{oh`#^@Z~y=U z06{u+jO-Wn+o6w*ClRI|tRTgDeNVXIIz9jygDJsV?|+CD-kZLQKDbgknR(2JOKf z3Q#|C4DEU1CIB5pOAiwwb!1uR7<_UFkuhA$m1`u2BOAiWPv?^%eA3`X#fVAEN&x+4 zAvn^>l%s$0URh(nV=yh{1i^?5(Qc@rgoxDD@p!!469~?s2W$*3Mis*kO$ueu^CYH# zCeY_DzHv9f)=nr(RG$qua!aa;JooqCs7kcX`@E<6cw-BsW-z?%^rl!p$-fLDH|L~V zgH1$^w-npbk1m#Fg2ue^=F-2-x=enO8K}N2&NzGlaQ_py#pIz{k{1{)v?_B}?g1@x(pbC8%IcuFAcdw1*n+o!2Ae~}HP2~%*Qv5DBDI($sT@}%+= zq3=?q} zkenDjsJ!j(_%|qxsf07KQ{FQft~**{aHrIgDA{`<{YUQWKmY&)GRENtKD4_jlRd+XyZkcxc$hbP$wqKfnbV7!0 ztzZOyBfSE%k;YBwltqDO!Dbc~>GU#8j}-1;Tfq4olJ4mGP7iVTuU{?g286U%*1+z? z_G$3>o8x8pzz?p>#1V&|@A+7btz5i$0doB|qmA9Y_sfes z1w}nbif-mupfGF)87e59_Be>0ARa&ngk;@J_Nil(%*rEE?4uG;FS7{2|0}zZY61`r zj(MY-U}7rKB^_lSjLKm(?8WReJ z!m+5VFc};MMx|?>q=k{lbVdl-!w8pBAOg}#!hS&v%N+)OI;Ch4tT;BlP)~*ID6_US z)3NZye=wn|%OC2;%X)ClJH%xXX+kN2$>e5kX3wEqnvd?U_p!{{(&`tOHm42j8Q^n@ z+kr$pCMl$L?P4NM4B`95#v6M;4#<5!R40XB7;3#_pgBO0aSa(7TG)%XE+BE(q;y~a z09RCRmKg5W{C8*RYXlG)xb`E=_wUH?HKENdfU&H=5RL|Qz17VwjjdK$a%l7Nvb*y4q{!=HDH=2U19Aw()tauzoL00}Ff?;f$~JfDKl z{OhmZ+%b!atcnt1N`(e}|xREx}9^lzBo{ zo=GK`T$YBE?^HVR#zT`q0XP?|w3`|V4PjwO;4B*p3PnLMxL__M8BsBsi#J`*GgF(Q zGeT9XL`wyrG>8?lId13qz4YM7WgL=9wCC1i(5DSsNi*&(A+3!sL?z!(kusr(AogH8 z8%8i4b6`uo%ePj>A1#En7g6P`qZPWDBB6y9b*}*g_VBER7YkKBf$tlpD zfFcJ#UUMm}pJKnCxIU73$QBR+6o3{wjmO@<(e_`h?6dU$kHg|NaxxKHv2EIXt{#0gEeVIm-i~h~&+I zA*r|CC=U5oePOU#?}Os@aO?)90nK<=%MR~k_iyxijqm^f03!jOVnikXF5@;A_eE-x zP`-^PZ3t))l#p~Fv0Xc*u}FZh*8l(vjX|1cG^8=$Mg?#`5CjBC|EcLr4IIZ4b}kH& z2zaym;;2`9V009LK3Y(14t8EclhRBaE&eKUo>t+8;V0)S&(D0dMfcv_E9LPYm-k!Q zW?(g_ws$^fO{4u^)P%;zx^&pr$3B$QLWp~0CpL}|_lLd@pdia1&aI#@NGk>5iYgex z`Ku_@*2IQ(;eW~g(gj;$j)bAx=)Ew9!n5e@Cc?0+Y_Sp&792J@ig9H8AhSH@5h{Y9 z(%Dwd{IN7XyLmgj%>p+71;y-c+6*$v!|$P*+g*h`AFMSS9ohWbqhrE4%K|ezUA1(t zgY%f=xp~R_?^Sa;o3YcnN61ohFHwh7`J;+)Qr$xF znp(+M!g}~Sdk}Qh3+f_U8KX8LcdW_@_MuWkHI3T1(m!~96?|4RNwDmQy*J;~TIJVO zOvh()N#yD}@6ockJ(mPC z43I-!)UlhA>4?%n{C;D;iiGHOF>wtc5y^u^kW!4TqIrJo{$-p)jb9O~4M2I76(=#& zi?4q1&^B=I*Ep@&Xd2fklT)6Fs2oDC5x0HJj4|puLFp*068J1P{=XEqzkwXLRt8Yg z+r=ek%5&g;Eym&(^rjp<>*cY6!+E$6`tmAkHr=zg8!{|}TKicaTt>r3$C)$_{`A98 ziky(;e)6{F$qZ?@hSf&Gc1rk?3e7B z`$9dH!-VXZg}bahWNCHAHP?>b^xb7reR@Ye?@v`3*k|>}S{+;{3?2iJV3tp*X_tAh z3t~NHGTRYWuPf<}#(;#v{g+9camqUKJC7_*VLMCsiDL$ z8R&zhrq~514xRXp#XO2l=sArJx`Jweky~bGquG{*!s z>uS^@hv?GK=MQ|`MxC!RmtYKBvb$iDa!cG34HLDlU}8~m3+Pme(Kd0vG&qyO>4E1W zw!Uq!BWaweD8xJl$fZquO})qePG#T$YH2kTl%}C{?R6&CLFEqe0(TQ6H39Ar@W*!E zFDZxQ>=#ThrpK8&-sVM|n8z-mw>(hy9UlQcWboL+C>h^ZUqfTnq@JUI38EiM9tvB& zcP&(WILN>=DeTpecKUP__L9{zt7@)3xnmVgY`-dE_|ivaMxUlCu0zl5z&bZ%0E#eF za^02I{Z(MZiUbl_S`JWH4@(|osfT;=3;nKLDUsBzP~Zxi^NDI4>*3fN8f#9+teB?n z)zNVinjK6wfqi$N5?Q z!yZ1bW9wM}E|@EHKth0VR*|DV3Q8r%94nU6=H|gkz&H+8uv_E+Oe5!H!*!Ei*jnR9 zpWnvE%93I8obI_{U8-Gq30n_e*D*!!3T`Pp`w6zglH|?W*5icTZ`x&G35yn+`u<3i zrM09KlAr&EVrjv;4=Sil@xDO8dP8Kf?4_v>`jTs|Aku@8!-YwO2ZP*?wq>CUvDsDzc-6P<(E0psv5hVUlXi5FMRSK( z-grhh3z4*pXGxHv1GbOM zi2z+4rSL(XI1NnLSJJeASA5&pFCf<3^B8PiGeSK`e`YqXZ=@u@dkkymf~Hk}QcqLi zl^4CC*$~S{Bl)^#^~zR!+H&nT9BX~D0t77vN{&7caCH@-Caas{!=;7`0{DI8OR$q} zxB~1_1t|SaY3`+cJLRo98m>+{YHbp_tu#O}V&&bicpXCv&9BQPIlpJYSB zu$CAa<%TuIziEY|Up5WVXGwe@z%r4?3K^932@nQt`wKOyC?voNU2#<~t*U$6U|)A| zye(FZhLT=fXhBCUh5b}i-hovDz3k&{o;;znI+~tE&b$Bqbx^1ZD?9`rggwDC;3zAU zkluagm^@8});6iCs-ezo9_)R@kR%xR#J(~>6ZmOI;S6a$8y+~J$`eM0D48kX$R-QY zf9KY*T4(s2ENQE72!F&IaPsLO_4NEA;WwhypH2;zpaa{}dLgfb+K;pICRlkwC(A^n+6_c$BHSwgt>={_PqDM+2Mk-JE5X$I~ z>+I&u*>@muVRdBmV{i(cQ^BdEB2vMDQB}|IdkvD1q^wzwzb2v7Y(;}w;Yo^{{Rg^t zQ{RJP4ot4I0kMmIl{%L4JRX4Oh!-~34c|8BdpK&44zJm81hABq{<(+SOGG$r)GnWCXp{`tPa0| zDGZHv6aw^@xm0!&J}-ytCm-56WwarzGS02e?L^grt^5XRRHEhDUx;r`U`kL1r^vPu zqW!7$t!NqkuCABju#n~76&NERBO(}k5p^XA69-9H98Y1D>#iRdp9&zIeBU|TR~S86 z7NY<#^JH}&KR{F*+DOYYw&%d8B&4y5XA0uH_jP3!>!wn44s)d|dO!g@7p^d>3WmcWVOV5j7z>Glp_eLk4)QLKe_sz_+9!IWXg(L;t36?Ll>xK&kA8Dbew z^x-sg3P^RCvgJ<$!%=st>r|12HZ7rI4MS>ioaT03&+v>=kiJBHQ;=kBux+(%+qP|M z+O|FI?rGb$?P=S#t!dk~Z~yn)8z*8%J?wg@uOfHs%v`y0Ee@UX{Qflb1pm`Qc3-9F z+?ln3158Gs0{9qTTj1R7){JBg0HobxB@9`9U43Eo5Rpux6ls$1m2b8}VE!1+No z)d@S(PR4aDvI8vkG|)t!wu@Q#rJ-EAod=%((B;c5=CF{US*^ zTI(-=K+_m_rfbZ0>?_~5fBDk4+9q!8I3WPQP<m+KRPpar>-!@@(vzx*Ix8%!-w~ zNj@uX@HhJHiLZm-W#Rj6MJ%b;9}622D!VBR@U!s9Ofn?PAZkOW=jp-##+S&`exbOK zEKOkvy%eO}fss(S&r{9t0~G)f3grZgA>J%|crJ#|t5BkrOjk7G{ijx8~css$Nv@+0RKSbWlXk5Qb_MCd`@=h#_}-j*j?LPZDR!@2{l{tyu=BmC2+;Kq$)B&^7W!9 zLEHU~WB>iaaRFC$GI|p_H$4)i0bMz5&5Lpliumg|#A)cT;q3kS_@kv<9f4eTi-Lg# zA@=OA0|JQJOc{a zPcc*P-H~cWhwryWZ>4gLF(HVcC2$Po3z{%U=*&RyK6Cu^14=f|~>)<;TNp7*!!qaZF1<$H`a6 z_r!yp%u-P*nza~9rU4@`h2KQxJpxteKM%XoBl{9oDwYUH-PHm{aP2?;^d=7RLWg}V zAAICp@WgbwfuF*xC4^#F73%^Xe`(E=|rZ?!3QtYhukC z`mN6QlP}^FHNqj=vr7J!lm=gqD9+LG7}$UYD|CjP9aj_AF=rS=f@_v>;68-B{NNUN zKNhdf!ul6bLN@_;EwxbMQ+fNz0(SzIEn{6g%0I!VCZ$vj5dls>G^r#(WNReOKF`*% zuX>P$%0O>RfuRzNBe~81Wtw63?BA!-a2@c7w|gAwTgHLQ72L0{6W<+G?IVcT=!ybA zW#qm5$QLG~Yp-S*wk)dbWgyEJrr-$%73(*7=-Jvds*Nd`%xl#bFLaudD^A*_3@a`? zy#^ccs}T75+sqjn-wJDpTZkM5R^#&#RJJ|$F|y#?5bWJv#sT%>r&S3f+2_aH ztDNSnyZyL5!GjR>5FS1PmlXBJq&~eg!OOIsqira-Is5eOvhUsgwf=^oUx)}jO)$faXO09x>QOe|p@_Q+D1#!1U^iB2Ne;EiQ!- zj3svFobjQjZhG{#wZH1TUcwe^4gjA2@f(DFg}u!`zW3tWeBl9xi~~@DU;_LRBmHqu z8OPJ*_0=xrCy+%M5kb_!?TQ@iA3yW$n>Thx>hOQUK@5~r@&hAL7OKZl$WRG|D?>TV z0wJnkYg64!apEW5V_N+K0N@CPGRpr$k%VD;1qH>xq{-#WHzvAT#%xerN#LkR*F|3| zNs&)Z*SV(m@Vn*|HegdAn-KS6@2LYQv`1C(>RBB9toxEOixakd@`80<{tOa$eN;ao zPJc)y~#+ocG#TgBZZnMU7vZbCo{BsmzlsC2d3 zyp)`Pg|-LmIjr-}E!G5}8`Y`<0|M2nUvWV+O9@ecDT?z{hlaCPA}9ZwI(X+- zq#CONi5Kw8&(~$F+t2i_m;D-7;*2 z&O-KLx_V&#b<^`(-s4pd&eXyI*`%pQX|O%WW7jLJpg=9Ru4x*MrU{oNtBnj0+bm9_ z!uHcB2nQCGS5%k0kH3KY_%;K1*&l>IZ(*dbn+-J+xK@^2{e{dF>01eQ`+U&t_3iv8 z!@KFM8zwb!URW~7``%zTz0~b{Z8_r_@W_a}>;{-HUpZmh%FbnaS(i^h!ay;G-L8@{ zm|HTic^sx+<<;WULeYuY!3hZnVuJP_a`{J&h&c~(NrhaU?K}Wq<#5RMwj-)h#DzyXuLrMn$NJ*3dfPi3< zgV=j!VOo?_N-Vs*`63bWckf)g`oUpl3X|`8d(Gb1w<2cVMVze3Pw!i_)W{!WDoLfy z?WfNOgp#n_&iJIT#WT4E4{(>V>S8i58kM8OHfF9Jewjlmn4B=cIRE!UK(drEU{dH8 zlldIV@60e74USH6s}-!5b^R%_zk`S>tPs|E&57*;7Y|J&6M6E1`uGI~DRq(aw@{HQ zCD*vW?qRK{yI#LN!*Eq`sW^i-p2y=EN6@TSqM48uJ849V^7~Fo5&|ti7EqwEYyABT zk*<`HCXO%61WLzms17*E<2qnIly(H}F3F|v+-JK9fc^FaW<0}M>cZH$?YclX0TsmC zPVx#7)+1vvH4|5q7JU^<2DseI%Z0sD>HL0{aM8_@?jsua+WpZ>27^_Y!lE#7G$XgF zA@2PV003HFkv*0uE?cWCCi~i}iW`&(loAu`(-VX5Gj>0H-Pg}M;c%Lhe%W0uj2F+V zXxSTsEl#yCzuoWlVPQd(j30eWsJuQy1V`ViusB&AVsX}hKCC(gZangHseaWh2H;@Z zc1Vj51sB^`r4+=Vzb`d&Va?`{6ewAW3&!*1xc(^S0&Xy;Y2*)z8?(OK9(Tq~M%b1s z(qP(t>STdtaOZEWrhDYc#B!$ zfbB1IH|Q9iWR_W#-3s3Ly*!T782CxvQwzJL^+p_jdUyp-J~sIK+2ZZrW!H&V*qRF< za$IEh-5eS2%~8`%?1K8!R(n2pzQt>=CD$HMwqa5 ze&13cR;HL0aI~ihg+JY`Gf4e45t9=NBQBiq-}+>oD`I;0EG~G{Sy5B_0xQ z>0bZ#WrLeozkCtq#AxV!i-6)rFkmWhj(=fhu-B2ePwcJ@A`0Q3w*AAulr0g)Q3t&O zHnDYriMCkEn##S)pR?wb;RW|D&IDwU7HpjsIb0>@g83sSWhuu_U(gGPA{EstO)X8! z4Az8Scn}20C6zxI5$F?aQA>Yaw<=OS(G?D%^wIKW9aR&>0MKYtKo6Obiqd|()KNX@ zc_rkF8CsPwGNrt8xZ54HzexEHHbMue_s+(XmyZTosw#V`X!F8dcI{{`*B$KYMi@Lk z4B7meu@GJ61bR~o$j1VXy%LN}j$Oq>D7GDy0j|f1T=GpUKxq|KW45M`|1LvwU%V_2 zNbC!IKm~&(Q$_t2Eq$|H#Vdt2E}EZcRQyI{GZWlgM%+>x0r+m zONczMi24QLSYUtDJNn(h_`M(TiYgr~rIt56DGnwwFpK;sgWyg9vT&v8IKC#BHUInYkG75=M zt*_KH^S}t2rLLse2zV?llWaes4!o*c%sJ4qC1Bu~3*Q^c$$Ks(OO-vkT{^TMZo{+S z4Fk)=yy7ZKf&dQ+dX@6IM-o#(1$CyVNTOm{@P@|8x%Yhdb4LqeBN3zY$zoGbn;N_S zHjHw#z^o+F!5(9$SHTj+DE5h*aTIIW@XoGHnP}FBX%3Et^?>=IcOJ($E-ci;$708i zyI}7Yz2x*#M5k6BX6~>0H^+3E>)pc0&UPK-;ME#*DG95jA`-t(|G9u)+xgqM4%;sI zLo#Y~whrM*c~SH-3*4>l5PNNP`UQ+~ewm?J)(QYpgc^;dX4{@>VFjK*D9n_*qofaS zeh#NUNpXaRSQ_n_i#;)vAsx}|0HRNdXJ)G9Z`$B??OPmnTSTn}@EkX78*9Ke*{+hcUi!z(Si&q`IZzn&vqW1YWHt9-N^B!6LcO8RdVB#4)Hr}bc6ci|)2cxEq+n*sw)~*~vDjV8e=G#LV?XdWb$74`@U<5~X_-#Z0%hAnC%+4aU!a0X3zOA=?~7GerFAf$F2=?8)Dm%FPB|lr$~=X zgG9A~1&m-AJjMTcFwe?fkQ5&wdRFkj@XmICUgv6ohtGI6Ien>j<5BMQnb_m$+YmO5rKJRu$3G!;Y`b_kU@C9Id|CW0F z+sq#zxZz1Zbu%6tHQ9C^#f5R84Z^B;Yv!o%4EjAy8e+bxMQo$CCyYN$w%oyTDAkU_Un< zsr%t$O8kt&-HHj>t~@}I1gVNT$y^tOG5?qez4Wn7&~DdnU3&Ir)5`=Dj2V9&17h;s z`pM&88gI~`bheF>Z0?4c-wFFjSuGv{0DeC&0_kqR(Yj#;k7P1HQ^(rZ&_}`sC12SQ71Ppq&7&)W;J-9v3?fBw}eIcjhTFkqF~S_?HpJ|ByO`S zB*U!zBPXuA3?)?w+hXK1vRU}!1@@~JW`S>4cfC4N8D{;8?Cn{r$4VSXV#J-GfdLvsH!e6amPuBlX)mUyW93<7{HEPAWtP`7l#2n$=z+{&tTghTTh$Lil zGZ;ffvxbHwcV+%9HoZq^il?HhT3zqL@Fq>7G9~`QTUlrKHmsL&xHUh{Sfp#c7pZa3 z7?h z(WD)Y$u6eSts1Scz_0z!=TgU$O{bJ4jgp4IP^E{J*#cnZFYE z3B|L+H<-qz%xTrQos(Y7*+wFGXm5W^`zjcTKP>@-({A_QN+#7>C|2*2K!4kk%4?3y zS}Q=`t4yON9IHGO*O{v~&Ym^?_XPi)!vfw)$SvIFw^#d0T6?d$1LRv%3*|YzR?itw z&sYCVaWNijQ(Rex19P6=w>81CMVbs3=DBR}dg~XOv1{mSxGYKjUlq^ljz5t0kE_>I z$8E#bm!_W}0%z@ESB2$l5kxYg<_ z>_^Xpq(3I}_>u4It4iwsea|-lBC%=Z=w)q*btYgW=w8h{a01~MaakV%VP83Ywq9aL zS;XpwC4FYn)KV3kow0pX@>zMn^li6@kNzQAl0GWYx*zCnXJNtE|AT4-WD9Lj=V9NJ zFb^86Ketj}TXnyzrG`dueGJGUYkXKq^`hwJz?8*Y6o`|MAE)JBKv@C=hX zzjBZi@CANSxTk7Xx>tEi=eMnm+;0O6tjEKXB@X`5peLstXUt`lszJ6qNYZkGN8UCd zIuc+M69@ipB2g!lR6_1vg-V~}Nr7*8;W#ut6ai2`)w8W^j^rwn-g)7f6Ca*KCb)Z-fjLMA{eGDu!n3RTIDEV+-&e z3mjr*!~1|b?Lh>ok0{sK`WX6lg$*wB2A-YIFVD4q&9QY#_Ty4He$yC9#x zk+nJM6NqQXO$!v~%INH*rjrRCFc7#8_vcc|TlY4l@$YE@88ZX*`Yj20m?v0jX$4MB zuWD6V2K6l8$YlFPLk1}fq0OlQ{t%Mp3u7mf8@4-j*q;pVOzW=3qY~kh6l;u}XWBAN zW?WJ)G1H&pnEGmqcv!G=Pkdn{Mg6$pqhxc`+2O#sX-6i}75rY;6;MB^ zgnJj(&&g~Q?|P8W`VYqF!-9j{O9*bk2ayINqCWyx=s$)M*Pi(Z~iR8Y#vj_<*M ze@bU->r~&{-&1a5D?vS)uk5CA-vTyzf2u78nS*;*4N0EUj_KQBjqR+ykU2F28?zQC zon?6tg2Lf);=gfJ6<9bv9>>ylY2Bpi_z;0<$7%G6_#fQ$H$vb2)~&ryi!iu=U4WP| zs)=b}62^#YYbzP4(7+~*5M42%@K<*^a5@v9-05I|2^2_~xwr%*ZjWQxEN>9ZGG@o< z1tpFY>rNVH)%RRRO$M|QbM&hMCU9sVgzVA`Qt_fNpt3Jj9>)}^Sb6`9cJ;`&Xd^7Y z5nyZanSmA*GSS_B@mP;zlAst!Bm|36B`XUK_~EVca%?ERfGyuTs`s0~dAn!d!nO_ZG;xdk41_0r+kCZ0$f3&d~7SO`PDll=!RK5NI;m|>- zh?}TnT+`Yd%sINSI~|Sq0S*l?PFRCFvA2?bh1jrj9<8jqqU)h_DZm zu^((Ywqfa*s5jcQ|S<~2tO3Jh`)xz%PZ#@893(rVtc_MS}7FI`0#-Xj^7pe zx-_WOF^>ybKNAUcpq#UxvQFv{&Upso1B6Zu>Av3W+Kv!R)$4QXfwx&@=?H_@qZ_K( zRG`x!KaY8f?-z_%GB48F<##(hB2CcWSUhL2loC*kK-Tb~?0^|{4~BTT`+MD=ijhJn z;{ucX8-T63gof}un~i-+L>%Jbh!k96_Hy|D$=Fk!hrZ+xGrSOy)s_6%|y*7;R?7RY%?(s zVePlC^vkj>_eINZ2-dg;|E$+*OP*A4a*wsdrP?5G5$Fcv9{!^OjPRq!Xjb025W74P zE zb97s;oO|-8m6(@8)p_QBGcgb@zqlw05aUl-M-7`0{9iXii47AKNU9V9=+&k`!`#*o zl}zoT2MJC3osgN}>;ipMbh-L>g8~rX=v4eY8|PEBS#^?jK09*PpDnZ8n@_Do!&t-m z$Rgao4$kb7VsgB!+NV(;$uQ6BDy>d3;Q7mPr81Hi(7WlQz3+JbzD3rC5u!yi`p4Q`#j+-Q+&$BV*@E0f;vNnJf1%|A)}06 zb0bjV(PBUUdW{Rbrr`$-%+qGSa`p7|{#f&Jwe*P#-HtjxuIOSof9%qpvp&Q2#m{Kf}NU0KnITG7&L}1pq0{`30zel-5s<*l~dq){DM(LYHe~ z-IDZ*Z-zvvtvMu);bjiB$lX5zPQu%MhGjF3HKF4pBj0}6YIRY2qKLI=`EJIdM`o6W z*fsFyrTy%Om>yg*jMH9d*rGp5<0GAq=J?S)P9u_i=+QW6l^xij%-#&;t1K8xHc(Lf z?@oTimm^l)?iB~Eixcapzo@msWW&yNc9zUUI{#T>62_rL+5ThU=zg<-i=RwAe6dBD zgh%+W2Wrk>XqK-;dkxl@hmHbi4{an{b1`+rWJx&tty2R+(y-F`$Ea}nsww@s5K=-0 z0e2Af8++!o?0h1_{>Vw0|!6{uWk2E5BfzsCJNQ?D^n;8-gWieGDzIy zdWfN$PXzmS(}lv{5Dk9atSl6KHcoAA%wAvv588Sv6)D#7zsVhf0*}CLyobf+aDPM4 zu~sN?;vR^;l5}k|x$fP|Yi-v>T_E|Tv{W1bgT zS7rI6PQdLiX)3fwq||He1Ukcm@+j$@Oj*F8@Z+Xc zg7kmb&}C6gM{+rm@E?&LJai9i(6qk0QJmvH>8r6I?EGO8QJ8O$6TrvMt{Dg19#_E} z7^tBPV=!qdNBi&QWnl6@DTrsMF^_@nDE@NH6W1aSNS@YoXN0M1l5gD)jRFmA6Rr>6 zihS8EgC*v#s5Oth7o=4Y^8h;2$XJ56b0_$rWeCJ?1#R`qWO)Gh(sY`FEMF}0Z&3NJ z&Zxpi(cR6K{Q7dp8;u*MX#xZdHyBItMC0?Wc-J8N-hjf<6dPEx0U#Eu6OG(ta+9lX zc{cal2~6MPNOu|kH53VuAmwVg$89#YCW6b~7o10MYbyZGN@7ih^LWkFRRsi6o?#GGD1<2Io}_*cm6! zuN45+Td3~f+Kl!7h;s+SX(mh}5+GbMc~Pz$jLb^v{4=tFgzI_v49mP-sZl|BQRpg? zVK;e!S|5$C12_@l?MQoj-qU3ggjMoaLz&HYtH1F&xAtN8Ua?naDoFZ#Y6fO8oty98 zt;Mt0-!xIdaIm_PE1glyrH6^S0EPrZNPhHDvDIoOgefoWEf(JPK9(;ZDaN`uOo`i_ zXkf_Y+kBf+UONI?8m5EN`F1P~u%i`?0X1e>>OV3&yA)Lz4akOY63K*x(G}t!L1=<- zhPp`m#3H4UY&%`-jn}C2Oi&@GBA8aFT&pZapUt-UBXlCjJH)FTu=hgwJHZEly~z{; z%+K`k(w>(A_+4Q1d!P(M9#n&@JdEX54qjmQR=(1h@|iq%Wj0;pj|^{bc18&3r4x@B zOa%Z)0Vp`#u!ZtI9Eh~tw!_p%cz#(rM3yAx*(Tl}xxWIx&I5Sd19-p!3N!epPHExK z6rGHhGJyr`vt#kA%BC4<)#a|-NM_}(As*BYE5x;TkVkd0F_qATHn^&d|D2H3sDvo~ zbE3p3+^%!BiOnLJpW(=;&=0`t%!~3logSCrl}D*j zspwy+UR?G&Uvb6rR<4NZPd+b+=88Kdym1XL%|A9eEw}5)!=3%OvR3?>O_@%n-<2Lgsi?j&A zHNpL&^l9GUbGse6;|npec(k)pyKj@}52Ps7fk_7Bt;VmbpWh&n{Le$cZgw||48u~9 zhMd|~V{yOl!d>GJkDKR|uUO%RJ!1k)9b>vNZ(Umd6$|fv)i%;uPLG?}t2O{oN29N1 z-4nvrKBO|9B29n7fI7sji*tUk^Hb;I3gyy^A@LG@v)fb4r{EhioctPi>-WPyFA28s z%Mj7S?QQOZ+U9Y_W%?AR6JIwY*`qM}g~P3{ zNPZZBf~dLd|9jl7gEco6t0j&M?s8z;_N&9tw$TZ;1o92f&Q|4ITX{-!4|WXMUK-cD zBg(orFSNW_a8?An*pHIY-iAa4MCriODL-cQE$2m8BJ9c7NPe?{1UIi3?3ZJ&V{IgV z+NEipfdy~&BjfgD7v?Fy2o9o}K+K?!f$2%a%&#H*WPsDH{>Mn6t6so@I}m=T|4)mN z50oqCESxL)izp8XXXB;1qYgH7hVT(rc#p$n=?sC-<$J5A*lZM2A1@5E;4t^e;k@~; z0yP0^P9BkbSF2@40#|cDs{#nIv7-4!W-o_}5t3oRkXSFn3P=GB*@-B|WD5*mZL!iH zLpMQ~19l+RpZ1fQ2s~)FuFOCU0|#u<_{W~KI=xNnZ2EEY9QPsJCEtZ?RoI8()Mr>L*VprxoOAhTM|Wm2}?{q1H=7sS?ig`$KznZ{BaEx0}+Iw z1a;&c^%mOoy3pXfOFSO(!bkgJf|JgVX0AMAvgF+X@kl&#V_h>4Qw7XN4an=mDp5D$ zA@NR$2h)nKR8^dIqYLcT>`X9`9ut$FXPgG>6aj?HxbNl`*I&~4TLktzawTLCdZ(qLp_bLJv2eIYPy*|~AJWgpTr75tm0ry*<+HMcNv^L`~zp2J|b>U`QzE0_na zkeQivTz7mp?X4bKe9b*0*8`acT{L>)oMPkjqEmCvAN}#p5Cy;^sJ;D4*V{h2E#%W_ zcB{8?j}`dv-T9B1SPqmc|I>JiEbme}_K75cE`WO@QV8>VcA55maGf^GL?asIePU2< zEzX~=pb<8=r!~?1gHqMB5{4mnnK6H@5!czdTr8YjWs#&LvxXLN<9Av*2Z9aH(s58h zck=*#;-QK>8d8M$%w zX?*Y>r9kQi4ls(eGv9C|6&8|;h6YwIl#m1B{^`%8Vc>^%Ys(CnNnv9G_LUID#I&(( zS)rF{w6ji0Wr%fV#mRF{jz17V7irgHjOEM@qO&^0p?2R@&sd@)!3dTvRJ%oH$@3am&)8zmTjUV2-KDm;v({!)4>+s?b`f#hTx-FtVLhTDa ztASbQHxvXmsu<_oPVSnCEtY79v_}j_6yX<=RQqwTGwNqNe9TVm{lv4gzJK7=E5&Nm zwT(2Pr>-BMf-U}|52L;C5#tMj2Pg0T?t?k0_WM?L>u5eLgR;oG{qp#Yr=?|}#A&5! zat+Mi*3s;wqRi|aX~4Tn_kD9sct{WxiUlvD%_&Takw`%%bxo1}XY2&ZC6uYcTGWU2 z4b*bkaU)(vwYS+g^a`SMAvF3$UrE>4ka%PN`myco#Z==NyN66nc%9oDU1=aQoV*_V zB7z&9hc#AijO0KMzumQAJ&I-E6YaNl)l!Ms>Wu2U8UC(wv}YiWg6X?+__yWDL-oR7)V+zH1;v! z3Lo-nT8&H=sG^B@%fH+1@(FGg)Xyq{+-jSJTss_9%DvH&@ijk}?h^2heXF9Fvuw`R zrchLk7!Zc-QV$Wxkg)uIQn03O9Onx=l2&==xg!F0Wk#vTtU8%d(OUoZZW%LtGf`0dp{gx(FFF{!g zaHv_Q$W&6V(yI*}kAInFaWc)>yC9=Em%(VwQoX zjAY^XA`h@BATf@e8h$tcOZ`L@XpGqeOOUnp2lK}?9XkJ1JdvGw>)Fg40g8Lltdz^j z%12LO&G3Gt9(@WEZ=5A(I+AdTCldSO4JEXbnWTa!9PmNKY$6qRyZZ*zqEOG((J!y* z+fsNtrcF8C4$!>#itzg!gDVoUQp6P%&u?s;T3BvNQ#p%v5h?SJL1-%05#0(b8;m=^eH(UY|y*k1$(^Kzd8{L-XstNS$GX1eWd03 z8r?gD<-o^`BS|3kIy7{Ya6l}C5tzT(R>5S{Gy^~JZm#c4;)DMu+-T2J6=c^i48i0e zW16K`{I{49^N^dsPI+nhRU(%~y&CbcA1UE4iemd*IJ7?9f6OCtSkWz@tEH(-EXQP& zA&#@cuN(-JSpi;^F$=KyVg#@fZx)=ok^wGQO@8E$;F52mpr*s{g4Cf}QnMJ86r=C;~q=z!q!(BiBOX@dNsL;dtet9~w7|`I- zM&>ivT~Xeq$$%kNyUOGtdebqWCsc32uY@OwxEuz})AZo39@RC59c*aaq`YP(u`#E% zuldFTYLMw)h)J2@+#A1G^3vVmt^Y-!um4l7Y9Ecje*0M!V3&8n^wJY%JtMz)P73xi z5S;^P28D#~Z=vNHF6rS;qWyZlGsf%_Az2R}=D?04&N>3n0^CYLBUjm|te5->f9Ld^u6n78ZurGXFPy7jw?Su-1>HmE9-@R>+ls_kiAX0_O z7k=gDPu#g|x-pO@rJ>Wh|Fk^_@XeI|sPrkR_mm?TBSZ<&I~B zh6K{q2NTakkq}blC_|DTYm`Ol(RUa&7X}8gL0Uj8zFzdnJ&zY-Hz3e;Z2h5p_2&uG z!bb9N2lxa>hnXV!qPRdmF`lTgMa(3IS!%#mqo8TCh%e=p5ZRYW5rX)k>J@pqq)WS? zUAMI1sISY^N@W)CIKf*%RDJEg9NgB_xrW}0K`1aC+A@zoe-6(KlpFt3w@PdC+>)%n zn%pr>_lg7Kb{5XVp*s6J=rppv=W9kun3zL|H$J8ncF0dE_x?=it7^r`pumLuNAse7 zo;hG4$FxMw>ROORkGbPq?5*NMBnyP$ z@c>YkGN<&@^nDGAubY${1ohuieo2R+0^T#RTA0M_fd#Y*BI%l6Jaf?A1lFNn>K?YP zQBmS}w7(pJtt&;Z_(J4k$#+Vjuu`dTk3`DOyLW58A#Q8P{1wBLR*9FbgN+3W3$(MM zx3c#p{in&eMo82LsJ%TlYH3S;u@x_I2H4v`cA?M&-v$bS0*PLBdE0p&E$%&Mn*sHR zfR5TddI^;oz$BhK67R^{Rop7ol&cJI{l*D7USTF&VtR7@64d)9dHF&hnD<6_v^c?3 z4U(N2+>Jg8BV@CmyXe9=a^ON5n_FMrLiNuf2PndX2VzZ=3k>zo?pWP&wz3`)k`DH- zzzi{xv%Rz$w~S;g%;k*>NMh zLn@6T4LMUSQ>?$)mk)EJ2+aLlR1#ZpBX#bv3CdX$a1yj)r8N?A0;oR)IL3U7wDJO^3Z^wNcS-~AaTS{qVRShZ;!j_;4GBl{>|JecnC5P`3_qJKA76Zg5PD3eR z9J08GWQ9HNFZ_SmVGXEJwZkRN50pPxoswN`xgz&X0&dUFQ`a7`Ft>2Ct}?b7Md;`r zD^TikViqZNDe9m36SvM?JhT`wvM$qx3UPCqT@0}|a7ZX8G($O3^)EhW7;-z8M-2w( zo}nYipl5LHA@xcr?%luikG}+F&OEAh%oU+Douuc3%_)0fTO8lK=sxwDdzAZ6KZ0G1 z2EAQEh0>?kg5<{@xIa1dAwW$jB?0{gk@Q_bUjwf*n|JtsBf0vedn2sBncoY|o8mxJ ze;3mO0JsrCnQ5#=h<_k=uoW1A0Fb?o7~h7Px4f&soG1its*pY}o9>e78kP4CTtp(w zb=Z!xMS}H|R)zl6+BMYs3yKt{CHyIgG+2Aitej(%&Xb9P0s1Dt@jmP1!%(W54HV27 zu!zX}=mBhZcpRh;J2(KAbu$2f=-C9MEO-6*UrNGGK!a;QrRat7t)QQd9{_+2OzK1k zKsLcXf0PraEb7s=A{F4cQXr(s!w>|IG1=S6u<}M27`Ew7_oC{cHRoZNWA_ zKw{;{3Gv0CG_3UZ|r}o~dRHG3G!kGi4)dF@n5cXvy|4`z{&7 zjImvnLQ|%&Y*bs+IfC1%KT=s3meZ-lavbT&kdg<3NGhC$wa|<+iaS5lOkk1z%6W-&0F)Cr7j+}deW=y*InzI$) zvG_s<{&&vwGqC!(qPk=vABF}o(4eYde*XCXy$4WQj?RQ5vodjCiy|($R{ztK#AZoF z4Kf9zHMPT++l%j-6d~ag;UNxbM-G=a?UC90w|=~t)25SPjv=(#Vj6-e!+*CqtZw7U z4{|#tZVo-#k+aC&yuAT|YK(go!w&$~Js{lr;woIxQ=Jqa#K%co@~cg5;zNpkIvU!@ z8ruQ@oSr)L6f=wwZOmRHb9qpN`^nd8vqE!!nP!zFN`D8m$yd6yS4R2&F#5AYCK;S?yo7R z8A%YA^Q_m*aOCOU9%swiTz9%ss?OGuJ%Z$up zG7>J64mYhB^9}DfrjM-R%i%o`qK5gCzoGYzHvMCYeMDC#CyRtJaVC z8k6cuzWx8O|4;CLJ}J)~YK&>kkG-e!8Lh%2vaVnfpUQGjH;a*cHV z4kAWTOuXXE(7bz;guDrDbE_QE24a>Zc^yYYnZUddpR9xB4&JvX9A`xv`hVr8WFIO9 zgYD@>`7x+OyKax`m$yxoIZLBjQZ@zNr&STcdQiCrr_KVPYcIhyGA=?UOZ zb$}%|h&VJ?2hvOYwo74>1ykA*J623GNX)kkm4P{O#y}4hC_fm&wa?M&b*{rLUKsg^C_Gux-Uv0frhYJ?0-5rKM}9%pu)eDdY?A zZYitm>sgtwTiGG2G6hCjG@Vo&JS0K#DYi}Kiz7^JO|}<)9Uv8`IV(E{ zb(L30Q1ckQcpX?47R7%)$&AsFIZD`#Xq5_ktnE5mnC&r33(A9rfDq*$ng3R}mdqPH zr!?TNcSJ%F>kDw;UNti;D?AzXj+H$mi$>US7-ZAmQ_a&=Rf5t@(eIt|YMmvN;*a0* zZYpw~MO7bhy5ZWF%we1qu%It**kZ;oBq`Q+@nx!9v^K}6i4u0>`yrQJf8HbCPxQsKw@xXAGcAd2ZN zng9>tFD5q>K~7Fanh*M|Q}V7lp^W?se&F3xwS~XXq#{;7)H0m2E-SiVHwo6IUZ~#h zU6VMEQRBqgk~AEJ5-Vy5Rl@-zXw!~g8Dd?Ne=@UC9r!o@x83j?iG!J^vc<>iw*NP~ zg}qjXXT8AIkIt;e1~&$8Y*hf|Ac}*LE<<;Y;C)O=qt+yMrk?yg?SD1W@#{h2OV zx9PQ`zIy6!_bxmUgh^*JQkSroU=19@CvaiQph^Z;qg+}L5Y38GQ<}rd8!hMbR#(O2 z#C5&$Z6z9Mwbh!wrr1V33B=u`r}xfNcxugKT7-Z87;7F2Oavk-Jrx7Ef8&|c$Mj_2?0klb*d{co+q%Ml9|Gv?NiDGhw7R~@ zcE$*KksxF^b2=SM4eqDF_eGGc5~MF6*xMNJ00=k}EikfjDPR4|;AW#Uj@yV}jQ1eG zCwAm$HX4u->EoYqW&UJrWRGMO4$xj4ntT$#ym$^Y!Tql`D8$6sFF0zm>JW$ae@Y#W zj&FKVtdMJClpfKyq|FBH706Jxq_{B3kWTKThD#>4>RlzwG%%38)rJ6PID{G)N4enY zabV$F`&f&(qbsRu#(U`TrNu2=VPMzz_^&BJ?&RoShJU-JvUz|vEtwgKvPq7A zFRm*YA-v?_N-bY7(pZ4P9s{E0NatR4-n8yfQ0FA7F zo?~lreL^eRRy|D;Fr#n4@1IKb&|!r+t{lw(2~F2`2fyTR;CBcRoU50NI8fGe!r1?6 zTxMt-@diO{^f0kL3`Sl$s(KWco7(C76%S)Wed4J$3DRED+O@x(+SgQKk?SfN)$?}TgC-l*# zULnl9MX)s@SYLAV!wOmXNfh0PlRr#fsD-(oRt^Aa6cd%q+{{DAw!k0Y(q}<;XFf0i zCqMbyj-|3@Q)WYwRL387$7e!I6({}hB_p(C3PgA&4$lA}oV`2U#Dd=8)tb^xu!SI@8&lgPkuIzluqtwM`UY2iGa} ze|Vep7f#!>|6nHn|Ss*nL+1N&zw zSR&Mo>h+s2HQG8nmeLy8$SBPe<@4CME`R_40{{vHOw)h>00mAv+f|>&smt!!c$99L zdR-Rjrw9??l`@it1qCueYVZ>p;ekiq@mpOr%WJ7;RU>vXAh-uBQSITRg4OT(|v3iUjv0Gu=W28-7DaqP0lgNePq_gX1!>c*F|0`r7J%M z@n&=qjzut_??wCQNWi16XxoKFsFV0>;k}rjLoV5Tuw7sHZsHT(YDpht<1uu>OK0%a zmHhg_L5^$W7HDlG!Rw0qJ=t28i7EPL&;T8E+F()0CGEG;&GUs5XBz0-}XDR>@<< z7h^`#EGzEQ;VSCk3Z0H=2^f`* z+q&cAXMwBG_}m7}khU3CcbQaJjVqV)AyuV(tLzkyZ#bWV31KRUO4qQ*jzkJK1xp#t zM}pB9YMOS@!G29`Rd2WGqfVnPKy3Dpv9_c5QQUGY&E-=f z=d*`;yT@00IkY*6_RyEl6hz@wAp#Gwmk9(HYtp`zRp=zmFQ;ac=$Xis?jBcLeSCOSoc4J)|&rDcI9s{_or}UhnxE zS)esSV!VblR-i>Fe~t5$*7c{`Du6xCnUf@N5=_oBd{rbA?3)Z(?(Dyo_Ro~zM zZ$=gj8L(_Q*5J;LTIh+D7ky2wx?bDw!$)cQ<4r1m9kR|hc{tOFNdOynEOoeE|P_w}Gen1lcNbSKPF6(>`;!XIdHk zMQU-fKil845?ZW|vWv+1NfjrSOc?w!&)X13$r@ih!RKQF2LwA#$^3^t#~LYMnvkCM zlT}x1-2`MFa?ZE@gQY=IPy9yWzd-LxlGo{NC7Tfxx;L=0TuOY! ze({sO;ts5JK|NoP+-bvrl05gA+W;XX=;;{j0u}f$jYb#l)G{3IcUsZSIE1W(Oq|c> zQck?nYR}p}0YS|>6IqxoU+%hVC`!{r<3muPzp8;c-JDHWhUT6%@L2MB8tR$T@ReD% z+Md3O@Dt$7)t?PIG3HO(Fv5U+QY!QlqQhev}c+iO#IHH}0t zQ?y-neNtt!RPT640Ck6 zTl-;h$LYhcJ-@2+c@-$~?2EIIdtc3jUAwjU!JTi0Ce5XR3}5974A$&RE3?UtYFHNH zxnGsGwx3S-`qQzOOiwRF*)coh&pMH?0IW%V>3#jHSV_P02sCC|UXruqy`*(CHk_Ro z33HbG3I^T;wdaBEa4L}@ebm0_NC z61AUy`wBg*r)I%9!j9QutmKP=(B$v6k?XWZwgM^Tv9HNydZmz0j}J= z$O8!80hz5PJ}~lK_bXW;_B|XzD502=IM5q{rS2TSRb35SwAi9S`;x2Epa1|1*$5Q` znge(*BL6J-`jF0F1M(4&009Y5Xu(HXe`dxJ6b+j|4FY1BzrYLlTK^`-K+daO|3VXD z7hBFGND@KkV2J<#0{{R60009596dlUWDl)^HKtQcIas`iBRv?Ge&S;vymVT5ONR;N z1B@mMP5en%iQ>6>v1;`t*rBGbrvp|J!%R$zuiz=m1jei6uIML@S&acJR4d^G+JO?Ri`(*PF;>FU^cHaz~+v? z0Hkv!x!0m63o}(!s)thA{LdAZLH+wjPe9eLp==suhP#^D=NmvwttMTM9m*l77#>%l zrH=Om00095*cW95%YkErvViZ8RhUG8MWFtyB~|p!AGtRm)Y@UR5ep4hdN4zg~@uN$noic$6cKbVvsfv_lMpPtA_xHxT z?%m!Wo_0Mj>7i+A56de1o;fFM+BZi7uVn1eJ3okXb#WE(ZT`~X9@*+s&x zk5~WzB3lYhreq=(>Hq)(0009300RI30{{R6000rWpb4qK%{_MF#{le|+i`RVr?$0e z9qrDPKSAN>{susWS~Mg+^Mz4f&qgfxyV(Q3MM+DKHHRnu9Z#yn?na>g?eJStA|X$B zD_W)ZG08n*9AqlJR1u(BR8SX@iIy})r}8Xrl2x!(#};~r=QPSO@c~{7Qyob*+)s3l zMn#whBme*kXbY=cbsMklE`n-|oa#tSLYs%Y+yz($_qkdb-?czj;;$KL(ijiROS7oD z2#h8u2ha+ut@g$6A8(}>N$3OABT#dMJVb`*_aI4*um@o_#O)3{`&e5kaAs397R$(B z7Eb&_;sgt`Jm!Fz>I`rh z00GQPcKJE&u5QL=x|OC~3e386ZnyZLm9lx{xwnAH+>a}?bt=g?XUWm{flV4%I=B+5 zFwvfw7kBmwg2-p2EW0pc*uu;b*yfQ(mpVI`bUq51g&VtUwe!QINyXT8&gwCd$$$Ly zdbZC@>tU*`&g@gWVHf+mfocOoQ<_a%0^XwTeZj7bTiY-WhU-X)){>L3L?SO`-KA&j z>0UqbO!wuY&Tf3f9MN%~S$d6nScKCee)Bo1U_t<=%bbAy?LFVQxA2L0Eq@BV&&W-X z@@vYi5z=H|#);--000aa0H_0yC<2%|$Qfi=5NO}a$T)7F7yuen_qCZbDX-p7c^<9H zU}aw|P^#H*+7EO>hi{c5N!(+nFPVN~{Y)cj%KG~!gO>)ZusB+lRqmrEV!XzuPeyP7 zU`qpV0?C5_00%Yz1;iC)6|qP+POQeE?I*@_uvVBFS+p!;rXK(SKswgyVzve5GvMgB zqbVPB$of}z6u4khTeed`>YN4e0(netj8tn(P~O3gJ^94fb{`u+Do~uO9315t<+k%%HTkxQEF&6U(|3#3jLPbuNwnT;FLpucgzdGh_a;)GZb zr0dMGez{E8%m5;LK(C3wPC!=gt}MwBE8r6?I5;d(t`aY`_RWG+Xc!~9f(iv^LJ26r6^&&5q{g>C{T#0RR5 z=t^Q)Mm!(?%6-an=cmgdAHTv?Q3~HeSYr@Z5Wo`mE*`tI76PS&5m(IWvj=mUWXF@I zwP&t6QAw@*4<$VM%A`_Uf)8*wX0=sz`*{kR%X0)v0V{9@?si9uZdg&yt-F(vK&ZQq zx4Iy`at=>o57*%02Ur9I23WUF5&x}t?CgSijri7e8%e+~CU#$`M6+LNQmS9FGD(eB z#M>tq#4LfB2CLz2vUP+&F?}X&mOpI^l_gHvsnr~QVK-al$TOLObLL}Dm^Um`pD(sE zLJVXU?Ee@Hz-{^!#OI(GX zoLiBW`d*^s6U4hJ zoD=giSKlJ`!FeR*O>^>zRz*}S?tue8wV}^@q_U6*r@=?*J%jm;_4}S-5y*oXvn07D z&*xNnz%%~RWI|XagR|=<1bHJ3k;&9VoTv7@KG$oQt1Tn6UBP}p%$rUAY&mL-u#Syi zP*mQCZjuinq+Si1 zr%)r{t4+n__>~>M{pblEQDV|g$rfc;j8lB3C~&;TZ*XsGpTjBHu|OosmBTMVbs!1J zfaidVb(E7LtJmngp&=Jkh)qZ`x4})$kW};@1C=)ZUQv1M5e9_lNSbU`HO*&#Yr+FU24ku&m+oBH< z5Wf7O8)@;ZFXsXiGt4cG1%_V=Su)6J)98Iy;ngmjvXAU!$WRyI$CHuGqHXp8!FUl0 zq|DF7k@kWAgVtw3jGZ7ny9`-&lcVKVgRIvk4)HqY-l7NetkXNUY9sc`2c9}Hg5b>7 z4bJq2h;UUATQgw}=kSw;31 zhzOcKKpP~~y-^-N{dOs#eU{@II>ZG{ZXkp?xlGvdg1BmX1i}U04~i*x_uyN~!4AVud(_ABm%y0~{-ud!n^Ic8#b zX&&T%`i%%2=0HJgKh*ovY8X3&Y^{1rplV{`gdTt9Co%5%7iVf}Z}1p`!*|hB;f&!r zcfwtcOSbPMTLT_g5(E*`EGk5i(?rz1yMGhJ`V+?NsC#{U0g?cz zWB^FNXEZlrx?DG&HZ2|!PI;&Ibp(cub=(e!*E6Do*JXX%97>(4TER#l>FJGsIK6qN zR|%5fAuf?ZDTv1kq~kq6BY3d2dX77;CPk-ao4@Dlfy>O@c@@Mvpua{1Y= zG4-6qe8m!|*S4p?E6}6l1X9KJ4q2dTE^&bx22Qd}eupA8dbmBFQy;{^-^RHD(?#jF zCL?wfUd{{5@J*~$54kDc2%j5;7Z=IRON$m0TH1&v*q8WBvvayn%yLU(48s3e%}b=h zTZ5`3TX=FjtbP8cADr*Z=ki6~$)<+?#8X3a$;^sBcPH!!R5=zB+vT#C-isMT==^b~ zgB|~|s>Pl`a&fp~&f9#g4@InAK<(0qw$y}YOcpWm#D2Lrc z2RbTX@hr}LC1GhRX*y2{Jqqduu4zPj4tC}w1!jJ6tXXlYY>Z?nFOw)((OPY`Ya*<#j@+)E>;##=Xl7TP5PpQfUUq@76Zr8}VAYg&2dO}z8I<3}Rfw|9p zy(u}QxwGPY(LLhsf-gOPlDFc5FkO%#y9f3vxm6m2DVJ+`*E66F-3%K7IE(wvEDc=T z;<4T-X(<3zgV{Z4Gi5bUIAFc5L;|WFiFttW3-YUw3&Kk^Gn8AEm4aBT?nT9%55KBc z5$5RSB%H+wCvWgmys^4eU}-L^WuRV2Y`UILT3I@M7u3hjZFO@F2?whQQh`p|D<-EQ zu6bRiz)rc()6!|qdEd3hwn0L~j7Tu|BdsqN!{l%M>CL4vSgC>9bBg6>4Fl!fnizhoO4%>zWyb3ny~ zJ^L}?R^CW;vQcAeR+*IB?R*Rpy6W}{>CnU{oaMqe^*RHq40GS7+ojp(-h>_%ajyd$ z{5=0w@wD5PR@Kv=97+6p1g1p{&F6w`5>;QYK}an&z` z&!KEE0z6Eko!Dhr#_T><=lu`ed!`nG)q{g|oa|Q0N!;pr{Bg{Dn4W?H1Xfvy`PMy; z)$VO=tpW!vNd(9?maLaKR0~o>9YbiRKma*Ta)!K|!u7sA`l#-3#^((pZN}y=jvX*k zuJd~dO+?(OtKm0u9#$zZ#tDuCxylN&!7?vhr}P)_4ycCR|IbM3lkAnKfdBv^A(??3 zp!U$v;A)}~8aD9Rw$D{ElAL4zE*-5SsiV&s!Zg(of6M-i3vVyo(mJbG%!9scMjm(q zAnrrnfE2sfpU!H}Qm7gIY%?<+Q zyV$b;5OP7^A~@F@XtoRr%kVa^Sow(lGs30!oT{!*>O?%5hMYDMFyAEb+{x~i&)Cc= zhpX@qPx;fC83HM??TNfUrnl*(A0{cXY}x6UffgjeRom!!0GS$H7ZrvT?)jN{q@rEi z{`9}WZ=>q_V>4ypJi3*uK!g*S!=VpPT%nZeMjtr&6|M+oyaHDTlY}4C`@GdJAEkV| zSWHhMbfz^xWh<5`Gt}|bDC*;}q4CC(R$@_$t}>gT-mKXh86z6za4=sn-EL@f1Pg)O zTukS5AQCGw-79O1N~9C@gL#!do@GVzy~C2t{1P=%$l)E6+pD=APIc~zdRP3WEB9=^ zt8r(7TH5_ZWp}2-NcbaExna9Yeb%YKhpG z12tsUd;65}Q-N}p?9EYSW=^?A(}?~h3W?5CKSNo%BpH8di{ns-)j{)Kr=MA~n~_Vd z=THsGxkGCrwe-2BUUq)Gw%+zZUi>sGO%LO(629(#5{Py6LR@GPIW3n@+|SI|1w8^4 z4k}2B*JuyO#Z03}xl9#)<00P&Z*MSZEML`XZ`o;xgbTd=Z?*{k@=?~0Noo$YJr_&7 zt&4eVP*&BHcm}PW=w~`cd0WTmNFN*{_V6iGzY9F;B+; zrRR=gEpa#VBlK=95sm%Iym>v?tC<8;ZF>wf z!ybaHfBqyX52D?%w|VDmvX5`Mrn9+GpgWqy0QBFn6;O@jhL>QMMx@RA@2S!OKo_no zDkPo^#c-flgTJn0b2vBzj&4$}l360PB;o;$7r-3T*3NLbDVALaVL)sLxM!N$?piO0 ztcrjO7tLKyAe?EhJmkd3!^4*%Pr1~E?lfJd^!2NZXHt zMmTg|%YC0_9&apfDI2}-#B7B|zr202`L)U9`d5VFTR35LtJizK)xPz!A{fr&B;=9x z^X!0&kG)|f!#S2#-9tMMBuUN{JD2Ha>((S32S^H`Jjn|Kfj=Z@vgj>74+5hQOE4U9 zg@{|w+T?B|E`&MFbv|8}R=jD=L=6xDSfL2VEx+4p@EkC6Cne4ZilH=dV@eh3+9sAk zxTvL8NZ~RmoIwiTT?@bB2;kekXsH&}Ieb4$>hG)S^29ye(7RPax1M+iV~jAj0%}Vu zX1GWh5k>}cU-=?3AP5jE2qOamtMc{rN-sLr?jQgFNizZ%xd>7|B{yc9rW6Ba3(iCX z0wOEyD%&#UjHLl{R5L@Hqk!-L003P9pVvfpz*zA%S{OjaWrAn)f|XZ$<@3}X89v_+ zF#FUvLcE<+{$pS;Fiv(v1AoWTtKI|g{TYc>lC|pM@>b!=RqhxliNP*cgzQ-#Mw6PZ zeSEG|y|8J9@oS-(0X`S5EGr`lg(QKXT&xue2}FTg7nI3%xFAJ2kd)F(s~iH%#^CW- z{#V0!J&{U11rbopCMZs*z8ob|G5JP-8*YP~%q>_BD&1*P1vN!m4`j^}9^t=UV|1b{ z!vX2)08a&snG_#NI>#(gWK9;3XhM1PQefYFqu;fOE0(~y6{nnW$>W9V2zXETA0OdO z=yyu?F9M2+##QD!ug|-Oa>+Lv6PBQUNSgXHglex)(MWTpiXeZoZI96oc^1l zDqS(xvV~Xns(M=-2(wtdS~fXCo#)a%t{h?HGAtO6Zx@wC&P4*i99F-pDJ1|84e>JR z5x@S7%UB)owfF!41Li@S*)*iVe}@3KxSQBmQd)^bvSI$@h1zKro9kvDNqaipo;NEA zJIAExAjqC4cC~Hu`SH%*@FUW~Eq-5+Kl-w%YbA~U=0IQjeR{1>^I#9eKioEWpmebZ zS2|`#uno~gl?(|t&H5d0Qz78^51UYl_5Gs}zceG{*@yDi25Tqs4SlDofdEGJCUSba z*YEu_amGCFd4F~O|h3;+zQvcyt?l> zj};re{e8kCJwkC^$AdkyK0GFf$;VMaN$aCL_(;gxLD-nxyS4_Tr{CY|7hR69i_ui2 z{zWX^>KlOIWBIX1h9 zl@50(T`GFv5blAb@7S#d)nI{r!p-mGrl#+;Kn66LFs!2zTQ9-Ys*aQ92#0+Mxn0xc za%-|0vwE)SFRK_4d#`h)74@E#I7ubT~y#Dd1c6a?u_ zRJxP!2Xv;Tyi>+u5~k zOiaEASnG`@S9NwS+YZXPPiddsi|VaR{tH;?Pa@kxq}iI>xSdP6w^R_x;mMoBX*ChO zjDzm_!4;US(W^lKj}GBFBAD3PLdEY?HphftAn`Zw3UQr8NzP7=awQ^=sG=u|#x;x@ zS|>`{?N0cO1!KZ^*3*FS@3z2ZRkML!XH{$%cT#F09a^fNAkLiMzc;KiK6_ETE}tcy z5i@K=ryQH}FF55?C-yV2kUs>k5Ah!`u9}F#)gG3W1f6tJnPWobG|qg6zEIx4>xt5X zj#HK2aZ}sD*F_3a&b*LSwtA+UaZ><_k&ZQK3D#0i#!l4;HnRQ{MczM@$VsOq09@_h z3buG1tb>RaOGJa&KU030`+A0{5Yj2;)GIF9IK)K}q5N|9)wsZn^3nE(=B_MqM5>c< zrp@!w*6KRyvl&7;cVj+?^jo&YL$|`f zXP1S}C@LUIymUa@J>YI!74Zurk2!uE*( z+|hXl39|4@%f^@N>+Q|%JtbgKihlvA38BQGW$bF=nt-_JX<66=NJ(lX2Snfi00RI3 zFhG_#%>V+J34a+#PIv&^jA0}ypd6wk^yU$FS*gOU(hnc?Q0tlu(qjgc2M+#x4_ za@*D@0iW_uBbWI6#C;}|!>9O#K~IOpL5)l(wJw}kDq!9gxdjGg1dk~|ytaS4xXc45 zu7xpWt^v>iLk3`SmEb?(50MRtZpVC|m*e8|@La|ZD47z@Jlxx}1W4~yT^-GylWP<# zfsMFO%4OpAoqNxVjtVqqn5*05`blE2K63DGq2;2jJ(Qob_JZz?Zi9g*nWYxS!&h3b zy+E0Fvq)_XO=PYdKvYr1MlQo zO;w10hkh0hqQKv9$t;eX0X0=)%k!=2lV%*kO(4Dw&Do^w!!sX6EdY4)@2(aweKZKA zXl?^$C<>t@866~Y0stNeQib&8pUY+o6L`z7I;!#-Ue{NR=((&Kn8}eg!NF9xEJq)`242mhNnw zY^%p?FHo&;9#}&CG_<_hy_~JXhD5SxPj`I7t+=4|A8fijA_uTfw_`iL;yBcrK?A8p zumf$4d@i%x&M)I;RR)Ezq%V%>U$h1mw9d`fy}VZ8ORfWUQj5kjSz(;$s#dQQfe}70 zPQFm*p-f`DzRK|-U%vOJ0Pf6J>HBWC6g^c+Kc-4+`++DS zk6qETTnGS~QI}!Me&)BkGe)YqDM$jLcbd|1q+r)VHJN@vMsy!#(}%x*ZonOcW}P0? znU*lt`sL*RV^b5iQRB!)qWHt}a=(8ZkPl*w?C?uH)k6~lR@>CZMi5TI!z1SZlJH7Q z_|_K9@3unEfsBkFL!$S_tWLDawD(GTi66mU;{5N3`X5vre#-j;F6QEE;P1mB31)G? zm}A&ljU>RgCk^MEjE!cHh{^4l@h)eAzQp~8SQuXN`*4!rC@Zcpisn0ZlP1=&Sd z{w>FLgWtRF3yoP+>#&YVwB|fBv`%yq=UYR-yJ$h$oj$RNUf%n&8AaN{6(}#DsPVZX zNT{z|Cxo_4q#clR7LFGbV4EW_*EC%s;uPTl5}u>MkZSWaeEZwbj?Z94;z^$Y+{DoC z#g{5>QrDh4Q?J~n_J@gxS9(~=6Re?Y&a#+A|3=q7^@bqVfghT9p{6tWO& zRBNWTqTGfZ`eK+~VfkVKFaNwXFiW2_IaBwHg6vqDcikqEq)|bL4RwESSQWZ0&waQn;J#yc2oNnhpeLj;Zt8?zdh=>kNH;)W4@J3(D09HA)f{K@Q zel^ahOe_%qPLci=?qKEFN>kG*qxx#JwK=p!OqK)dW$lpO&20Ae6+ zj?zS!=Qpc<@UT`{#R9?ErO2bBU3 zfgm+^7Rk(Co6cza@I6*SC4f@WHu8sIoi~Uw1Vh@|%jAcmU>>Jiyp|b=XZiV!FP1}M zRrhM?CF z*n=BlCy1gImitq}9{<)8X5Vl0Y&X7#?4Gpvm}3>G-yy)s5;J9aX|K_$BC=468tew8 z+vHGkw=r~)iW2`p+adlS7=;eLFsz2yH zjIXOO0d3~r5i!=*8yj+2f5IZzo-?s<3%_?sv27-@yV^I`2_ABmI`1fIo-6k!Poq_G zBpnla7Ns%MD(rDm;}rdHe%0;s;8kh8io2_TJxGGClOr$@twi#eyV(L(%LC6PbeeyP zE1Le#=nLBtBR_73fE+T2wL_9{9MW)a`7hq%ug}G8oqJlx;WfC~3HXjXXs6+4Szvd7w*57@*ShSXD{t^p zM_LZ5hJOXB71>4vn#YPl@4k3vceLiy@I>$f)J%()y^O~nF!<7@Bf^QSj z0NtkqDXZ%OKz<1e^+A4+jWBKb`;S6Ts_IpjPK5H#u`GdQ5$Xs6s>ioNnM5$v{J*A_ z+!u4F($6RCcqMhwSCy2KY@?Z5U;Vj=pdtVIy06iiUyq;9m~N7fzGnVZ`KrS#a2&7D zCt=N<)XBp=l_FPEDk5_o#lG9olF_#uKpK0|0;>)V$NQwu;;t=zF(K6YY(c5AnJ52HC)+=KZoDd9>P%45FyV*05V|irR@^Gu z&i|ld7;E@{aI&aWvwpW7E;f$gAy@856g_zJT7cLLI`5?pttuh{EP9QtMrh=BmpH5< znTc5rzqvKzaiIc@&oD~`4}o@>&Js}#U}SRSlF8cD7*e@F`9grLy*)@ z0#F+dR*O<4rZWzNTQaNAbr1$CJ4LCC2RyF7?jSY$T$6i2vqafUQOmHTuEcvYA`l@{ ztOj_%ILgMOS2yg|;1Mwn42DXhjp9IjDswG}B%R>DavljI+46C#+c%(44rg|zON8c> zdm%1T@;#*nuL_&Q$>XlOL;>3XV#!`x)Z#{FyqA;oopyGU1D$lKlv^Q%yaaGF0GaQm zbow(e;{97wvgH6ZbYmLbg*5^he7W3`=%rp5qA=LhMo4qKyR7M{e8Iu=)Yzsxw#(=MoWF4%A18g z_-2&Hvql5vZS_EeCn$Wm8pB21Vp}FvRH(s6;>wc!Cd342@>abIBRXq7vdWNg!9OvM z$!@Paz&Pu%buHfOw%&|A>tWhhdbM8Ax11b3q>&JR< zATNbL2AzA_N{h3o^zqdRSj_QZz|-mTyc^+znqk$RU3)$w@D9TTsK*mkTh>uLrm;R+ z)`>s&)3K_3QVlOC0>1r>gbq{~FVoPyrPEaR_Z;_vtM7 zI_T6OFS6%rw#J&@@09PiQ+YMTP9rVuH8K`oi9d(A9qozCEj^$ajumnf{ZC2a5zNB8 zu>#q;@Q&gPmwGS>(a6h)p_r8di_SuMp%w7p{}^~{z9Kl|UCr#H}hKw7_<_imIpP?12c=lRJ+YWdYhYmnx%Xzv_=yxr(!8+2F`39wdx% z0e3X!`iEVwC~mF5@Rd5YP_|W%2>=;UNQ)bVW$~?n%1$#<1{F*DfG5YKcc1&S-p^mo zNN9s;h4#tR_mE8i(JKp!6uvDrHAmY2Wit}t>}#bronk@6L*4j^N*=dKyoi}04<7P5SM25>+0J`x=^ z?c)l`iPr%AmY14Xdr6OM8<7EN4RH~*!J9f=9))|mU+wM2zGF^1D(|y-f&GXb1*{2I zD6@^$eB2@(t4|k=r?uMHu;JpD4bOwumi4xUbcks%Ij!_rq+<3;z6MF`>~w3COz!*V zti@7W`P--n8r|C>QqY_!*DsW8fmIn&4bq4dpDQDVo5>A_6rYs{05E*ZvbMt`5`eFS zf%R!jf!eS%s-WyP_ScYib(lC=5O6d}8}ICaun_Mw1q949*HktMM-xE_HX@sw1ZyIW%Fz zdMH0zgN45WeZxLV+&AWl!)CN9Xkx1(pI*oxg)wmJhJ9@18Yj>ExCNzMKb^(!f)ISI z&!BBkfc}2OHMX5BdP@|#|akYZ<<^sHWeL$~Z`dmQ- z&V7kO88GoSZRN>ASQP(7Ae!kPLd^e3wd{EzszxAPfx(~d6BL{xW+jaAAt@o2Snu@$ z@-9?Znh+o-;^HnYHF3q$dLtK+&+In+FPuC2{nGqw%szVp8yiL@y%vOj(*Zyit|%%b zqJqJouwX1H69q!SP?*roW^@#YvhYrBL?w}|O9K>oq#yY4bWfX#8SauukBJ#q{S8TC z^=FlY?l@{QRH^}UvgSn;QGa$EWa5WC^>V1U(QSjgMqy>^ze0J@A{g9a#CicE!F22W zAzGPMEq+(4`-fJ`xYl_~Hm{WXC!mUs)8jw)eQ$*gZvW14{Q#U5eJ@Sb^3f;r-s-~7>hBuETFiIzxA{m9V6%OOd_wdC0S z-#5G`Davw&izAMn$%q)40^Bg_O?zZZBy_6Msb^$aSY(}TE{AW7{HI5!@EpymTA5vz zh?`};daLf{^B74g&af{;8dbnD1Fc&;lbLZ;mhM#agp5kQh0_03xA< zjbpr>CF%au7XYb2fm_CN)c$=qz(VVc-(dcC{SW@DiU#X->R(Oxk0u}`x4!9L_aBSc zJxp)_005amo*G3oOn1o^gO-#q#vE6XQhh(0RsUsFCOJ;kGPeCt1{9W+{z|sIFIXC@ znpk@PL)64Q!=K0d(qC8ovc|P!y+z6q!f}JTKC7gaooFp@ejT$>05OX~@ma!_qg}@0J^ru>}&<=*J zFyx_%>Jvl$-x`qJDwOe}j+TBWm!w)K84?`x%9;1BIv-4apt;68Vips#T7I*fh62nm z?jWjLC9zqG0T+2E00_P>*=|(Es`VOqy)>a-FWR(KJy*`Wm+{@hZP&s73+Q=}#;qB0 zzKQ97boXwTg=H4eCvoKZ`Uv4dMpy|EA0lCStqt5y7q$9YdE+=nNs^`(IH0+2ySIZb zqvJhyaQMzrki4_shU(FZk$ir;p!F^mhWzunOinGiB_(Bs$l(6P+&I149IHAe^(QSQ zu@yI-uPcG--3Ni!i^U~WW0tOoBJkhX^}j^-JaXHfJI3vh1m9Q7S?cxmcr#OBQDm<; zi`REoruXpqPXw-QNwgMTt6f#q@k}66>WKtSzJB@lc7NyB82}UQzZ+ku_1bg-&bKG= z{`1!Ac!9tG002b+o;yS#|LgBs*HCX~hO_t0085rF|4^_Dv6QmADbF9O0(UbPM}~e$ zNX4%el3R?etPtn6#KQ;YXAQhk(LqP+7;_wkrjK~3hlm7fv9@Kso;l9hw*AE4vU-Jezx$SGM` zAI}bRgxfcXf%^xYf2I^k=|Mh{ze(<1jF+0i=9|Q&qsi90V??`#z#kBFNIZy4)*yE8 znf>fnaP?{yiDT?%;B(`}H6i;iA@sa`?0y{a5Z~gip_4v+kb)Bl7S;QN00@v8|Kylo zf7hy2=sFTb?CERMH~okWMFm;hgsj=O5I|U)!+jGm7FcDwbZt-)CkBVVg0SE@!3NcI)m3Ud7FMrXue9hH=F-gyx9p4VSoyCOC!D zlp*SQTFzo)RdtzE7lwFTOuchpWX{KU*EyJ zua2E|<8HLpBXGluk$Kq^u!D;H7;4Fk_o0DHRcP-Nu2i8VZ$lE2$RPI7`%!f&onA1qFT5vz|Fk^5 zcjUo7^(lqgprmtW0`WC*ess|2TD>QgjYjp?A9NbfAXx;mFG);2>V@T!F+3c>6+$Uf zk3;$zQ|;G5FRsmec*9xMLW!79bP|Wvg}IKv5u#9xBE6C8Pxtd2aLyLhr3jU!SHpFK(xfUmejkzf%`i)@k!6+!|d$#)N^5A>Pb zaOuQ1^wd|o700%a6vB=-6HJ4hPjTih=gcx?$9F5Y6&t!CV$kTC)%Sq9V#^!#sSODG zq&1ygV@_1M8><}W+K=}{Gtg+no0E7v*?N|8XVnv!OII=LX+MV&@g$aijLo1p5Mc)v zGAYfRRh4dNi$(T=3MO==2Lz2j3NMmHLD~$>DP)b`9ATh)thOmlM)@N5@nx@A$Wc(gC|>(^-k`3f5)=Vm2Ws;R$#3{0!bD~0dLPKh zANRoYzW|9O(0#pmwPsd0$Y28{3P_^^21aLTG|GB}vGK}&Iyx7KW||#p#NGZqZ{nCH zT{$V+g@kPu!3&*s2D0qkZ8?*n8IxypN+9B&~eP;7eb z;Gy-vo8>x0-wpVE9mQ(!{M-;1a<1}wS=bjirh#60drn>O9qcfKVoDM&F4#_)*9hv_$O-Lu6HtgcdEdC+CqeT`?w2@C%^ zB74nbkB<#+oh$smMd>4;6y3?K4?`W?=y^aHFkP#=)63C5A>uwN_OAiJ$RqY2L44@8mOY<$#zS`FfYhWU#85@*8ZqQkO^CEGzm%B<`=~z;+?cq% zoji9yP(YtWZvXlLzFh$z0Ps5Y7@El(`n^4^t;4r+T*^Zl0yq|@{an*n0BRioSm=XF z{Hx>Fv8(kOK6D=oTlq#$)#Dqd(LGae_-^K(@*^RHbC3Tc_YXzqo7iG4XYS)7gHrvx zf~i*wJ|oFoI5tyB?Xek-R*_i&(V*!;i8bOs{g&!TOm3Wit1FUp3aB(YzFQ*zf(*%# zfP+78VRY-XQVCzbv+hrjd}^7ThowI4F!qTz3g+mFmm1FVbMmnP0Hh88 z#3lP-18>0PC7UOJCca>P_5OynJ-qgYU&T1m;O`_dX9G-M&NS5XdEwrVoQkHch^2+@ zHPu+Wpptp^70E^8n^iQUb0fCU_9A!^*v@|gaH_X{AL=Uj@&)8z9KeV~+qoZhfcYZx za?7^&Ki>54I*T?@s5~42#OcZtaMYyPAmV!QhflOxpk>H23F)jh9s`r5nu#MWx25-# zp1vo%f3^J`)^d{7PKTBRnuN*nD>lX*^NzSc>>7Yx7)t!w#$%l}FK3qbU~>~WfD5Mdn5c>+Onb(k*@Ox!=bu(^<9bdfjag zcF}C?ZZsK|O0Du3l1|SiFVSr0_{>HGV@mu#vBE*l0RT8(>=m3G_X55@<5EEYpLT-+P)vJ6YhFet8{=BWGOziUD zh5t|m@>Hsdc@`Ys|GM6Oa84y?&q1&hs&eRGjw0bDf&THQ<{|*z#@upS3{&h<^$Ei% zR3;=-MFC(WKBOpO<1>SJ50k&s?(mWrI>mH(Zmm+dUnha9im?au>&@}tFmye}I|RdePBOpNIV%A9cOH z4Ay~1^TH14?iy*KpWFc?*VY06G>Y8~zCwkGKbWNgwj>OU$%fX!i&6fP492MCggi@? zPEf{5C#Jvlm0>R9&^K71xeSwkQG`mm4C(x#x}EH#KP=^IMBEhd+jU71y8jXwG~0+M zr3c2Czi9?Og{Fhyp;gNz_ja(r0)RDmX8?0&!QY0^ajoV$PCSXhz%)h=i-SGNkRD#I z1U2@H{vCNoI%M`E9iLCh{g2*&C?kdE9&(&~*Wszy8!;E?myeNi(ay`(2Mv{4>T)Z? zr!Tq9?)@Pj%}kVFoJ!^kMO6X)S(R9`q!!Kyp}t_~T;zsp=)YbXd?A#)vtA@A(ae0Z zFPCM33|41jLScqRbc5Pppd8jKgFzVJqR7L_i`7K~M!)__G2W1=J|}nd^0w}$i=IpS z{YZ+bF<1A40gR=mbQmH4NP7S<0vwHa`nKdeG;9qBV5b8E@pdjwoIJA1Bu?Rn!s2E$ zF8r}SubCQkKFw|pp7$=4omY3W17k1sy2nAJ{8o49?*OnF_E&oL`+2+TVY5fhGy> zA#6p}EvknF_7LCDM0i5&I_$1{`+to9!G0^ql9~A)Jt4j;f#gwXz4s!^xZNQu147@Gr!4VY<>fycJkQB2-(LEj&s8r+ z|3=DxJn()2{mEaqsli?W!W{;_Mv%m+iOzwjZcP`cq~x%Hx9@jB+ZdVG15#5j@!K2+ z$S-68t<;f)(nbP4>U#H2AP`F8*>;YG-w2Bu;Y-0}H@yoelxjk*CLqdS45~9v6c>b6 z38((_YbwqC@{>ov&sKmM1prVN!P&R40}!cTG(9VZybQqG7{ffWN#mJ_y=W`$AacEW zyLLPyt4xcB@=v|NQCE*Z(VF68>8P4gFumf2QfEkojElHe{m|UN8KHvU9XcFqeK} z{DWhUi$5!vEh4pa1yJGLy6^?r2PU_d7szesZ3U2ed(3FA2LI3j?Yr=a1>*t!I23?# zrI>G_-Zc5!xH1p!`&V|UO`nkk>zgU)9h*S*=Qo0q@9j)e26HLBjwZ3swQ&Q_)11Px z;;9zOLZjeTqksj?I+t%bq_wAfo8lGjsC=D%e~5%EjlcG;+|k?SXewzH>4(K~Z7@O9 z;M`{%GBV8@H=z3N7wA>I)3P;1=8woGF-ym}DLknG0AwdfWu#)ebSdZ83+<15(rt_b z1su6WEC5BFYom<|da?I+b{Y_%{AmFo1+Udl7w%5o7%X<);IG3%#+vQ7QqgL`qj#-s zn06VVz!j~j*QFjR_Gu`U2ZTc#6u2=q;{Bkqj2ixKWz+_+da3`~O8SpLzG8O~O!|w(1HXyg?F(SzBeTC_oq}0=4)wwj z!uTF4TthjbIr@%Mx6~(OB_*X;K;|6wGDfD117mbvAnfnCg2LH6 zH(sarfRy8rqbN26+ZA!BrvhO1+9dDyIfeAXBCWW$<>p@~|r{871I_I-g4!kz){w(H!*;9dC@~6ce98KwqPe+>mhLQFWd(WF?bMJZci#bCKT8}uL7d9 z6}1(6n*pXA{hs6F&x9^=N+ zMhg%MbwUOdc7q2#%;^CVL9xY`MaK!WHDNIjLd@~m9A=pFSTT4dRBRn|C_PT?8l7{J z%n$aHl5{@Y`^b(y7`x9lDS}mhv(GL*Eno_Fqc`#Yo^6_Psk)9ea7%1Ie+VtTrYwi~ zC)aTeWvWwFK*kb&pW1asurQPK-6u6l22rj<`~|kJr}feevg#iFWDUrYF#+G_xlPWa zl3Ce*OX1{QT0;1g-^i#q<+16$eA3DhttyCf$V5^`QbUXW$c`AEe^l;5L+FXPH!LX5}Ds7TP>LG!zWGfohaB}Kpjsd(T|N+?P{2nOD-1xT$hZQZP7nk-$vO zlCg2`#{Oqouz=NID9r(u5I_dLI6(G21LL1=0YFxA<_Lv3-KB2$M5e>gjmq*m)rRkb zoiL>GA=#^gAnR)?vb#JHl6lviNzc{q*9)v_qAk3ieO*b&%N*B6iQmd|5XQpfxj7Vd zP^wmt%EJ%w#zYx0ZbW3&v@d8y!}^Hn0hoDo{k{0e?Qo$wQ8#H^CKzpC=81QK*J*9Z z)ksp&54A}ZGTE(U&-%|C@t>*V-%rHe9GEJI>{qgnpKvexu*E2Vq{Kz2`{oHOoJla&Th?E3Kh>F3> zE1U=(%YO~h_h(s76J`78ZPR!@0T8MdCLA)21io;Q>AF?ex}lOjvfh(g14tPmqkqw{ z&dG-ei2qgAKSBXJ<=-Q>Y1dMp$o&u}j6E(!yDb*18dqaHn8GG7xqZf6n8_Dn8i>(v zFs{a`QRh?M^(q*J^l%CcxCb%ixZj==MX%{S&P*w}veCab+e;*;c62FqY?KjG{P4|f z3`Ff#`;87*#~cJNtKM*1tT~{^9-aa@hh>@4ssT&CD#dKG-Ivj03C$%YFXzkWU>D6ITwHx>Ck5EF=iUtHo9J>NfSznx+0SC91^ zxnRi;SejWh3r9eENd(SVnX>vvD{BApBMHq#) zW4_L}(FAk~R7|~x7#E*>jWNOu^(lP3#K>o5hrxvOdk3=!$vOUepiY)>YBnT-V|iuC zb=20|0E0g=HD7&~e)<;qzt#bSfS>;l+hD-)`8k&N58f(jA48w$eQ6_hqCfFiwoVd+ z1NKgqvxljWglWW_2`1(VfDqjB?kY`Qy~gjif)M~Sk5F?!ji}oWGt56^fo5l4H`G>M zJ`@e^HlorbT>(H4if8}uvo24~5C8!5sG?gT9HjrLktk*_PE;2@Hb4C54m^4X_bFKq zNC=~<5Jwm~@X)u`j1~(P)PGkob?9Nq!OpaH9&}YSzcCKD2mOJPD1g7XFM?|N6Pl9t zAw0r$BG?=1xXQp!V5^xElok?fLnswBI_p3guL-jpV#3wkn$cqVO=Kht74t8U2vye8 z27RKuRyVh2-%*ePWt%Ac<`^ym`9vnDM)c@!56dP|&1UbP7h#`}DyX9|eMM7;Jr|ROE)J%WHQ| zdza7jUm^LCK{Mqkhnwmvu}`|bK)9xADF29CHMwBy0@2q>dNBm1h3_B|a`%4!bw6vaYZF>o(`(x64 z0Z=FEs;ZJAKlTRz`T_ZPT8H=C6J}gu1)c3W+Q#L z!yTS;jf^_sF%RBZ#XY1_&wTb!pQ?$4xOWQN#z>TlamqmcLPD#hB}@5)k{5``27clK?2dU7n!S%P>rRX=1C=wO~{ za>4=)L7`jqhWpDN^vuh4Mf@@%cI699eniHG z%dnmO!t7_2$mRCwaZ3iSQ=0}6rtyOzlt|*Dx!{uy?d?Y>&C-0EOKP{!jDj8ZdABhp zS*Uc8)2&@{*|GlNWIy+>ceeV1(k3agJ#_pPsvTgfa+MNUD*bJW^PbgL{Bhbb#0fAw zkjhFgvbHC(UpDqXjaRTNE{{Akc$`Ik2fcS&wERHeq&LF^BXSj07CJiSU_SV^{|K16g2i?3dEP?ep zed3rmBu4yY1=Kd@k1f@WMwbuI!y4d}6Vlw`>J+b|z8pB=&`bpJx1@LROE#IrR;cWv zj`QP1>l5NM4LCeBiGEE-fHR3WUE#%Vm@8DqvW9m6;iR*}_vETtPQt2MY9wqRXLhEp z*n~Vm0RLXS?{&(UM@)y{C%wi-I6B6%=y3_7SXqf&M23YNS0Ik&+jUV7nvBoA&5CX+ zhc7F(feXC-{ABnWZ9jPxlc|j4A7fqBPW{WdcTCsw6h(7PGkx#kc1}S+4JvBEm4F(U zhZX*6(v7XXTTZ#ZevCOrGb@;EP@MYTB!4zD^YH^v`ih&~gyJaom!bv|g}|0P{Z1%< zl{@IHgQq}b3(nn<7trG>x>hzL=&e|dqU4oh7f?RoeGlJml*!!v-j6QCY5dC7!FryN z-=$N7P2=(XA0_wOI)b>=#!orNx8~OB(amRtqQJU%4P!eE3X=$ZRO*T^AiJ*k4?O zh2YpZ@#*0(eFLC;hYOL02ax4) z$kVGpr(x>th;ZDPLzmlaHcG^)!0}YXjLvpSMvVEo;_<^cod4#+}d;AXqFuCqDVXPn*E znfJn3PIy3Sl|wC&Z_Zs(+ebdsCyi9R!{RU9J`v0^`xOKC*(MhN$opeWc82?wpv(Ck zuRg{Daf#a^^*V-0M0={mYTXqx`-4#p6TOR%~-^2IzW`?0W^B|F5bzWY-h%sGxRC$Kbd6}DL3ddWgC zA5=OV_6`zLEJq`)Kr?8$HY7bGg}@C~xb&4C6cYN{SJg0Eq3|H;xSj z-sfL1YQ{)`3NBV6yYa~hfzNWezaOsUZVwuyC+_hK-BLmMd*N2Jho zTDEc|yehxQ#zwU9qLA4Y`}bb=spOJcM+4bV<~akkH73b_+7sku7B{Betsm9E{zAN7 zr6?F^mXs3|iC`e9B$7+^qX$!FL3O6arr!2=ZOW#}eN&{V+ z)Pr?C_;$}7qx&>t>Q{=N&=NdkH(CiJ3BYInvn1%FlmpeWN zLEZ`1cJwm4CRS=hdPE_4+BEzZLx@X~oUIrQra+lm`+h$QPsQ$o4ims!zF$EjJSV1) zYrg@F5-9^HVxpv=W}a6ww^0a;%G1eP*UILNdlCRnUwqmA`Y=8}TyH@PfMsnlp*Dmz z)=ZKCvjYH7@CDNce-v`&68hH?g9;=<59E~X)=Z(Qm+MJM5iQ7KPWAkDiFd$&@1J-$ z*fd%9y#3w?%rgA>iW_WOE7i!16+XvSL_3-_ua?kP)esRLIfxpPy+imYD<2MRj2emL z)&YyI37B=guu8IEkL>II;ZO9S8L6D))$z1Ge`;Mj%A;Z`^qaLDF+&jdtN;XlJcJg`C8D{YrBlA0hd<45SsykRSyWO&|uX`sKD92Wo~UX zWVTv|3_n6I_OUR%gc$Z#!+G0Zv+2|HBB{nQTS*b(py;B;s}U6T@{defyh90O#Af3^ z$X>;2Hb+Wsp@Q@?A%Xr3brEa}PF567;;Q>(28C3ca{`|a`nHlqr0RgqG93yhdY)2) zqZsVOOq>DSBHCMBWT9~ZUoRw)yj4Dnz*vtKcFVQ8Rl`Rg^R2V47JeZOe zr~>JE#dD=+lsM`_JcXafiaEYry{c4?O(Nikhc@O*F8qBOyO=!5hK{~`{%ci2ofFc! zJvvJkc3ziBYC4?{N}r1$V2z!Iq@wfzc4U-w&VX_}nKJaX5cMYTc0d+=-}q&BsueU| zWAcvDdE*!D8}X0Oc2bR;^8(y$ z^GmHsOBCQdh%)#A3JE$PB6bI^dY=p z9Gt1i!&`vB3}nLK3O}v?Xgit>6j%f&!Z3yJf7`xL=0dzSOu#N_9}Rz~W7cKrQ2QxF z()q_NBtSbhObqLB)0$tBgH2`3*!Kr4;oW|)qU08#&hR(Ri~wN$UmA!NUC;o)*a5H4 zOBx1-9o6Fed$$4+GMV_F`)*fN8qzO!@yFlZ9t&YYS6W8nt+J%5ReeNPR-hL9_9a@L zDb)L39v<^03V%n+duONcB4y;JfAaJaJVCXF0V&2k@E~FG8e=s2yNbUB^N56m?YEm~ zVyZ3r16#KQhl1c)wVO)zl_uy%Xvgg4Cy{Fw@iDW>uCgQ(_t+B`4ai$Qf9l)roT;jA zv6S%hkOtD}7gy40mw*M-2WX($m~vT4)Vij<8l@vp8jzy+>w!|)-0;THpG38Ugo1OQ z4k=0Rst*_pjd}F=PmjOUX3Oxm&=8ssIYZl;CwAS-dRW8nM@FR>!{0YR6Gv2{TqUQc zk_Gu#SixfehuGKx(~8noXFlJ+MG7vW!KR6um-K<)QjIZDF{-DTb8iN&$3!*{ngC%G zUzpt>YZENeuG>?-#pfk|YZVB4*r(MS=nAUCv_igshZ0WB-~NQRXQ7|EG-VEN^La;% zt$6%cmf_-vu+Cf>TZ2z|tQ`^Mk{E*8nh5#CYxJiDCUQ|ypBBlwa&YvAwX(2yf0Bk= z6BFLU=n>3K2OZ10YPby4uhPF%R*+UD+(1F zzbq#4?zJY3Ofxs*-9jHR)wJMkHnB8tyrJKwCJ%D)K+6jen2OnH_#T zk|B>%8>x-*GsIkSA~@HvVg)hpm76X|&xss*1CECpw#xFPHUk@;h!ZLiFY?c5GrX)x z)y~1No~=O<Uc!tiKWpmj2u5d6q+C6yI7VTKLv6MBSFsfdLPK!)qtC2vKFYza$K4sY|u3H@D+%Bp( zNF>ZlMU6(K7v+NBodM@^szm4O1ORo2UDieA>SUq5J=KLfJE`oBsBN zWFx3lT?&*d@z_Y!us-!o24uip=JG+6PgGoqi*cd};fI!wHE!a~~)yPQo%3OEi za-BW1UV@K@KC_;%X^59GsyTW@cCwV4b&LhCjrNWl9PH$Ax@VXhPCpUWCAkzQ93ZWH zv6n}f2r|*?(+Zi3dL?PBxQ_d^PQUkm>wGVcNyF6N9uyoFHY#OOi!>NsKOE^v0!JaY zRdWV#7@~Y(E+lcR6Ncd}67_E3#IzwB z`B~ZV%O}t+dvIX+?ll%vByD7M&$KQj>9JoH99mX&Q)H8c7fvzi^A}0NTf>3De_eJw z!umxKhX#FLTr7s}2ayvpIVeCnJAH*_I;ceF@QSUB}T4YtARuY(JPdn@ZUUln(5KUNCV#Ju{(`~S+IZ6`uhIUEC18Trma9!_uH z{QbiRTcxK+Y&60V%@6_uHl09nWhn1N;_sW_jCrwu zCsO8=MhtpjBh#|PzPQ5@#$%S0q6>ud1Q#GMv zRG)mv<}ttMd2uL{z~XfFAf&3&J6Tb2;a^61*laF%$Psaix^@@z)w z!oQtC{UIVaN+{1NaQiZ;YLZ7p;1uT1El^uFvF>t^CoeExSFzaJmqoNXHllWf6{HMf z2DPs7IpZ>lPbnqz)xX0SG2uCPrw?XPWA&_}ksu7(M3~k)a!$%`U}O7rdUewkK;x}H z*D8MDt$%!7C65*^E_DM(0>n&@rXVahDSP+)lcy=g^Ngj7>4&oyz35maia|LyynBswjFHEYv}TIM4Y$(7$B!_ z^+M!_Laz5ohoaZCcVL6%AH0ohns;0G)??RYn-DyvO*dxp?zc{HWb|9Q*8}ghu$u&# zOcEms>7VM}SsK+*_13XS+3r?DnVEz>F0jPJZ4AI0roHVyaN{CPrZ5s1v$ zn~jw<*ETYo4}uSCPW>Yyb5e;vi>khNXTIMpVZ=kG$cyR@FuaYU3yQbogafb&oSz+a zk!Hlv3szIS@H(AScaDBMz^zSeAp!tCc}K6Lhb3>%WNTD7!M;5fdlT|$*|O%f!gAgp z5b|7}H-2W(b#|ck@Z=@?_&9pf0&}3SxV;F(9}#y;?pAgUF{bC#?#uW##oi3^{|Ep# zEbx5+QriIlOu&5i@$8P{Gaa|}qYE_YUHshNP+EPRL zb=^q*w9*jd{PPe<>ietQ0sx?INL2{Ne}DCTPN2Vm*Moqa5NsH%{CoAuvKn`)+oELI z3OiJ*_H?H%cGzlXXT~};g$WG9p8V;l#mhBITgK8`(fmFguyO<+71DIi~RjCDuc4qJwDUr`N8FZ))q(* zS%o6-SN%>(lQ*FpH$&>h{n%GEQuN@B>&ld@3P$WRX-Vre+*J(XMn zb`idEH%4qHGVraZIa@WOvRu^?4BRI0@J!!@*!i0%#JM>F8?{};i`2%ZSbkWR7TZ`p z4(v6LFl9eulHINP`M0KL0h4?cvo4Gjzw8?4X%@6#a1&6)+E+LMmvQ8@>>5q+C1pta z>fy`q3R=i11+~VDWEP;o+RM&xL%h#|QO!*SSEC8jX^BRHR_1UxA-6Z98D*kK1EKx$ z^oHL~hJtMFpg0X*Mc-bchpm}P1474l#iI|dP4*Q*HEAst<+63N>a*2Zal?tPc|{Rs zyfIN3);j7V3-b&zcni?(cdah^xKXILe%g(Q{SM-jeE24^jKcGtueF%-l8OxBs3lcs z64GIK15GuB*xSP=*V9ewBg}0~6iMSGF7qq3Xg(Ts1U&BdUWQNW(fEni-*+weEp%R$ z#V4gE#1 zw_RDmUP|QF1*yfWWVGIFqMeT^;Zx6t>0oS+NQsz^K_Sv%`A|}iT8_2F)jrqSm)h2O z12T`-tFm)ZGP_F(?Z&`Q%)j?~$k+0+1&&clgnwJWyqfk|W{v|Ly!G}Siq%n2%jKN_>ja%K zv>JHwm0)?vkzX11nt$4cw6$;$Sqg=-p!xs)#o9!#ZfAz4Ke#hbELP2zq^0cy7T*pf zMB{-2$sy;%^0yCky2`ye#n!gL;TAzos;6CoPJn27rRqso0@Cu6xRMg=(jGZPuV;C3 z2i%Q{w8@tlC&tXjEayeTjda+l4L>8+Ee9xzbFLA-a>9Hd1ga!K`yc?#vn2}otrNK2 z7#b<|VwFD5C=~a$p@{mz51+_Es@@2xs9DB%yb>mHUOq81!dmk7AaJk7$AW*;WucY< zv!-!5G3BRGX&p@9o`}!{$(g*@!5f%{#g3CCi>ty`icyr~H=H|8I%Zx(7%uGC$F}gtPxTyI?&SO z+C({PwkYV$eiMy}KD#y7H?A~bRY^#X$Y`N-U5od|#UJ)k!mmOU40PWhrU z^r6ezT}gt)Xfa6M1L*hH2Zkit?@0DvDYqud&jRdjj_`T_4dBt84;Z(n0r7uu)5KO*XeVN!!F2}v&FHc1_XUkBpsWEZ;^i~ z5E!}_kK=wXocBwcUJfG3rC!%ew~$x~@ffD#;|2!3gL#&EzJ4sdH#d5%ST%aryCcbVS_}(vVr=VK&_)5&Kwv8RAYe0@;&o&Y>Q6D zpLA!vm3MCxArEjeiSfB*YgBTl>5ru9-PQo()CT`-B#gQVL4+p2rvW&3uGI)O5vG&O zN=-TtH;TbO_VOd1$?YKJj5DAF+G^MQl7V(-s~(cd(^^Y(BOaV&U+mxE#N+6~K-I3m zH(_H%ZUG*Dz$_}2MW4T9AP@`zd(4*rdH9{Nl&O5-x52rlR(mP&avd`7&W;%gr%xc0 z#hzs5*4+TN(-h}%I$i`TJ`SIqPB@!C(E&Q(Fg4k?>Q4 z@gZa>VnEN8rBB_Dj~Qv+u||Iq)4&_8ozjiDeMcyv z4vaqP9`iR!#5p=+T3Y^;X1)#p{ia9CG17RxD@iE1@-}_r@e%Jv1+n_w>aLYZ_zR!l z>V!OSQm${uZNwOJZb^Ua?Z~$XNi-W$nsKPhTS1PeA!WAa}7qnZ=JvLz7%e}C6ISs zulPP2Zk@Q{3#{O@r{%Way!}9t;K#{_&O(CgSAJ*#0DyL&9MEs?2$xL{$|xxdJe3rI zAq=WCjEEE)`UB6!w$vGKw5JDw%;0t#dWI|Nt=9FTVvWfYUmZ%R_b7Crel)n21lJ3< zjMuP{+6zCHmvhW3j8k%XylB=3s^pqjj4E?Q1J~FAL9qS7yT^AHxlyXfY~9kvAdowL z#2u10&Ri(dktT|I)|U9&KCBGB5*I+u-!J3;JhLEXODOVloGMKGt=3d z(h8}vKCQO^Vk3ZA-*3;$w}HThPxa;28iis&=OwgDMBb&Iv`Yv7>_cyq0F)p;tp{ff zt$>Hks}rHP>~Fz4Gw6}|Y6#f@uz&l6j>A!!rSIiw>F5E_;v7kQ+ocQKini}NF+NZ;;DcCOu;En@w7)o zWi8rSTJsXa@nrjYFZNSVo(ZG$WO@CAhxg0b=MHzj`!`hF#ilh?f81KhZbvX@VJ$-(Hs;Vn19^P*4!*0c|ZdI2y0 zd#8quv6>30ycY`81j(pp@UbAT!wBZY;1r^A_(wHT*bAVLvb8tPk-YZYobTRPt zbZw5uYytZEbJe^MjGJU3ioj8-LQfZysR0O#P^H*q`UO2ua&rJL!c4Z7{^k^oN~k4P zONbL^k#xu{Qkngf&pB+ce#+MxDV!i>fsDl!j#=7UqOUzvl5qd(f%U4lOB$=4uzB(P zoH+INHo{Vqh4o5sVv-57RNf+s%-JcT1T>x)W~sI?p&R}XfpTaKDoj{Vi6WJ|3osux zpMQuHW~OU%99frzKdf!X;8h@=Vd_Cn2c+>YS%Dk_bZnF4wX_!JpM@_>$NrXK$eS!t zKcb0w5d-E*4tJ07lfI6sQ=yh}dMq(<3KzM6T9)D8=(q?sa~Qgu9`plOCDR7M+%s|#?slb`nEXIeq87;C>9~8+9!M(w zsw$+={TZ!;5)eRFITi{!-_gbe07#`$al+|OEk6DhV*_)8wnnN$aKy+pIc*3gQx*ou zu@qnxru{xc>d}WEuSik0gic_HGtF(!fZ+lbPU$MZB7$08!(qHNG~iwwTO`bat)2%a zuB+3&YRNNb{RA?-fFSw$1O&JzF4TIak=1$8{*LntrMa+_=MkNf`e~S%7nfGxy`}=2 zz=fAi26;eKpu+6e*SaR^ZS31rbveNWlJtvI^~tTE!2eW>|G=(zM-gc@H;V2MtHV_xIc9|hoOkC3~dZ?6`D z3KnkePpjfY{Cx&TN_7h zv5hv>mvv$fxnTBgb6VHj{48l1y^NL*nl{mFOWIUHt*AWE$=u@1>V_#ki6KS`JJ|w7SWl{OzsBG7Qq!JDFCZE00sA zmzfhiME{$N-h$G?=9e2htz%2(a2C7a`lI3Ibr#KPwLE68E$hQm)t~% z*J~pJ`CgWdb|F~dN)j|0W40FO*1e@LaL-xp9HYiUKM-Poq=0OR=W9U=AJ=Vr*=Q%4 zbprrg_Uxq18}JLt@}dDE(&1{p@o)D{&WHSz&vVkAJ9`?QxaVYuMb=LF}^_v z6b949>!r5UvEXD<&|&DYz;M&m2eT?x2RlYDhV8&oN6T}#4yo?Hr0t{BBNv%Y=F?{P zdO*2oyn6MB-NPhj|K?A>v4cq!rA0nQW^gY$>|A219t2D%B*Ojhp2jH9L>{f%blrtL zqzprup-8=vA_pepH^E^u(rQSISUBQ_k#Lo& ztp^t&=eOaU(wm2H=ZZ%!ti7>=Rzg_%UEM}dk5{%~5(Y~S{5>d5s1ID0U5ghzZrl!vfntr& z+)`$c{p=Wd`azCSpjb}sq0VF)F6pUq2@BtWg`ok#h9YsK9gjlunD;oqNrje;2CDC5 zs_rV(m=;^>!W1Mmym3Qrpo-|brUY&@Pb0}UT(xeE4o*Yl5oYj&T?gR zvxgY_H$R3O7pGq4En9=-7L3j^^lAvs)_PAc&Zp%2kEYy6(hO+tLw6EiFfLgrx!Gqg zi4#XwdVjrkYvZJ5^~gQ?``>(0fi#a_j9(bWaVt_fFknEkJy!X?a?b)>WrKX{-L|1~ z;T??ZVc76*4m(K#dh~Qx1+ks(wS!XP>iQ3h>iGzW>Hf|etQNBNxQmkc9&3dON+LHr5L9&B zhs%74X*vgt;`T0jjD977A5`cFss8*38ga$9X^ihYBnlXQu#F7;&q2L`%-;3SM_Wdf z>V$UI&eXpe&od%|_hSiHe=$V!)bMfWY}~prbKl}5@CA~?>pyz?{ycDlxD~K&}u9@7|VCM~ZJT1cre+oDXG#cYt^jXgu z8xb*YsvxD$a51o4dV9-s9zO;`Z1vO50vXtGtO~ODrVym6MEn73aa1rieb({Yslm`Q zlW<48-kb}L^LL91d+gr68U=0>URAGe7YzJU&5WH3?-sVO&Gik)t1>3`_wT4aYzmA+ z`{TiFa%`i=-&Od#`Z`hzPP!?~#~j;RCeOhM4?ZF)%3E58=7^~R~;p$Bh7Ot($@brl!)VQXctfP>&ETFD3hl!0+$ z)?_xJYPb0}srF9bK`fk($U=%0QzX%#$rwt~75yNf&+%t6-nUubJ|=T&?K_#nj^F;d zSKm8CIs_@j4nsS{`3{+KMQEX_a5%FW!if(Q(eE#WYXvLKj+;qSJmQH@8xz*_k%-yJ z6odqJ!Okq)(TafU646*#C_{2YXYvXuqe@FR{AKn@0N3xOYr}C7EKWlSqznVb6Mkp} zOzgxe^tPcABYmjClK%*q9Z!@^TH}5?{0U_q@`SIhNFQ-ig2hmoA^rc@`UdDqnyu|~ zVrydCw(W^++qP}nm|&ubZQGbQlVoB~%s=n@zxRIYe&1c|tX|dKr>l4E-qqE$Ywzbl z_v*fRxv7)PJZPtkCsw;Moh2m@79S#3=-oskO0Zp&S0~);wcd?F$qD|uQsiA#_$a1ipS9KjZ;HYJv~yY3p7g5 zettX-%GL?Wbl_{%aU)ivdPwPlrgmrcN=Lp89%x2h0dY=$$g#4L=4B$jze{9YMd*5gEx`P~em4Bddv$7Yx&k(aX z9U`JUrkSlSGv~IOcSwuJJQ zd$=CPWxGH#v3dfS#Ti6&vX_4oaxhU=_;DkE%^k8E7jm_^4?$3yBT#~h1}<=c_Lunf zpO6_=yVVZ?erR9l^VSO(Vxu_cEg$XfKUp@?%7^wh02>|_{e8tlEjNQMz|xZZ_x4Cj zE!Yd4Xa-ow40canOI6(`1WnSRzJK1sx)!NOCr@TsI`h9A6S55JTz37qza`0KCho;Lqz z+mu>tU{18i^7!ISjR0k$p1t8y#^O(U$&SL?kRs)zaVml&QaHKYoZbk&W>t9v(_9?K zv3=yUULP9etv*2?dtj7K#B`IXb~tKrSnT?9Kt3FNoA8Xa3d8v%>Wnms&=l2jdVlI* zGxG`0GNYaz2=|0bHV)Dk^ysup+=!0tQwIQFGF=}|Q$5v2I58DiNRy6p!c#6}hr^3kft=fj*7YssxHq1N`iv6q1z6x(79Ue`S`D;?Nd>k_Oc3SgAnM?fGcL z9HAPNN0Nq)*Y}wcA3#^X3ukKWM7-h8VM--f6^}Mj=R==xA}xyqOuB23r3AJ+3XU)$ z5R>2=2p~2iUZl|UP26bR!)G>ei9l%~q&P8C!lG?Uan+wYv;QX7B53j34o+Th|5JiC z$l;m{J8{m(;dpSo@lxh+>a1uH23Q~sDXh?ApZ3S+yDV}f1|0D;kqh$naoJ^ zoc*)FM3a|j8Qtm-+Y<=Wu1(v7>)reJ=dChr*lg;@z=m$+3FRPnM%Lty6ZKntcoC&b zBoi=Xu&gYt4t6j9nY%`>E(@g+tY4h6B-oY1x@zIJ*KIgA*)&vI*E*_tJniokEk_-8 zYCd0RnY^-)##;{?%8q(k8jjw5c0i;xvby;+pJwDv12)fzBgHefy1&g#mFBOQ#g> zu?&4nYEZb3Q@#Ni>dPB;4Lk#}bJH$|dQP+bHoy07+8j_YFcuCEVX#Ek)^PU6DxQvU zKpF>7F40fhWrk!1-L>0X@uyz*ngn0Em3uNUmj!fLV@2Oo`=@LWNM{z&^PByjx8L-g z3$9W|ApsFk!qh*6>=F2GRJ|swV`^EmfBFT8T(HshVeucY<FbAF9hi~P zQPF_2bmv6g1tY+(f`MqSDny_rtodvCX?bKw@t}Pr)3#zWy?G6oQXmxz92e($$qp$F zB*CcuTHS-34J!lQo%S?He;vK|>+UnKXD{2O!%Ic29g|~Q>1lXod$7TH=R8b4L?{yL zMli9N;Ri1O0O$keONf$vh+ zrUT~CWL6=dxhf!rXcs||K%Y@->``Dve}R@+1+sAvsAxNt$!*tW4oAtP)I-sK*jnio zVU6AdEu<7usi1Lc4Fo*l_gNMaxVZ^!k$L06R^a~rVXLK0GpFq~zx;FPUU{MwBZY7W z$ca&X^A$ENn5>|7f84+z5$Kszqxzd3Os8EFXaqeaf$k!h zkbyt?B$6<)8=RU<&Gr~s9^T&b@yow-CYT%7zD58(0Sh%Ll)pVL|Df2*Cf~=1JG)wh zRXMiy^2ZoIy^N*YYVH5CD11_w<^yvf;BnS)!HHP|Q|0^_q#E}n)=hU{%zH$td7nv- z%UGijBONE-Fa5$--Ms8TYjGGmrwaVf=Iiys!s0Bt82r?aN`FLU?x%B)1|n;)%Fso`!e#HGm;~tLt_DbUe~h9Q z+e9=mBsHDG5gf}p(RO?hEnSWv;a<_wTWLcjQdLTB-x zR3S#@&)iWA>W34ZnE~`p2p7Zg*E>5ZR>;xNgITE(^z66*7 zSt0$Sr@&cf)2TIoDqd|A%W_9Y`Y)ehWfKk$Kx)}Q)4tp2rna@zLj7_8@A@vHkG|^E z;sG`WyN6{pq)x)|{s)zewm(d~4?(Mnu(V>kVDgnQMegH;mIo{ZqzT?iI^TrNc?zD+B=Kg@Z7AY zfkJ$!w@4O3eKI?sj3Tk&KFyH%i60tiOnNa{Jp+0$)}Ap<>j`i2bqbowo#^>lq#s8% z-0S=;om)rw4_sY9h^#x@{(D^=I&oICXNTJ`fojPMom(&nq7wWPcX8yYLH3iVz9EPO z9rYBc2f+8jU@XaC zSx5D(fj{c3?ox#2t-FfXa!WF2FtS|zlph`Zu0ZP6Qmeu$4&&q+!2g(u){P(=$JYTwZFd4 z`T{zlIFiee65_%DwWAQm@zfO#x$KX8m#Jn`PyGj$=1m310nlqAY2Qf{-_uo+Ekaxb zuAne`>8aO@M;soim8Hm}$GcC4%7({O-LA!bVVvV9?U|Q)yn#w_IrSXajR#Aunlgg5 z&q>h5Fem8h`^NsZ=7PKG_riw>hdf!;fY-7v&F%`9FP?W+zASQhh^f*bBZM+@vtN}L ze*_*rhq>T{(+WW%F`|;OO0ZiWl5CO2Yc%J@_=Isy*=Q`F$iNUTOGbP-bUF zv(8(WpW}U*&&7N|_3$1>V;vd)JIEUyj7U5)l~hZIXsq`ryZjT?&_R<$!{M~i>ZY%it+tx)0) zo(oqg>;9Vd7OPaQvvk1oL3B*F?;y6%bbVknq6LC{DGbU#H!kKf3O95y;d57J?ew^Qy8}h0(A5=5VOZ}~`_}(<`3+9HxB@;oG2qYH zqJ`80uO?nm(Iza~6BkcJ6}foNdxyxB=P``YdPt@R*$25T3Y|pVCpj66LmLVSZbo6m zVvQ4lMKTC0>>F5Yx%_JTsthB)h}f`DzrJ4+3>NqMxSCh!zL5|eo8LNe&04sIH2(_( zZYr4$Yku+R!B+>O0FTJcYgC^q7Z%}skOOc;l>W6g}6C zWIQty>CVQ?zLX^S*s-?KI*UWOuk{Y0Y5_mqVJ9 zJOUv=853ch5Y!1({rOQ$vk~+4hj{&W&{VI!23!!bmuvb@SYYQvQp=eKF0;DB+ZT}YQ zycx)=96#!sMDu!swy%iY*nW{ofvXs8b!=K?$qugGq-aUE2w@LK9(|2@Y*H#iXLkRS>Z5O5-ID_La9%g z>c<|iw3UjcWV|Fl2tv)`f?YvZL!rT~)6UAUIL*yNAooUHU{OwdHFWwejuzVuY0_*|D% zdKqMg`!K~g|2UPcBjFDktB7m+l8ooYS7WbGeKa5g!3RAAlNJPKDo1iSy8#QfkF9A7 zrths?@oj1RvFi$v*&6jLGUB5JmqrejhC%L;w$#;LE!V`l` zc|kriHnOsyI1sr41LO3IeJ&(tPzin48~V$1#INgAFbpoBb?i#XoP(d? z#xvd>5_l666HV8{Ys0Od*L#M_ZZV8%=$DDB%We7d55I0zL8fRm>1wALb%d?%p0;+f zuSq{ZTCNWBT2HopdjVR~XVXm2cYZyx7j{Vi1n1SP%Dn0KPndR-aS5PY~J*%e{3YL5P40!`9zE=5j`=Mu<#-+ zZ7SK3eM7^M#@i+JF<~WhRGRZ9%4ZCkdfA+BR^JB{52jCM&vLvk#KX~d{&1JNECa#c z-P7oY(Ga2>){ctbeELG$W;BT`NU@y!3^NzdrU5jTN6M&9Ug7Cmkru_HPTHT}K|okw zex!@AzRSbY$LXr}IGxICHJ+iko}&E@o4=Dc!;A_x|WZU~>i=G&r0zO!rqF zy;1aC6IZAxI?A1!xqDiY2R`#Yz=%tb)Dz8D0S?(HALu${6(4@v3&^wXy?yA+@{wj0 zSFHtK+8LlV#lklrBbIraLYO2eXnaPE7h5SckyZE1%OGXwjwvlC@Uj}^&dNVvx#VGs zs(3X-1S)^dfof=}VbLRY16mE}Lr`K|MnI9p9_=io~_@eFI`-V*#B&g&x22*9Ehj{5U z{wBQy!~OfiZ+EQ8DC(yB%ekFulCKT>PTmNWcIP}AzC;YnkN%uElcCps*#q6zM#+T3Kc%~`FtFz0aTq#a_vMz|`^4D( zB&fzgh$t%f#Qngajv1BtTB;M+ogGQ#A%$g&0t#V<#6Jx=$l1HwkfZSEQJV0%q!W(09Od=L{Ols|xI z+2Lr1G8Hpm{gd1&a(pFHvLJ9*G}c{&Jw{Sx@Q`0P)rnBG+*^8IPFKfz<)x=(WMQrZ zDC%pqpQr6c%cjLa>bNXmZ^IPaa%$=v+ zOY#xtGvBQ+m<(5iQk6aSvpeRSI_iN2P?b;nu%E}v94`WdzFIxa*K6wj{#ISR^4Azt zy6Fdxz=y<3%c1|)FCwFt3-#N4XA773w_b{|qn?KM;P>#Qa)`}^nR)K~-m}wi001IF zC_91m8$XC7)Gxe`HVb?4`bUYX#$8T4WArp_x(uD3MEiG4nXk8Q$cY21s%R+KU?BWqb4aURlnS?hZQgLkF`Kj|M&?ZQvPYsyFBRaqJ z5F>eIP4qLpnw-?=InIUZ(yi6XZ^X0)h8a)CcNmp?m56VSm)^X}jMc>JaIk(E5M(33 zcQ~;s92$ggwKtVY1aTnOas^QKkB`Z39;?@A1(nz4RQvy7|U_ z@0jvU^``KC^XfYUi%+)C>iPI!3b!+HSAL($dap~GbnR_Uf(pA0zFz|nQ6iDJ9Cv7( zmlL-%Si>sMF@6}5G7rxn_NZ#rz%mkn`q!R7lE_*~Vioh^liKNy)0fq&D{V<-0hzE9 zI%sf6Y{#f%5aU{!@tT7pU2 z*bhIlgo=8r8>;YDEu#JWk6`xHPcD%Y$E;&BP2DGQS#76*FFdMiW^gZw5p8t9`7W)1 zZUsff?}}FDEDR_cN%D`Db?uPf_}NHtkJJ_~(&D}1Xg$PXS~9%LF9Ff+7e6BLt6q6;pNgNNucLFBa7@huP1X8S*V)bwDV+z5RFC{ zxukgoB}aACO)49SwKYnvpp1-BKSWAduh0lqcw$2yd4i=4)EplKa|it2Y1i?ohqO|) zo4cCK)YsFues_|tn=FqN>?)kyb0B-*Sg-A#Qs9cpbBSJ`JHm( z&%~l+2kZS2ltkir>lih>+zz<5NSX)QGl>+ghiUN&E|&-c{X~mK32V{JnGDrXcLt zB?UNbr{A@Q2Pr#T%%EUfTGYd4*X!az|3%_rvSv&mR030O;@r zv$z?d>>RkxFW@18km68t+twg!w!?$H8j1n9F|*nm8*prni5N;HORNW|^|zXj=v&3f zrK$qTv5na@%WCY8;v8)*9X98)J1;%Cm3OV{F}F*6wpS*+701-|2^z1sQbEXNOJt8a zxvt#Eqo5B#8ILXSQ0VABc?UuEU8j4sF~n9_xtAnuRPn;jF`T{2D`q>38McKZ(7B zm!?VQ)V!(r6XFFviX@0!;X*`zvWf08BNwyp^~qk=6%vHyIBnaB6~FlxyE-l8sAv`J zpwlO0cOS+3H6Iw5n{OEVUiD|VI5 zgoJP`AVf37neVgHRr(ez7>HjIgL_(BZ@~ehAlmMxaHAW2Ehif>$+}gLw(wI-y@IzH z#i#N!7xt2kbhe6T?s=%5@s8;bpHHu!<2S^Jx^xjXTOtNrBL}&QbvwltDtsu?R7tb^ za}b4*Mdki?NdR@s`wBTdYOfwwQ7YP^8U!-q8)4yfyR{nAB(xwpYU*awtZWOIbbR|a zf;}yN6G8h#WZ2?;g&>`A?&59l@NwO+qa-tLuWr2{7mx*`ABXst)23xV6t#cLmWfX? z3=mafEQX-_B+B7_4*S(d*f3GUd-aUvpVS&*Ac0O)qCg6!Wl75P4kZiXSzx$AW7^%6 z)?U`LR%J%LNOh4ei>ObX75nS?0ku#wf;+o(GID(=6DE52b7_oBcIgs3l#y?ytEbL= z`tb8m!Q7PhoZOcqGHqXuqiremER3Jpx^aY3GS<`701_}~X+uc^v|JiVA1eb&cX5-OZOK}XyR#a55 z6bKIjV3cxqi{S%;3^kS-;&M>^arj`MkW6J@drp0;ie_;B^;(+ppnlC|-9<5A*R-H4AdAq|#*HD;-W_{_o6r0IS8l7aZA zU+WI~KZ=4w*Qpkrs`*D0m6gp~r3k6u6l;Cpw&(|lrGCs3eA5GFv^p)_R2a|l?xY)* zTnHhlPnMTvk`WTQ12@ELOw!qZH(V-~$dVJzxq&=H760OT%bVg;AwSQXsMTkhst+~8 zwO{A(2};&-V>)LWHE<}9Blx;@Rba6)@B1*TSBurw*grK*?4g0XnjKy$6&60V?(3L$ z$#4w3zV>^>%t<-F|E0oOyu9>3hiS zL~T6i{j!05TFG(zF!&wtJGga@R&bEjVd^>7jMtjeEJg%B47QX{>vw#{+v{|f)9u;n zg+o7ZYpp8YW~6Q|iw1DG7PB8Q?bod;JgXY?9maO{EjU#JRUKlu=)w1AS$I8ZiO&^@ zjmMKSN9L*1jDzbKMIsEj>{HYY6rOO|62(E}YCesN2(!ih2psuRK1{V~tNaHXjOS8Zp4>1N*1Wy&lF-%(O=Z z6z60N6R#G1CrnT)Nxc#7ExBH7_i19L=;x=b{Hbil*4IuF$&sa>x#{>2I``SND-4zU z2ocC9R%*MKsWq0FHJ)C0COiiko?5N6Ubv4`tDoHYb)90t^?!|!_j&rj4$pmh0aAha zQ=eXd({AOOLrwrZJWpP%t%rrRtyZ%}<>9l$(mGZ7hYx7V6`Cw}>2A_(bMrpL3wlue zi+vWujGE6!m$}ULX3!zCL4;dppdlJ|Lmk1RItUL<`Z6%bE=M}5eyqrfg}4+tMUe~i zh^y9;dq?C5Ub@BBFE`_8bln2oQuD@-Ss=$e1H|Z#Y%>CtJJ$a2OPmknHz-D4JU3t+ z8^Ptc?T-$cBDP3JhR2*0tFV*~&j6eQW3!WwQn$^RkL_KH4HcfXHfz;MEDaJjP{{+@ z6S?mV;q3OCJ`J6n30R(2TmbjIXm%}9o~%qy#~jRSc#=Bh$Jssj3%~Za3&H>-SEWC~ z2Ib@@zS-G}TfZ27zcYe7aaVC+iRg`;UQFIS1&|0Ur?`DpOfW9s!i>IF#0X~f9ty`m zC}>^kvKm^??^Bv`(el+ySl`O!^{b&gv0sM*n~8ZevJ$+h9#zxg;YW==eF@p=N6rwot3;lU$BV}{XSmv+#8>#yj)HRrD{5$Ud^5M z5hD~XGzK4ri)Q=~>Kxj_Jq2!Sfg;%5Y)l)M386$g{}|~7jN0-p*93)SfK@$>*{5Dx z!w?yXC|wi64}zFE5Z|2%1&kXyjDo!@A6 z-v^^>AT@T*X{K=RdX6fcP8fHL`K@2T0frC~KH-9oSl9YcEy&n5&5~1KAXe9Ufs1JC#%l5S$zmLS8q|dsX2J$ z2bPuwYDj_1M7X*vcQ1R*G(4ti^kF^jk1My6kO!(d-1SCbrf z$pYPz2_+ZjrTr#ml@%Lry%!j4?bx+@f0Gb7QF8J6;iu&`D-tMt|<0J5pExf|$r^ z$wCG1eCXFX+d~zEikcQ4HxnBXKoDn~ll#S>*TU2MpbGFc4tL%*yq&>EX+FXPRHBz_!@fJgo`LKH-Bt2yZ%a!TM(kE-64awBM!v>}F}C8^sl(IB?YArW)~1;4DprouOFPv!9($;^hr|P96)6*XmEV5f z`q&+omBpy^Qk>iNy`^Qn`2clt+FkUgK0vW4gSff1Aig{QWn_3l+4HR5`XfUHK&(d3 zGdq}=HqW6e8_{7(8%(&FfRgIfsMc`QVSArWFJ@|(&|pKySy6fvC;zWla$z-J%=B3s>QuxAJ)RAn34(?SFs{greOOy9lVt&0oo;J{Y2r&0dQ1< zVVsm<9WgUD^5&Oskk5jjFJ@oeEF-(AvzMBIfMQ0?J?5rVN{FXly34SK20C4EeVl9^xQO~11R55Vm5kdz5<2q}pJ!@@LT}8sk@N77rRz^1q2zKiEC^^I-Y_!0zo-4e`T3MS{c+c#R3D*mp2u3 z@QDs$#dRLfwMqo;l^xY2S;7$w-V59u@9)TkQ5V`JIlV=KY+`zCcq`Awe6J^P-fEy_ z4<^4BKoeUD_E9ksqpm~;JkorrwUx_fOiRGBItw9D!=-4)_gKXaCBA?jn2sF(`QYEo zrJ~*jf&9A5h&_(}c9*sw*;ZEtWY2$JqI9vDa4D&5j=a3~G}N2Q;&!YzmXi+9!wLHg zORac)E>`(z>+BX(UCt%(L!b%mFe%weV}W*}xysC$KuNPL+9WAIaG12(O{ed7OT0q4 zpmmD8W}H-~IhsGR7N{54EfG?q*ouJDa#D|MtUMa_3&Tit><960Cm-LCXrtEz!A=xS z7i$>$!~n6ctyiM*1`w+9#{RdLfTNJYg@XbM=b zL_!AC5gsciA{709(0owrvT)a{{Vb~+yK2X!%&++EYEFk=Ubnc+Pn6Q5k685Z6VD(J z@g4@~UO&p`Fn#>V(Xaih%wzPWI^cO}?hxD0hr;)^TWrsWeK=y`xF*&ocU4~m&UDSP zd@(k>=J92@q;(0np*b9P1~)HV#<@9p3A@%-X>e2XG6=kWm4&V@b^j#YJ%+?-!YM8lx|F_x?QHR*eA6uk)AUvxBDMMYF)0Iz)9Yl)%h(?$Fq&AEICZj5`DsV+=J`k+NdE&S@f-1SOUnJ!>KTbh z{{lxMj}Za==fP{hUBo|sfz6!bElLp5FicD#UikREjrHrXY|b2p^KpE^pRuuT@m4Pw z5_FAw8ukKuA3(nCIcan=I-^%nY;W`eSX5zFmJ+e6 zN9^~*KbMg}0Z>x`0GOZEowI3SIDzzH_XID%C!t5uM|-GmsI_c|)Alm~sYnZE>QB9< zpDY*x4+p)b^dxK6xv6p>2j4FR!(RhEELovVTJ%3khZ<5hZBAo2G%gv-LO!{1#U0Eq;Q0vR22plR)7DDyIfAL^;@W8BD2oRKH zpA_xo)A&bcFnX1!I|1450I(hu;At-Kdg`l0S(Fkg|9Y0Ln|Vb z&i*Qpd~QJM;3Rk0M0f)Pf?Er9!@XBHY$kMpI5%zFa|9|gmi{ghu>G)hd%1XR?~aGW ziZ#1(ib1`cH`tyo{qK;nzrby9P?0g!h@fdK^1=axM$n>$Bs@|}t& z_!3s&NX&0cPhgVw-&r*0qf<$Q+cR;_sDAi!>`kw?R(x>UCRq+~<46Pm0KWTA|6(Zv zp~(6?0RBe_0N~e9my#3$I)UfW-3$w)=ss8;*Ja8Z!dzR=A;?p(w}H>KkIMSI1y*68 zRfPF;0C^Pr^#ew_Q5z!|N(LxK2{$k@)Uvk@&GZFULUk&+by_~AU+Hj+ksBj>Gpkm{ z5h#v}ql#>B>+&|e`{9y>X_E?8fFD>I zactsGB(G-A(q$_vf*SMFTd>Oytriq?81QVJ`}GbK12;w*J~y+l(SI()$OC|B`O4HS zl8&>A|28_Aw@6XILE#|PPYtqSai(W|ST|c)MaNbK^SBL>v0s~7SO7QY9`Lu!Q*(=h zxrr)GzE2vfDS%A;d>EjB_>8}{5aTw%xd7_c@7=#dcX%M~6_C8YrhEk57>n1Hq%_2%GblTJF6fk~B<@e^+G-(Pp@6H;N=HrK z^FAvEje`~ZN9zBvLb6H_@NDy@_GmyOtg3zcHH>pO_a)Kdgp4VYjG)BJ(g03I+G5Zx z(}IwfOEl9VhxZZwUh6i<`DAImZ=u z@fY)i+P<~bZviDzv+RJfcsx5lDLf7hTIj6LW*Qlc6-;GaR0X|!0ALn}Gva~W5&A6Z zOVN|eD4D8cFN5@!?H`t>k5R5`UsI!;!j_t9DRL+?Yb1N8cBv)k`Ua`E${f!Bw1HYV z??52XE%gNq3ruf@?6CQLao~!dj=>NNECs_FdI$fX8yw2Fcr=WMq2)SVVDn1-hRKr%%P;e5UY;sv_pQPL zc&Vf0P$*t9Ib_oz8`=vH{@cnZY4wZ0NevP{6r~UM@;E(dmF=}bsVK=yr3qh*@n~g& zmgSNLE*T&S3X+c{9sZ>~wA|Qa&a~dyey4409c?WhczQ7TVF^(tdAWzD9zqY3&v$JvZgXlThLJ;K_n-Et3{27Yh03rU|zSryh-U(JtdmZc<&1vbNo%y%W|5vdTWPQo`42Oh| zQx)%smh+g2ktud%8?k|Eq;c9X@Bw5`3Uazl?#W%79cTVD*nwWOKm8I5>z%;@StMfc z&&=&cX>=5OzLFno;Ta3CkhYb%jjyjIy73dTD)RQiS`cS$SQCygSWlchwrT*WtZ^6? zaCmur3S&Od9m&(9=2|15AA&CN$C+_?p_|PD3){_e%~Try>0cm)uuMgNmw}jYs9kJ6 zKWQRL&!^E7zpGaNJ!%5hzWZcb-W;OMqf!Fa5`gwk^}loI^Ep=!Eg9=qrUksGO{Q$9 z=)y(`E^Y9jV4%$v+zW|>pdAFl-onw+>=sPhq&jhw+Mmqsym(=@Vz2}~KxhVI9>LXJ zyDTHB{!b_W+ZNZ2IP~7hUp{mym{tpOy&`#9y3sr8#_)g_v8Ou?w3>9qqr_H{R5CC5Jvdl9aIdJ=~qI1tACjwe0Yk1?4 zeWmk(p8x z)3PLwqEvRO?PQu!de_7o-H?knq&`0#{yX2Fe`*9W3hNQfn=;{IuqS@75K+0WzwW0x zy@k|1OGqT@NZM<7@lj7?gBtjNh>upgRVN92=6jj_}Br1p>>0S@@Ii1robUj(Nj&r-C{4zvv5uw{AE9yV&O@#Ls|4dv=Y1 zeu*mQH67DAbNhFv_(H7i*P>4WV~C1{2dF$&Z~oxNuqc5SnhWQVxHAk$Z@pIV>ViEG zqh1k3{0nmR|Mom+^(t?{s}Jn}5yl8B{tU%T`f#XxpNUQ8HX>gbsq$8T{(VzjO8tS3 zO*6>puTbN`Y4Z`Cii+g1wl@(Qysj-Tl_?_CTPeZ>0I0nVTLwhp!UZmTEv)HD@TjQO zw{!UM?0+{5v~Y;<-#h=U@CnQZ3Pd%f#e4%$=_R=pn%ZZWF#@rfcqEF+ejiC#5|Bvl zR`+L*++;;$90W5;Ogm8&m~D8GU>N)%j8z4}RSbmLIR9lI|DiQuP{lEc{I();?^lyKX=kSzr;P(vc}eC$1N1`#@+HsOfG?k)9a+y?GFyNm( zx_|vQ^Xp(*r1l5TbHuW)-f0T(%T+8oNLAmUd(Jn+Cdx34@b|LJfl7*cvFablfV6_% zxzf~D*9#h%mY~xd%X5(#w#PXD-hXZVzh!xCmdKb70DgZJylMmdamd&qT^Y3BP@=2b=;Ru2?Fqx&QP70653@PeG3L)_9X|YfShJ zA(m@CUv2Lpq)7Kk(dIKmo0$^QZ^=37Xq8!S+ki>3Wkbjtw(BQBntkW*AmCr`2uwQ7 zgTodH>MvpHYQz#It7U$TpPPdNyaNC&|1z2X-N^ra94O}*^0lMpC2;odGqf)wgdlf+ zx@{AE-JckH%aYjqt;#QIClgXSo+`J)qzDO1dH{;HFI)r`;RBF*gM&~70KoOH_(Mns zTY`-cl}qX4P`mXKmEMC76%nBEED~mjLAzn%y-mhI@7eE_Ico7RQ2JHfD?zPK#AsOL z??j={-stf!ePcWoo(Tr`azn!2RPPai!zM);ci}*<6nJCPxd5i3S^${3lC!U&YHLB-18$NUzK@wgz6M`?I4MOCnx;Iv(59^>G5{6Zyv8*4AaW$z=L`Q z{?zx8tc)n8iH>={w-7z2p!wz4Ml5mZ99*g zf;+m01%9JN&IImL2}?mLrAd$qJ6e9tLW>8;B{+%?)!jNA4eR@6UgLao(rnbr#iPB( zYiIeNPeK+nV}T0HJ*^)p+iR~q*=+@zEBKN>cZG0_@dGiXpm>ZhII4|C7e>jVrN7xe58ZM2C{XNJax+0VjTUoep7I&^jY?>o`_21ELK4ZU4EubEL`8J7Qo|Ja?#d?Bm!k^-Wj2!`J2o*#IC^!&&X&BVjddw4r)%$;8zQcw$dDehY_aWdJp~HKRUV;xAST>(!?2 za~f6;7-q*p}7UJPvx=Vu>>wiSKr$vJA-6hXhTpW&SQ-NPS85WX z;ZXW_Ye%b?gvTB(fzvp_Pq*7Bl8P3l0vrc@SRz4}z`r4G)qUn!5p4JdGh(%56X^Tf~n#h3u# zK?$e^sF9$H3OyaK{_Gvbh}Q&VPMK=T1|aK>BjppNGhSdULDHZSluA*8KUI$KJSFzp zr4`_RvBe`rfd^=bDZ^2qLQ&JNIC9$Ux^1ycdwf_t=)WTlewa@D(Hlq(Q-VbYCB_1i zW3r&MzV-2VwI6eOr#szr_pCm8yz{|z{0XcPB$F}MPtTW_JMkCjJ%7@H-JFU40zGU7 z0O;CR#@sCSGf;|(Z36&+3ZXn3dja6h*%kKRWCrRlcP6d= zA5-rbokzH^zFMOi5#|a*y=%7DE zA)c3x+55`Mx4L+?0SIDa^2SX8qOP%;0}*N^n)224$;j1F_P1YQFXSvlj31Z-gfLg@ zndV?kU+izUa_Ash`(!%N*R1la_83__Ss4>5fk_kZ5$Riw)F>}{FjRjqL>VFTjZFSR1V4gCMWpAz+G5?lc!560I?4tj1)MV5kA^p7Sq4ABmAQ_@j*!q=iY2Ws*D>9Sx5s4lmlLAy zo4}B>=(M7Vc>N41`^EH7p#=>W#0Gy>kAjXc)*>G$8n&3EKpl>`?psur@xxk z>cDXu&X7PY5Oh(d-;b&6rVDKTbqec($nMz>t#l~0f&$2#0}qks5L%*=SN>yRb^UYk zcx(8|PxBy_YwgD2&v=f9fi z1TPw7-@td6v(iBaOMoad2E&C$;Td9XqIl?ZZF${Iqr(llEL?p09!w;sJ4IM|iW|OD z#x_EpT)YrB87PEB9uzJg6gq`=w49Nzon%SMXv^)R{j~-QFXJ@l^=~OF{2AA!fep{O zUA7FuGcbqylne){`}V8~KUPB3gv%$q+N75-5^m^A3vrUWZ^Tu&jSj$PX}bmig8FoP ze!cnY-V+0~b)(x&!DKuR+BD)hf3**KiZE8 z81~}~s+`y>nRYY7U5^=tH9qZuCH!$mVT_oZ&T3(D%{0G*OQin zjQ>32;OQ_(`|^ynlr*p~f~7$0Lq*Jf7S1#^Wugsk&D}N*hb{ZqsSCYKzur6%AlV$M zhxX?FBN;RK$58e5rsC^t-+-Bz#Wq#{6F+ntM?qiAy+xkX9M`>f`EhzvsjRu9vJjkt zddZ4~d1@*Q%~7m{?>2tDM@Uwq7?u{0K||fB@ix_+&!RNa*JGJN42ys+=E-Q39gZz2 z*qsA4{6wKwVGa56$}gB;@DuFf_Wiu+pad*ltHGlvaDCZU@JctBE&^e%HhA5SU?RvK z5zcK8S#oH%7hJSN0&v|Ko>%p!H&W=_R?9wfQMf9q(97vPgRd@z6&hmk0B3B04S;Al z1QN+YKW*%YV0P(4L3GIVwzM^-K-z~4BLzBuA_E=J@-e^ru`K$bIs0S!a%=FKuzlU3 zjX>7|d(;dX0Kt+b>|v1Ltucj{S2rTGlcXSoDx&43PUMEEm)DKpZQbCK3@JG}*7GO$=D$PtP5n^-K8qHOf zntXAlb5*&~qaA~%=5ZLcWpImvg z*kPR4McHxt_`oGsnYz>*0AaFi`hv!f><$uM5pi-a-VUrtk5wqA)6j`DkU3`(-u2aY zZaX6(5Tif5!E424W;g7ByeRA+ z92nw;G?;(kKeih4(c}H7laAkM#>hqyQpliYNjB6SKj1mukVF@~nnPZ`Iv+BJm$}>7 z2MlbMqn(f14eQ^ko1NZ@65annEF48v0DeEVW6i!u+dF>a!vIE*EMsTGsj&zS^5>8N z#YZs&9BE~#nQm9a$0n=sVUR&c!o&i=K^kt_(F#1h|94kY$zv!*(6D$-i4iq6LXfzz zgO;g13LJRf2A9s@QECXx>i*ix9P9Iy&Q;_xzY;Yc_OpXbYU0$ zR$_|;S~6fIDRy;#2m@fMVt0*4Y;aR6CYA>cE|SH>_S;+{C4FSpilF23Sc7=|;-nXL zx}4~2NVaLNt@At5(F{q+E-LyFRFZp@gIUT${D=u0Tykg*rfNyj#tBQ9EGr2JVtdRx zW<=6R%Rdz-ww4#!damwQCS(%emErAh7fWbQi_ifMvLYSgY^@??TS`-bTmRhrRJR(| zke|_U!T=;Vv^aBh84OYt9y)qNzb`%`9{)ic@(rh-@Y@tDl|}?Y!?yK>gFs^*@yPN9 zAC!^^%hL4__KnpQWU_Zc2qyuQ0Pv8IYEPQuf>iJKBLY`?*>A8i6A3y020=}XU^Zm}@+f2;fp?B?KMD{Ar6bS=>=0M<{Z~GPMc?#4E0e;gXk}5Y$ z6eKOtp>dDUk>cT{CFfnykg!t*)P0mOi<+qs#Rs*3AL>H|y&Zd!$_Ol*9sbHPTOTW-p8^4CGX|KRJh5AP_W3ufF zO8~0Acc2n{;D%1Lu!anT9jj_a7AF|WSXoO=0|h=(WCywVXRCOF9_KDir|nLLAy+kl zdA%-FZ0&Exf&4mqE{6;CyzB<+jvu)toE&GMbZEH^EWmTQp~-#f6K^ESs!) zt(-8!f&j6&Yz`D7xXAZ*mRLp~e0!eys!hxwQz-UXZF0{z&S(Lqy@QUIyzb`Je_T%D zL7N!v8?SG9Vr7R$AfgGzCEEC7$^xNt*n3e=^kGBYaUB@4?C@Nn5LS9Lve<^gv-jO} zZ`FYhfA@U7%1^u4S{=BPRb6Yu1BA`hIXhU(rcU|%oW>&tKHN4ws1{$p$RG8IayrT^ zxB)_Ks8RB5d|z*$M_{tL_+5;=hIpk@+W=9>&lH;YvFvXVl3L+33-*FurkKfeIwC(d z{jcX2g>=ou0^ci3Vucnn29ljj`3QtxLS@m`eNvrK25H>IfF7W(d zQ8N9cnJB^Ab|iI@gD8v!X{=14Ew>Z#e%DMGks$3bMo95WU6rv{#z-$f@8)@{M+tl^XCD+qA?&8=7}IlVUpt*N!i$&m?c!u7a|4ALeAT z8_$m?%KS{;wWOXri$~WBO+2paQx)^gSZwuf6*0QpwbS~!=C4%kbS)m|xBjCq^>_uI zR9Jq)dFLZ2O2ysAv~2*4q2+Q#m1T5_rFx40E&~^3z=r*!hpjj*K?Du^*R|r`QM?Ce z+CbDb<))xWB);Wv7gUFzIM5RzbVniaQS|mZv|J|s{^cTj(8rNfd%s}cT6m$HZNzxg z2qUTG>W1#m=Wk^8E#56Qx7-X<$a%{KKug_?pB!lJ7a*UF=lB zUaVC1bPb+<5;XWN&nI~IKQM67bL;qXqkUl7Rh!DDG>Jgm5`}~};RXXYB8;qc-75bQ z!&*8xm6jJ=mP(N1$~VAST@)~GO2%%3H-`Cj-7X3K9zCV?B=)!v(*0V_ySeOo#EYa7 z3oz;)NU-ThBiPF!yrALlZU$v^;nAj8sa)wN-7GAHYW@8a4#{f;I5S$%tII7B7@CbR zAh;omH|#J%$ayE|9(6JEDBsKB5sszYl8PuYpsAc;ibpBt;Zi40rN34rJj|n-tVb+Y zJIU1C7~X~{=}a~bn*Am^U*aR1Ku>NVf*8ULy3d_6gdj##IBYtDhi}zjILKP>=e*t8 z7kcFghj3AxVI1ICZA zjI(IT<($$H`20QI6Rq&VkjBaT0ppp{7IF>(kXRq%| zQyPQFq%2jQ9@26XZE3E|aI$f*eox-BNy6ZS$|o;rXAO2HwJ9Ss>JHZ6|8$-T|P(do2BsdQBIb zWf&XA#cB|sEfFhFl>*XMHl(O zx#8D>M)~L)kE4AB@{al5667Y}flc(X(!i__YFh+}d55IIr-;-4|I^X%|CU|9vkvV4 z!l>{KNKpQATmk_%0ud5ek4Dv~t$+4-6!jfUr_tr!ej**0pT+{-!SYG$d_TOV_@dgz zJsy#Kfj%c&PP%!%zkZ8-J&0s^@P$`w?4WTCz5bWb1m9el|4DTa831F>_ZXzhvb06} z>oBvne&aN!J2zon~y*AlDUhXQqsHf;d8&U8z8m-clVas$kG~?Jq$HLlES@ zg;>aq$%<5@Rf_!lqf+bCU<`wcR~bzjb>jOln5u8YGa@(4>)jT9=TwiQpG`M6J@vFy zn{n&AVQqN7v!{R1`hVYmks-m!;z0sBSwG>Vo{~R|8crt%OXqK1-wRnnuqqA7MF4e$ z5-aSZ68Grg^$LSi9N}k6R*K5WP0CszLE)^^g_5MlyMGIR*2+F#KgvL_4tqB)^;R=f zE|QQ9I&sZPO$S()joX43a!B#=AQ`#DjpqHO|W=HC)58W{aa*|ChGze-G)`vC9KOS6@nSOK< zQ2mC7zn$BNB9KmOhbH>{3EIU5X-qEk)gvCR6yBVWPk`ki<~sc9+|la)!2IxrI9#&- z6z%1XvQ*8E9=2&xLx7BtN2VJ%YUOhV#ERBdKx(q z?FlH?dFodnZ6>Rxj-}=-jbiNOgoJl7U47RHH{xnu2DBInG% zaU&yn?rhGbx8XRsJF9elL#sHTW{7z_D^b9UjJY|s_K=aV*L~~)R&rBh2?fY~QB+Xu zeA|`rTK(j5!IfHjMj&OHYhAit2HFXDVyA(ApCPf>k@5SXy zxD&l0G|)QbSGr~&xHhWB+L&dZocQwhKVzjeooaLlcuh_P?KjHOw+m>IqlPLg<*OKt zQZ7@$876GYcxX?7!fEeq-K#!Q9whf|ipuW98h0`Ur%aUWxN5lJ z{&GJw=s%cKh@R1ls43&+V__ z_&=6B1%s-9Sc#1DQ!P1BOD{{i=0bpZF)%FUsp#3e%D&{yj}j!6b|@i<51CLyeyYXaZ`4yh0P*2a{)Q1vs)MnFM%@m znlo1>P^;e<8uvnAQ8jEkL~LAOziUE{_}4L_*hMsMQ2rCnfu|#Z3?nmEO8CY{zo8=s za@P@)OH_4=lT8tWwXTOM?<+N^V6WwdC(bz9hKabeZVro)yKI?Rc*|LGeDeg#P)(wi zMdTEOSNaeHGqWjY-&`;rjeA<0d&LfS7E|$cTv>+%Z5g$x9Q2x}N3#8!$X$@0Ty{*H zh^oyo_5@Pc)$qn1aF4&*(I|=WxB`kB0=0Kj;EdFj3Pat6y8IpQivXwjXA2=RFo^Jm zcr4<)JMW%U2`J(e|BdG9jb#@OabN&6kg#x@A+YiQ>Bb6P)KCbzB-O| z3&Sd&Maz`tFgR!%+G$ug7ITK7y)z#C-@b_sq{_8)F zvn<1xzYNbr;YXEqpsRaHN!>)l51#m&zP#VqgI;E&DF7Tj*dfaH=wMas`rC60TsW=t zzm|t?nLn?wlHYbF^Fm#IPm36|8lvoz({hJKy2FpUq)7ad=glTmAm%vx@K$&zJ@c6| zmHj1NmWC#^E62o`qT2L(CLIq|Ug-HDG!8tRKltRGLHzeT^@s3xB_Tim>_v zQBfY^StK*9Zx!{8_9=hfjPmj!@tHeV9ThcK#Kp~#i7D*W+*62v8B>lD7zw4j6A}mR zsTOxTvE=e!s?6fzCY#&<6pFR{< z-vfY`T875@*75+EobayD$%cJE39=9eQN$JmQtsp z060E!k7HRc(b$Pwn);JWzrJ|Q=j>F1<3j;aGkErx5{_3U<>oTEPnc4i`pLj;?|!7} z*%O?#x5{vWb91t3`)~(@Uf!-b7r020W*~$Ae#A1h!8|?|oG@N0AxR>9?^O~LdyOsI zhctj}#+qJIJIVrUX(t|6`2)tCasyXpkL(w0KMX6M$wEPtKx^WXJxJ)E&jB+8l(75P z)$&p_73G4nJbik3JTt6jFu{(T6^$38doVr2Y3wAJdxeys2L=FT{IxbN^3ff|9a z0^sbY9C(Ix69D1^oA24lF0CJ{d=WMZT-#uyv9CZaDY8V#s6*I;7grd0MGyQOLFE>U5@ z-6VXU-ha5VNf#16#<CVUgr)mBd3T#S#Oj4jI>ld?iJq^-7MV(#%$>X8`r?P`d!U z#QJc>8+35){ra{;+7nKj;75b{0$@&4#qZ|RXs7#V8ipAcN=qvaVMDHA2TYrUX}Yv& zSd`=h-mHuy!9r|YU~Pk&1=$kH*2 zR+ZmJ1q_&6paklh2tZSz!Hb;y-gGR5Lc(+3ouMRuV;&p{7w}P()$?90DmND)t6t{C zBx%sXx=VYdGY65;TZ_-;1wuV8f12P?M?SKTP{uUx#h}~;a#mWr{D>$_>7ZS@gAKJD za!~^G&!Q~uaUQ$KAYL6`fVSagmf}Q+D-N*;TAL=3%z+025-s#3ApOtVrmt3aU@7nn3J3_*hX2Yqa7%iQyafSC9 z$isqw_&_%3X)ip6A2!ArCNmPeJtiuZMl1W(#}cG~kv`-OB)t)_fr|2pW|-$t1}v9# z^*FCYPp&B^MB`_*AUHXQ@a_U&O{D5qL7t_$L4EcG&`Z&7%-AgW)vX=eU9gKT8&2=? z3eZ}l^ijzz%dfzT4v!&AY`kpzU7G!bDCBYeki(lW2#HMxZ&FNOv`<;~aExG=3ORo- znD2U2Wn^}#R$?;X{!Iu`zVsR|? z!Ikr*)+80QM=sgbqO#*Duwok#DJ;piO^kvLKQ`oS8k`fzRna*eDD z^{KAZ9-fTDV8-G?G`sK)w$6==!zdKR(V60^A4Ug;FATr3W99fpkL(CdD%4;$Mj4ZTvM zAJ=hG>5pea`_5yWM-)@Xh-MC;p*I!ymWc6r)2rPl?eT_QT(z?$vid)%H%X#J)1$IN^(IuHO!% zQ$*Myztl8pLLpV~w{44hOCJX+LD%K9XupXwIHm zDXj0u`&Ih-~3|__rWzA*jjWBp$q;S_~-Yrj)7dC z+U>__In#6(9Xtk})0=r;$EuyoJf_%^_OvZNe{29&zhc3|Rt!>2V(nBM+x0UYa>&Q< zWnD&9ebA(pk91R+{5(0D-}|KM#qo_bewVR zvNY|YpYXB5Ua4NZgdS#Jp%adz>^VbQ#CiMjpaP7nBM-*;j$1bo9+246C-qER+sDpJ z9(gj>R|B-)ZL3Q7Q-1c;#rp{sIE_h03CLv6&xL-ZWYjoKy-$pIkGVY&?*&2-TP1Js z+6F{_LpD&uEJZe`u9 zV7{`(^{f7RrGv!|o^Tb`&M0jcG30A;CUe_Ssm#+7`o_>bfeDr(ktms zEmqioWw1$<&1am)GuR-s2#!QZE5U!(t=_e)Wm`XKXU{wzr2&DSsTzCY2)RzJzcDRbP}I)H!b(N1PwuSFMZOZZ zVB965HuPJ=Z}1IxPLh9%=(=zBfbPJ&*fw^b+UJKOpNhic(NSVPUvRsOq7iRPgQ~0v zrpCwS2Ef4vWtpmX*jFU25|9lyOqrfvK9yPO8X{y+~j5T-WGsFlhX`w38&SqFr*%q~e~7qy3^WuZ(@l66d^~ z`zsPTS80@)#n^9lzGM8e1ZCMS7kwjNE&lpdV@8#mO{r8M8@9Q;e)%}6ufLqHyVmOg zN-oEKgsGVDm0+1q>H3z(`9R1YQzhdQMzZ#RME6p!#0oN^n)tn`CuPV_xK&Lbt{i3Z zbn||AtMd8CImdS}ok?E5Y@uH9EQw>2-Ui80L_knCk3j}3TW7NvCd;>I;o;e!_@p!C z9cTZww$M3J&?2SEXTH99erWtf{CvY-)Oe3nMZOEYQeZc7>c@yCK3PGYB78}o0ZEyU z9f4g+n;&ZEEShwEn2XzWKrtrReA&{tp{1a3Jx(euA*m-`{uX1S0(EG#qyT9v!qJe~ zrg#4pOXHD9PibYBxFXO9_1!HzxOIQ{(-E_(2@5sccsev1{`TjA0~F@;mU_j7V_ZGB z&p*-d_^@0jwO?1iIvr4y?$&?K-^7AbShmpYu6$ZTi%?--+9W|x%(IO>=9X>Y9>!~H zsLGy1XDI5q4#bo<`KDMj89Sju>R};UM^Ivjd6f7OsAsS4(sNgqAVMQR{7zp{!Js2m z$GpT_ZORfb!o5w)^^#nKFbNP3tMBbsB6z6WtwjDvL{!2?695W9MAk!HtPm(+lM?e* zeNvB%&VfwwcIXZTw$wFG)}lVD*s%51w+12u715XVZ|#O8^mPw zdhAK8Qc+3>4ylCEr=bT?1db0-ip^Cd6%^D>NgShd+qv8t z3)3;_m*Q=^<2sSctN+{a7S@0k%A`m26D_P=pI+eWxpiwkVruQZYZ!n5+OYBS_ z>1%dC$NP@;_kn+S5p45RgRBQP8ow z5Frnn(xaBW`biJAZeDWs*tlq-tsAUp^*E^k!gtU$><{EI({Wvps=a7j_wV1_28aWU zS{QJ9?}sz)8qO~I5vnx{ud7qFt9>S|i=uf;@$I_xX%CfMq#boSM&TcVG2I9A@a*FW zU(TPaI@V$Dd+Rc*p(`cA?guJAf8s0cpydp)mWxN5VHASSemi<_1?M= zWOPrK=*M|38ww0hQZ7eC2b#@o58T@A@ER&Xnq)Az#4cCHpE{c1By6b+$6D2$Qqw$h z;tzn*8=*UaRYqR9IYxjtlxO!b36_)Xfcm;BgD)z4059E75LjJeRQ7X?Oe%dEPOL)2 zhiq$HS7R~(>P@^eQDoONV&rH9Y;CoBkp39qE{Z2ERk2mB32AGewv26ST)5t($#Akh za$f%Qx$g-PytB{B%rJl9k$WPx#EHln-NG3okYXR@BfEe<{MVNz6Vg$aR*dI!Im*v2 zE*Y=3F47n8fBI(P_vd3!cMDZKs!k@i$ml4s2-czoSS|1_;Ld9Zd*}xjiPp6MCWNJq z8lROO56w+I?7F^TW1;{bb7)RPQib0az2|#(a}1M$&;vD7yjI@qbqr*`d{NJ>M7VB@ ztT!C4kx@Y>T!+utAyqh_J~BrH2%TqK-^oI-#$UXt(CBUfO+dRCnJj!4ZF1F?hfolA z1kaz4`$4#6-bk1gp)rQPtVplQ9pD8&ScN&Fx4T!UKXdeTJlMdVNg<5On!83v2gBHH zG0q|CM!w>g-)hEKJ4pV_EC4gw6Nf)qY$m5*p)2=Rr1uCzPNn&qWOVg1<{@gJl**bI)4e>p>r_doMt! z3hpVa|2u%LcDAKHDwEbyubF$QKLauobRX6ly%edS-s}yK`w+mJ zBhoVOPfylx4?p55(j);x#+eJMfVnkH=;jofkE=qA#xM9M<_1*}%Xm`|VZG5;Z;=}? zn)FB(1tbqPYWlSFH#9uv|G+WBG~vK<3jV-w2s8SR$pBBsj@q{aEHUE5z<}uUj|)|k z7x?A1(N5o>mqUBwHdXCeek3$EFPQ&>wlPv9@{9+Ox?4bn{Z9^hdbW+=@b9sH4UGNs zqkS8)!vZQjb~mS7x!A6VqJMdzPBuB_gE1>)@G4_n(DeC4DcnSr;~OE#@IZASeg0+C z#;2G=CowIu*E624RrgaCMeA?-3gP;-@H71;4UdJ8NuKaZi3yPS&<2=Qe;e|%1Y&jRYn7*}l@$7SSpYQ5C8~ust z#PKbEhR~nB- zCPMuS%;pMc(k?xA$wEs4KML%~@Y;z4B7uY{Q>8j8d;-VVv_vYG!j7T0hB{zy-VwzU zB~Hy0GhxA}k4Z`)-tSJQ$@@B#rURr^+sM=a{ir!Ab0tNH;F}g4Hc8(kSJ+hU!~5~t zGbhrmpLw>Q60cS!+2ib|-7%I=LQlg4>6Z_Ugr2j%hz2+$2$`$q5v45Pj|=3&diW69 z>DWjdaNiY{${q!Mq=eFa$1)ul##VGBXdT_=(3hnyNT97xHq#dA2vlZFm4~+Bz}H@M zdgT7BwYu3Zd`J#M%Ev~ix&E3)KRXpGtQ~2X!vLVa49^^q(Zo!t_6(y39I5Y=mbc>i8ief zA~yf>tasq}=0qI0)ck0x+Ss?&On3X;QY z&#{-!c=_vdNEw=!6GI?UgYDBeeKrzH#pK}2#Ck@IA-$qzNJiG_E}n6lKM9*xbUH%y~MTd z^S>0ng@!lRZn+9J=*n*nrZXDBi>wUXioIafah0QaF&z`EbFuCzyzk!n0}w$w?96(M z6OX3oav<-f>gjWAEAw3HKxazbToR0+FFvt+B}b8%zkBI*-)p?Re!Cea=Y^zN$YdJ4 zz4Eayjo%VHKPc+2I$8vKv`_oL+D14V(BOAVUFu^cv|ny8kjy==FM)V9uz%=CFYVm4 z*}mT3qiXm~zS1jE2!Pv9b=qD@zI%>YKYIB^@qbafQe^XK7y5_najK~M9ElAH_L?i= z-1B7`VPcU${OGvq*?bwppk>3E`X#IVhY#VET9mBGkz#&Hj{n;Nk-=O_HEuFk1O6AT@=4S30sWgc+J-+2Z#5RfE=J;da%zHe+e zPzsc_dmwCDan3huo6(!Wv=`|WoPs-X!O`C&5o+6Lr z5M#nX;3jf;u9{au%;Z$;{lz!*)&Nq^WL}pP&W_AU(xBb*>EkCSpxl9A2iRlNqLcw% zP=11B_y@7%kr*Zcm9z1@$<_CchnaG*@09y?8}>C?Cb)>fo1C}QgtGkE zYPKJQ@S>h~Xl~c#$$u_vC`@nsd@!hwnNHC<4+d~Q+0|C|*&6T|u-qLrDZxg$52BNd z60{Q8{Wg%>Jv?pB^V2y7PgDn);_z8^-DJY&T)&gJk6>-41Zhd4urA% zsi(BtRdEB}nC9Bk3vtk`TYGT7C3xInsB>?qa=kkAOOqBY1yslhScpyMm~jL`NpVW$ z$Z0r#SpDqBlo{^7#SDZEsM)_$-E6<((!@3GWp*(AE}9YpJy&)*@%+M`zeR^Gh0~GQ z3t0WJ@kg17B)>Wm!Q^YkFc~n*RGbZ6?t~%R7@8Tu$>b3!(>HY%#aM{`tv9YIAz3CW zW?=U(>QX=IB4TO%Y-U>4l6Vw{?|vSfV|eFvcPpm?m9SF{f_Bjjm6fS%$(JsCHVOVI z8R|3KPPyv^ z#%dc#9bpS~KKPtJ_9N6gqiX*u7M=e#tBWcF=VZYB2ai3T?I!*8t}cDMwN4w@f%Sp$4E!smb zq6pKXBLGSAX>^QG*epY63;q#egvl+WFr8whh9MLt-uVR=!82DQ!Y{a01i{Iru}@yG za=OWV4;bl!-$~)K%;!|35H>hVvnamf8ChUKiTm8&wqBPatTkWQ?_`=?wgp48R{1Xv zI3>2a7;Q;z`Uw-5-B>;{_;IMsjIlAo5~3=g1Q#LKQWu-yAMF#jkaC&WEw7u$0iA>cPb=;18;en!jgMStvD;TIPHa(E}oRRzhh zINq6C7I3xO1Mb0Dqdp{37&_`LefQK%H}Yfq%HUHgPWF?5P5K=U5D6XdV`WYKO&^lmswW*m@?ad-KUAEfl zDhf^YEL-JVL&-B{DL2ZZ)bfAXTQ*^{91Mz-c`$KX_RS%PdU~XF6k!|F;-lz6+g`~< zV#Xm*4lXj*uyHroXNrYyNE#a%-PER{lfn0{oKrYeq0WBvxqo@y!8MI2l6COOfAavK zZwL_qKnUl@ZKk!=GOP=@L@Uq-o=sPc&JR&+xC|=V*e2;-opjoJ<)Oc~gc!}jz!mgU zVU27l1}-3=P_GahV6HsJX(YB#4g;0d=*EW@aqNZ5Aph>#!|7pryo*HELx&eyJMNWg zE#MQW;aGE;vpH>qXd}^yDx;ofCUc=$a4dptt!B~Ub-taK2&Hy$Ft5CvPFm~Y>)~^@ zA^%&>$wo#~f-y~of>%DK+pz_nfpAI?d%Y^9-{n!^_cP4{WjC#_e7D6Hz5IpZPX|!^I?6ztaD{ zTL5HsaN9ji*3FThmhUa19Cp3?2PC4>efbhPd~Bn+oOKFSytC$Lcn3X?yo+%Mkme54 z1nzBq^sZp;>*KHVKkHLx5x9}%lAHSO_o7y=ANoxdsiuqEvO#yUDV#1=#De2qX3Rd0 z?%^JB|8qy@x6ox-VRrypucaL!5KZ60Uylqb9&0#x#4T-n1h(3Vf%6^Kt?*gK8ZP~? z{LBQ&PO`zW;yL6q0x>tmgoO$e+rR1(mInmZ-n=XpX(8Axiq@!pr!Yt1It2$9Ma+mXW zf;~g|u#H5_?C^u^2HC`47sjW*yQSI1mW7^nxKOg--8c>H=iYROl)I{lTm$M|)fR@* z$!M_M$4+F4ZPTw?>s;##i1&{c)>|`#!6>09V#06=9umU2%W5mnwxo z>==j5j;Rh%?#d3zO<@1v!@SxXj*dfMse5+i@^{XO6Kml`Sqcu6it3@pYx|2P*w7}q zU`bcvv-UlNnu58UBL5&uGI8UMAjV4Ms)0GpJ``r2p+=r9^wQt%un?sl?9Doo*z5!( zGneiW13=`a5Q&_4(7jOG)}1TD+~`qWe%YQ^Xh$m7f2*T`OW2SO{~rP; z;$Qg#a|olxV9R{Z7o$J%;g zpWMk#CA5;sN3yjc)aSd(rL6CTft6if{4y7axGuysE(a18YCRaz6Gc@X^2}Gg-zT@H zSs3Nwyj304VIpj_-Xm*=AfL2kfYF~HxQbDD+m$7?4}+SG3R!LEL27T;6L;*{aMm7gP+%L&KRhJsMVre%qW_{LL!Px3i{f~w-*dBu%2pZ4bJ^A~J#E;@Ma+Kv2> z6ZQC}xRv(v_mX2@0W2XD*=@5tH|ZyM(|A+#x2Apw>U!v(;W*s3+r%TdEv+I+=mR#D zT|tWZ2e31yeJ`3NlF+J1n;ow5tG2_9Jibs_<&R=h;Jj*I*R%X6v4&63m6`fe*`py- z1i4L5vqN_ayfdELCd3BR6lo!WF*GO&5Yo{U>#x@q3QS1Iw}w>be$D?r z71ZVk!YXZZ?N1Hj))QUuWz!4IBOvehQowFZD-@j!t74X>muI0O@^tEILySg`FBeh> zF(^QSB&L6NO+K1H{m1j#y+!ay8~dLkt;Ce|pf(zYI<-$2?Kj88ytu3Pktuv;N|e(3 z{ux!2K=Fp2>)HOeVLHuJbv2w?QuLwY9A-L>HP26+jL5}K{)Z5JH*sQTIygwn{nv#-eJ@X zz~w^WFPp1=1VE%}s1tLTnKKB&64pPNWIG z2EdE3?1Z(62&smKyHVzyS~AyO3-&%RdC}Y{fN}IxgHK(m0f~cscP1yY8DeX8ryeOu z-Y94PZc!MrF~{f@b_V+hcbmoQUqG&9()=OzUhN8wh)AMNlD6|TlgGI)Kf zx$p&lX{(T8#tG&qeqd*_PaQ-X3wl-0NgKgPv1z-z-zc!qM~UVjMmn-vCV$lag!n8* zh^b~2Q?L8KVFy5k_{C!Wt0`f%R;ZVt4Z5B+T>PlQr1UsQxOpn?51~Zy)wmr0H>L7_ zf)s2y?Ps>OV!*roke&7~qyP3o$f%O>#jFNPoaZca-9ls1IflM6!?t zS%tPu2A+oiV}LUIqu)x6bPi|T=C(n%bFmrwkS>Ncqt+GDw2cf`vWS6eif%TiWIuG> zNOL-f*C;%(n&v|517?O$ z7!b`bfP#WAs%arv3%@cEgYsS^GE6@@foJDWVs9Z25*_G1>-RM$4IFILZ@%DjB0^1C zrekzj#u=IkoD(852Qg*K8{DHGMA4FYKP7}-R3^31+eFu8V2e8dNHp&&e_xr`??n?C z2D3Wi4ASw3)g6y3i{4?o^!`R}`dgf9YM^UYItRfoE=-Z4fCwiNwg(}XgOnXA zHy_wgZ?<-4C<<#&V;Hp3z*sQ}OgcXIPWdhYz$>esw1oHHjwg!jo4vn|Vc)JZaX?|V zU$hron3rs&7U?z!KbbRw;6#Ky18*-aYn!dlB}3u*v+(pLM(r_>%RNOez$&vO*6tid-7 zfy<_*qSRV3xQh6G&3J&SI>Zi=9}3qbeKD6~?KmEEZ8&%|UE6IpHgEOymahTqoC^Lq zW*AO2g~7+wk*w}LQ{RZ{a@JbgC_qQ>yZ}h9_-=d=5NpUTO(8Fe$;M(XA7w;})n?!T z00RIAwx@{7ohhq|RzyJUP0009300RM__P~+l zo>VK+)BZgd8a-kPWj#R*BI!4XJ@Y#Y)3VZ)6kA0`5m^Iq7B1o<%u{I3#|Et zE0o?#7k2xY(!u>Inlysg4m~t@DABsw-Q?DgtFOvr{E6?$2d-4000CapTlP6Q#I3~6 zG5PKGPMj2^D*-MyXaE2M0Gx2oT{pVKQ=={s1UKKr@F%*geJ)Fk?Xy=E$E|=MS)E4( zhw0#7Zs!H0M9`adisWSgT??wVj*3%#&4HNu%g!6;YS&0e9#~0>yZ`_LVL_iRMG-7l z@+6ssiHv|bz(tDgmCX5YdL8vLINq`T(XeP3%^Y~>J#u8hl2lPx0}asVI27%qjXt zekv7SH=sGz@?Zlq&QJ^r6N`&#TR{7AI(lAD{tl8XXKh`@<-dmL;H+X|c76*7eTJlSfKp-pr z4hU&PI}fz3C^R+;l|T_YTOd0cwDzK z0lEX!UX{n#X}{BD-OtGb7f&W>+9GaX4SV*#rI}bztgqeo=B&}543+p!5*>9;ix3M9 zFH4y#FSB>CzgG6S#~%Gx3H^pvb0B>Uk)}+QoeFOt%L<|Ff4vmslyFNr#otDOKqus(tL!!bab}8gH)tx9m@5n`E0T1o@BmL!F#Fh{N5`7XvpDjcjZbL%W!@B*vJXR9AzDi4NYI@WM-J=F+t^}E zb)({}?OML=sD@KEQ}(QCb@`(}7sse?LH7$R>ilL^la^vz+7d7wQ}hy4SadLmDN8`+ zPJI-qXkiISl-_%s!qn+GHN>Dz;{5M8$xi_|7p>4sAO^!CvB+SGD+`K(A(4PwA`>f! z!+aqUP*4ivUbV-4W|R)2*AXwsOi z;2sXj+=5|$9`mjT}4q~VlH}oHBuLw#OqZ!+SYi?@g2e8;QyJ@?i=iR-)$ zKD9*INoB6%^_@?@-Md3)rq5>mvs)|(6F;o^e!tqbZ~y=RFae)UbVYyi@M+|1zy|p2 z{4+dKX6UuUouf9>?xaA%;F&*>$_-ORihEA^j;T4m^NMM7j4eiO3#0979$R z*5GIrO>FOJ*6_HWWJaiBA5~6LGKX%qRn!u?&siXmnP`5S<;FSyOZsu30F8_83xnEq zV+=|`B#Z^B4d6Vq^ZM3*H!*NGF4*UA&WK2)d5!D90(#W3t;-aTpIu~QQjD9N>0So5 zfoD^U2SYwhC`nU;0UT0}W5{fPqw<%X?(IrZ(G5Vpr3Z>t6ua*5?-QmiKqPbsn)-WXJDvQIe_B1H76GEkXB zhAWi%Bj&v~DJnt1xtzdUU^(XR72cX6A}B%&JOmLy5t6OSkEZ&rssA`Vv)QPBSAQ<_ zU4_=>KmbIHNCbibpoB*NImN8Ru*UCgK!JR+TX@USZUIP;07*u8=dI&w^&dkm9v-Z8 zcDwgOJfgrU@8w@_m#1@p0006V0iRDqXX*1ryzuuYFX|c!F8*h32&S(S#@sk!5Julx zGej)JW)z!8E#{iR_v&sUw$a=Ngh{QC=uN@gX#fEBejzI+0O12$g9+nXH9h024HxzB z^C?coRFiDE%eZg+xw*~pVO7(V?LCav$tGP+&LxM5fe#NcPzqnFaV zMg{T2BZZ{N_VTn%PMK9@_GeP$ZTJniFs8k*Q<0=Z@+@+(DT=^&Gc4p|8UG~-_ZtJn zcdaaFkQShPJWLTZn<)nDY?0a~#q9f;-&)kOMC1(0V&U*;zpF+;#uh}l=I11-!Hl9e zUM1Wv?6SpeH{>a$(}dGQQHStNoEU_8B&-go1{qh^W_oJWan#KKgzMA6R8{)IW^~S^ zzYov`U-j8=q=7&y3dV%_UxYlY_vv0g?MceYb^RFcUyz2o5`Mhe3_IUo|9VPKD2n65 zdSQlCNOuV~z-gX4&>sm}1O9+(`SEiUfyM|*f^zFcfxvgys-`dQIRF3=r9qofG^92J zAc$W8l}YS$7Wa?!vZtU#2qLA*e}Z>`st&GYq9hn;eRw0JwNxj7|yMlUZD85Yy( zy|{4<00095xL^PP0{|2-lQ;WPAus>{!xvy+xVr!dl+8f=kOkVcMNms#UDr6wa)*)b zfTzlINqEyKw@~OJUG#@BSh$@qlW%-I-J7Z08WiMC(=|O!gAJeC(=9F76A2fdRVo~9 z^Y;B<-Zbkx-hC=_N~uHqxz# z#Y*N@A}8zHdokCNRHqvZWx@H+0tdQuN??Ms-L|)<^g7%Lp5L4?h(=+nV`&|irF#?! zjhwZPZxhL%t;w~>fMrB%n@?s$Dc+$MK!JYnC%Y`B<{pV`d7D%!&v?4rV+XvkzjYWU z5EkN}>VR8kZh@xJnG-_hmGm ztk#ybPK9ZaP3(vb=d@2p|LzuZpVY&Nd)-p`nB7eXsaAz_AI^H5iCN*XwF@eKTa$ZW zp_|u1WUMX02)pyHG_fe`@A92SLJ%pP<&%d&zqM!E93bst$Z+|RN5;4cS+RR^d~T6j zUlsjU48}7{004AYmpX_$Ul_{8?GXI)Z_Lra&z}Mc4Qo`_|Hr1n4K0y$!S0Kr#d=v1 zjW?xN1HTcWZ#C`CF&@$cHb9B9Xar3oR=aCGbnazGRYv@7{C+o3p~6W!yB9tQ*n>{G z78ye3(eTkjIMl^iUn~2)9Ts@iH&wQZKYxbm%T9G+X2qwn<5NN<# zeyd~)8M*^xl9LFI9QDmz@^F3($qVY{l$P(IEF{iLq-u)RrTSCqh$IrN9CX+=G6&5g+Gu%p=4y;AS$%^LZ<|#jAgRuxp>9qebMKD9Y8#fb#y~?-^_rs0lRC2k1l#fF zQ`;j52&g4{N4VzNr>q(BMy|T!#O)BQtAQhXTv5{x45S3i;>zXyP`@D+L8atPv(Qp$ zAMUvlb6sM+UojfX>)pjnZL|mdR{S9cCGdrGwI>T|*_E{DHaD=$CwH3w{{~sNlF#XR zk;l3QYa^8} zlnRpUHW-@j%Gu(h?VFpLpmFu^{_Tk135U1c-D#WDarxvzG|H?)zq&;g>C+`OQt~2( zrBt9iLgS)ZvaKXf|5nS|+SaleNP9f13{7%(>&~2!k`)al5!>Wif=bt7vhOZ4iEIQp zuMR{5*B{>s&T}7MwbpUYyAt;wHWtwUQQ<+KzAYDZs^9YSq!B%yutA1dmPyVK(KCd+ z9fQ95A_@%5gR|bE^FK94SO9f?NInye{f?E9F}135YydRQDjCALf`VYDWvkDTSZ}l7 zl9!~oQpghpe2QsUonu$-SdGk&H9m7HI+0<+O?g!mK-vSTCE=n|^);(h0_*{t1zM{_ zWA=PYdG0$pIcpSmu6`lhb?)$+b(9Hx?2IDciS#Z;c`^q~&WA6*szUM{hCH<6C z5#|KV{Rr4h%}~5NXwW&9enT%(2JzL|KrtfCV5`=rcE?nDx(3jr8v!<2ch9l?*wT-1!`9+UZ6`FneOdn7NXOo1 z2&RQ+XC*9vN7!LK8X&mCf4Q>jYiELg@PPDK!b2<^ z`Hc%PrPn=Q=7Bfkb(v2w`qkk000CrRwkS;s(jIt9@w`mJ-6n1X{zR#jEbhT`8~rmZ zdvzn+G)#g25)7es#ocOdqK`V>%EQ#~uRE0B(G1zaT|~snL~*T$w^dW%+{80CiNNUQ zDox=CD`|X=lV2sN9$=?s1dZ@F9u;_{+lU%cl&hrF7l-zWp+;-%Zq)3dBAY2!tqUOT z4TDH)^Cj~8c2k+zg95j&9<#%@b!ko>`vTIdYQ;j3kkBWQ2@E(wLc4+ z*8%^nBxSwf4~!GXr(|~q7uLwnZLi2BV!fg?P{A50Lx&{FGZzaR)3n6=YN{@7O8-qJ zELX+eJzAQ7SQA4hujtWv`ybQ1$**DD8YO`j!mSs+r@DZ!C=x(yw2(x4A)K#=4*xBR zO&uwjqPyIqDavGiT0;H4_Rr|kV`^?99c0?`b{QSy0*ZkYj4P&OFYOaCFJqijf2@{{ ztb7|KG>8pSGw8PE8}gohcsPY7DHz&Ad$%EM^8A)80C?xnTl;a={P?fkpQ^q&c#3a) zf-6ew$Nf@M;7jRYJ@*-BKfJZePq+}tu*Oyq?3+l5#S;3p6 z3k$Z;t0veIU1Zi&truW5{rcJlpJ|{=c7u-ogtB^20}v1-hgZmV%kh*8RnPG8V_kjZ zpTio_(-ix8q$f|q-09i5_|epU|9OF|$u04f1L8cvQFm2r3Sy2~QwRQdW?E%S+Y~N> z1iuu!{9%+GCux^Usc~fn;F%2XnZNSt*%uw`>|U(is!N+OF0E&mEJlKytZWkd2HHrbq|ALZgQf4? zrQiF0{e?6>q3S&`EH?DDx={ws`loCXQYegUOnx?BxENu*@h;za8|g&`V^Wy2e<21Z zEFraB78_uw_CfqlwrE*dNvJ?cs~bT*;+)*s*FadKE_^{ggJB3GMX!NaalPw?b4oSM ziWm1i1u^Fr3T$d8Bin$L3y;XC9kP(Dqwxn5(As{qmQ7O8Lax9DAQGo*07p#GWGQDd3LxiI{$D3&s|#p!ah__K&+|SHVt1tue|bX@^mQ3E$OwSbC|Q^ zMpBOU$kD+~=kaH%4m|^aXW$QWYQk6~3ZS`_&01RAbB|Bp1OR}F`A&(p`qP{)ezK0f zzY8>yt&jJ>J?YBxvxOv|FEns86h})!`NjzeQaV$PjW-0yXe{;dx4Gt? z$K+L*#Zf8Zm&LP0%xv>%e9k~@57L4*jpzn9LV{b^R@uXJ`V&U zNqgVgr?4`2MuwT>_&YYnh)gpW$1p)8D+wbGv0N@6aXlLySJrNLTB@>|^02@lKPi+Y z*S$+WWp6kq3``dgyX!TRy?@&9N$*Eie?ow804{Oux(GqC>J;q}S#j{)itUHklURub}29)eIx3Ydxk zAA?r`38&^Ht>=@zAsLVT3`j>Klu}v}P8ThHn2z1WVLqdi^)+5?lTq%*O4Xy;T9={3dr1bmnUT+^)laS)Jbp16eA3AOI*=TE^7+X#dQ z@_TdH$4ALT=caTmb{d7=UkFOlTmS@un`gguzl^;QU1$jDYbbRx+Tx#O=jDc%6DH*P zlIzZO*3J<5N}pQ|ftTG8I~Txt&&4MmfJgVa=qU3d0SQ7!zBeEF28$}~ug}?T&7@cW z_y^|CH2oLeEOWNiaw=L|JQ9ZX7)kcS+t3A@-59B!U~j=cW`rny60D7gWlYX2q6oxv zfO{kwReapG}K=u}S0va|ce-aBNkwNu!%8 zT_a!lt(W0oTL;EwfM9xo=lg5l!%oREmM_moXS=~0q_2JX*|q;3ElQb!wBrh(ZoKANR*>G$M^)z*C=XMY-Kl_otIz1 zUaOLEA8pL^CtV@eM)~-e0bfD^AFW^}Y~_o=F06x0)QpFZCmvN=yykeq!_x}b<0`qn zYf3gNL|V%E><69~x9oySCYB7JTF~0guw$aJ5`+A+5jbz2?mf z#AZY^?%lX5$5%%+a>46?z))c%j01( zbs8Ne0}^jXxYfh~j}If+ZZ ziV7?MjCU=^SX84Zb_}#X1?yt2hMHZ_3@2 zBafHvj(9k}P4?)m(z3$gy8S1?-plpfSRnLGIqooXdgekPtvu*Q&s;ynXFQiUj6AHn-Nm)mFS4bvnD2DGO z7dN*x^0J}{PE)~qNX18)RT>;#&L8z*}zIMguUb%kcX^u zflP)77&v$KdL=mvj1C?^02Y8hI8!?{X3xwk3Ta>#(weg9MMdf4AR}NSuwQ_5j_DlWWnH>{RGbOuoV)i5uI~Hj*xqL@^;PsJ& z#&IDpMb(3ZsD>Xw<*ov9XSo&Nhp+^DoOHPYS%3gP<;{TkbOP_LBUf+!PM+_+vN1T- zKyS2k6d_W35iG6>e6k;-I4X>AOZ^<>gReAS_MvB(g3&$n+Po3sC|+t`UoMM3U?k+B z5NG-z$}5Z=T*4%{{nx3_MNRG+n9yv(n*IGC00093017==00093ABoPN`FH>TBqRm7 z>o3A2UZb7C{}_1C^t5Jn3eTz_?!|YB%SIuWncd@EO6ny1p4IWSoR{yJQkV3A%B5Q8 z*wpu?FJ`$Xp`3R88B{7tvClU}o6&&P&(a_=Sn?K_l%7q~q#{|^gl{~vIA4cSWSp!e zlqviKiqVze<5L^vAQgn6QUM68^@m*Ub(!LHHPZN*NAnN7pP}=B006pK;yEl!b}QdU zFhzreiwXt^BABsEbg|&UE{+HKT4e!RAs7arso;x}AQEQuAiN(tkSv9UvF?QbZ0~$J zEo#nLxBqNn}FaWacc+w zApKw@&c^{nCYCS+2)%sHMf#zPfm7Cirft;><)ie07TS%?Q%RvgrUR`M@iCsvmS^-$vD>Ro`A|1XHY*-)>ry0w<$kIUs72DJpgFDe(p0c0ol^G zPV}o{>wm0{K?SZ|)3_shkI9$kS3!w>E6BwN8eH#Vx1}>0qBM{v)*c$B{Ks zLUHOYeMcXpu95&eZ#!_7CG&dTnQ!V`d@p)THfer@{4zaCvt|d|y^YCX zD$$W&*R?LC9!L}{3BCqg1;0SPA-_?%9y!yb`(7`Rbh`r38$Y>M*04&anbs`~;=_ddwApll*?K|*| z0Ez2kRVwYvFmUUR;9d@)ubrTvSQY*o+zjb}AVQV@%|iBlR;k<@$gA8wLAk}1_M1cP zcu7{iV}ef_Zlu%J`lH->~{D%YjXV^5Jk0f#MK2K<;aL={;J7qH=5{01B=>6_@JQXfv!guQ*Q! zh6_ERwrxLe*ZP|H{R!9IY=k6}Q~Xt^EvUb0U_0XdwK_DJ7H7Zz`^KntMcE9NGm$_p z4|TJwD4HE1Re0b5MisU`CJM~hp1SLdDS!b0*~L4mfH3xCMOS8G@cd{=%-w#kn90HU zKVu;dmb@(6H*>eisVTxk9YB3Uj>S$OuTn*%H=*OM=mDo*$7&RLS*aBffHXWX+}5t& zu{~68Qee9w4W)(e0%3&73(lb}2d*$LZqWVhc+DkcoXN^G?a*Ylra3P{fy6ul<`i+$3RHH8(p6q|jH6>zXF0mY7kjcvC zZ3j8-l9<-18adHIzl`%!S?nNCr27#}LaG-$GV~4PzXK0)!iPE_~hJaGmTp)I0wzi6JhH<;BwKZy*2RdIx->5)eEyI}1f( zzu)qf*aYZwN;_K;CI%aUTkdrjvEi@{^N0YDm8G`t-~a?Aaqn;iQPmyhrAP-@m9t<^ z$b6h+KL(P=+rkQU>CXWrd=b-p5gbJG%$=W<>wAR*U+?J~u}X{m&eV@LCAG~($84>8 zK|`WeVo$rd^O~LgZ(SnAu#*rD>mAdreBMbl#5VSLZ31lyoK@;USa&EXRP3iAf@m?m zO68^Ju<8hH(DXsY);jMB&aG&qv%ogJD~FjCK+PX4u^HHo3aQ)L0>{{uN*+#}!Q5W- z3OY=vx=ZvU5SIs+y0BK`0g|6qxyc&*SS`e7%&lRHeH8^|T*VtKE$qZ+ZRKi(-9RiK z`j{A%`Au-VIH29QVSBE;nzY!;s&|T*?fONnX)?U`zyG_%viXeqn+ZWPL&(vPb4bzz zA>QU|i=+^M0siC!BCq{w|MD0Aa8Wpl=7SPi5IceyE6SrcqQHbqduQABQ3uIu-a}tH z;7s4siY(6nTN4?!_BQyU$g`s8fiIW*lNXintGQ75Erhmpm*+lQ3D`~|&=Y*oUsD9z zR-t28^UCsR38G@Fm6WEYX2-IbIgI1gd00ik@lbRVCrWpK6)lviW#;hB_-O)R5<1A*emj%~S zrI`wI;AZjiFUL{%V;l{xbw8bVM)pxuO&A#(&n2F&(1zCndHOwyvsizzPD}ynD1{uu z2YYFh&sB-Iaa!=(8CU6g{GHk%*Fn+V>-z2mdv!%@{Lg~0Ux!fqXdHB51_0Dv`pf_$ zu_QH7!l2YEKJ2>wN@E;2^Tm+-%0)2y; z(Ou&SNbvki<`9o3vj~DP8Js5C4MzYW>m&&he;;?F0)ZzEzO5$`$payVbCl$%0j;OK z6F>j}1(AcJgSTdV>2i=gY-pr67YawFjJJ zG{h?bo`zKLO@S^KUWHx_Nc`e>wO6MG>CE0Tlx&)ct`{(oN4Ux$7 zO)wfI8iO3y?30{TgzZ_fTrO zsSMwLqTPLGy#l1CPw{$hO%6O(y9G)ku01CCeTJE)wqkgMFyR0I0{|h0-~a$+hXr|X zI0UuV3aI+74L!Uuc&I}?R{M!Q(@f{g{$*=pzjV@dvi`|2vPc~09`%UUaOQ@&k0h;d6rV z9X?C|0ALLi*rcU^q@>p`H@in6oZ4h+zTOxliz4IE5w zoNdhGGIlUGH`V}Yx^$r*|L-ebULX6B19hA(gQL~xc@id5KHs2KD4>q94TY2t zdW*RhfO3T(j*b3b^htg;)@;GsBG}AVmpjEgSk)&Og;Zz4RKHXv()f^N1gR|rLJv@W~=HfV* zCHpk6mMKhDpO4}Cl zE+k78R(s$GHQYz7yFo3^8PKn2jwZ7vn7S9OHKIias4!pv00RKMxYt2cR(*RGo)(I1 zL||T#c%TIo2`XpVRFVq9V=63^(f#IsLt>On6gI#vDcGg*4GZ; zX@;M;?>k4TStnFmd-NA>J~S8?U4(Mr%VGymx{M|O-m;8+Bd$Dqud48`gg`nKYkH?8 z4E?b`4C6Jw8!S^Li#gX!!*3)1a9{j5UUp_456T7nNA5F-^Pz?qQ{W27MF4cVnp zS;)X*&jEZ}^fLQ`w`(FHof%+^!lwbSLROMKeSAxIDSZGJ_LnW4pccd$4%a^F^ zS?G2@0-%P|Y|iD~W3KBPv1N6ul1rU;xih+zo}Fswfo;$pIlqTlh`7QPJWt>sZ}iMI5YZK{A-k@z+;dQ0? zc5mF`jb2j{uSsK1n)!ya6U%T#_-9T4vo~C0H&JqYs<0_*BAY^a6wJ}`vb-IwPMqdo zVFFMu$71EXqc0N#MU1DjVzd}c47h;w(x z2>3lROYfE2w?TlFePYjenj?$8r8j`QGhU#f8OrZ900eIUAfS&w$Ps5L7vZh$)HAx^ z!6v^z5Ys<)suO%hT=j0vqz$ZOTEgUyY~&D}IX;6lSVmXh;+Iy=onrK;lXg-DduW3f z#iPam1jQA-Qar68YNseT2+;a>S;31AmrAFSkfR|B9iV7j=V4KWRfIhffa_npu}L-+ zMA=N8Q2+9PJe57=0ZQFRH+*cf2_V$Z^Y6dCV2VA{egFIX0Nv-YzPjNOY^GYl<$!#l@`%c%!MY1i>KV`f`4U{5?8)^0fzx- zk>9X;$Sfyf%0!8jXgpZMP+-V|Ut`~PIL5sCOz1`eiYTGwMI zQ#{YSBVvmqcwGrl`P`ad0X`S4)LR;cf`PI)=u9gMg##rJxPfRUC93E}@@A}E?@s-< zd8z{qBHf2ai+ei?SR3;8`YXZLeYIIL$KhQJDNbW@=l zRe=s@EUa_@W*%z(&hId>n$$R~!)|=DuuiviM#IPG1OR0HB+#sAGFEHRt);OWu55BK zWfWoX06gF1j^&yT3rOF`~GKO^Vg8TJ3*eMj>y_u2K+rH~hC00fuH(nZ!*D2_K} z({+E%_fJavxAZ=f+`T8_yQsUuh^r-F0eI(Xikf0*Y2L4;@;ff$eiM^@UsKm~k`@IA zaw#b?olc`mlj?mQ5xdE)&BW-0fB+lvHy9=pS_zi`007cKpOQs1OjkBdq&fht#+8@9 zKd)dziWLW@td{5ih;%r4>EFH_jo(d0)T;vFq7z%uH6`K(w>^4BqfobS1mkIdXav%o ztiHaU0IL)?^ouk_pwKV|tToVUZ2heHG76_rT+iZ;HibmQ$L8RPGKbT|m!tp{)X*yE zz>Ley9f}av*dyX;#rQ;<`*JuMlJmt+^_S%=8GI93eHNSda7v>;kD3lI!e476%k4HP z6cXh{LEd#PaKs>a0^@a)Jv;_at!gZJ=LRx;s-CLi&c-siK><7$t<*~+l7gYIxL__D z6AFT&u!v+}83=_9H&T(Lvom)r=d6fJ=UjU8moN;^a$q3K7@yY-h`V5q$R4GP5cLbC zi`UUIH7Ruhv@z4d9&ZtVS9nsJyl}k`auXFLScr6}Fm3mQ1)_50SL(~znMR|247myHyc}P9G94y#@*JUy z@*8C|rdpYhq(X?vI@^&tWg(3y5cF3o*YiZ8Hb6!KiGaZj8Jm~6u6dXM9dF3MK<-&s z^M*t)&_%^f0XDAZZ}0h@=k)c=*jOegs+UbnhE-X~k$^aYlp^&Sb}7L=Gw5r}%h|k@ zqkD+k96$j)^vbU#&81lJJlA&h&ZqOg?0;tX-yg#H|Bchon1N9WB7jIRN-?mO9q$`M zqUe41ukzhzXV*M0b;@NZlIIQ<-4C1hj*@ZL*2|I5akuIu07@J>!hQKOZ~y=S`T?J_ zL}%CZRY-lCJ_{Vqwm6ID5$&fLah}fzEs${b$0PWOVX@3@f}C#yYeo^M|HYQIW!7d= zH(x|d0pC%EMQ8FjT#g!@sRe}n0%7mLM@Pzg<_3qn68aXvuq^r2P0*QHET~PpowJUr zU=gaWT%m8}J2IXS<2vbxti^I?LPruT-I?o*D!NqNINwDb6ak7aR^2`yy~!{3F~>ai zHt>I|9Y99lnwwW|uFC=PYJ@BLB5%@yfBt z6MQ>5V!qmRnhqJ(5W7?o{I2rM!H8XIN&6oQQ`w8+1y|+&wD0?&Fjhbeym-!iT`E(? znvU9OnNG1xNmuMn;&-`P+9ec_K_9*1woB6&2!}?KD3FR3E@T%w^4k!uPgi%95YHXz zb1nsg^FOp-t&XZVPg@J^J7Ce0d~!%P8_fBqa3-_eIYtG8g*@}1*^*`(r+oa+P7NkW zfXMIK$p^|ohFa+*n(2vOh!CD*%C>e#(3zxD^f$`TB~LPi-mfQ;Stxx;xvs%fB4U{qSeCr{MwlxPn>+}_>a z`+|#vQCCxe{g-8XGO8}JU?*t+kJwtq<~Yx+8%I|}4<@F6bWgkra_?qklrnTt z=FnLv$a{Qq!UO1hhevRXNohuIN)#mTh1k$PEEW8v`lTDqitqqG*mWi9gACv_AKsJ^ z&M59@W)pw_0Cz)6SVu>+^lH?`)E`n4gl8E@x?1JwfFm_;eNS)LiT@fkz#NekN231f z)USh?0Q2TSzvJC4oMoy^fR0~*0^5Vt!)?YYs|aiG?M|wur4nNP=(cUyV2&X==CzOgNc zx&*n%(U%+RCbxM|KF-390!Gus942a9*w(YPsKLf_X#A;OuNGhNpI>GJgPLgE5Rytw z4gi8RIpKagK&P<`_5rbuR|uXS(Q2DFfgQix#!^j+c?zWAE}ujpaj&C%Zq$#Af@w~S zt>Xdg-NO7IQ)MyXb%tFhLac|PJUQN;p{?roB;C-}_$P7;-p3_d5iaAXCXEt%BjRf+~Itvblbd_jWzrI>p@kiPWkh z0t7VOS&g9RI|+RpzUb8I9s=(*KBSCAGi(Pu$s659?tcQb*0d#m+sgPw@#>0qXq=w2 zO_^Toy?3uu0t<&CBSbXYDzap>QtGz6lcqyx6W%{KH*gN0_%7o}Gc%VF5*&c>nh+JJ zPPLfZ>MI;0aU+CX#2xXA^)j=8uuL6t&Q12H7n-Z6xT$ z000i7H~4+>*Cu$lYU7 z^|H=HIvJ}&`>;yb0zpn;swBnNq%h7ZF*>@c0q)l_g6YvO`S8 zU&Nd=WNiW_DQ9s_S@iI^S*|JZ6@dwJlFDA`&WCE?ILg|eHCjz9e}PnC^(c(xuycN) z9o^WMkwVXI=OWg=O4y5P{`^pJ;PnqgdUruSA>yQkge!=aN$IIxeGdIhKQ_r5XL<+8 zhrt4aeFiU#g@tVz_W(j84 zfksI04YuOGW+J`tuo&?HG9Pg$0YDe5lv`|`1mS?#Tr3(3g#$qlz+6BT6Rt^PdP7um z8oTYHlC^y5Z;k0dVS1W}JuP!~8yRFMjrsdZyJr(Gp2+|V%0j4<1`g0uLh_Lmw>zVR zQBM--xwY8YahU*NR~SG&pT!k&7OfFI7+4l0>>Mp{7lfl%mC(ip`0E#kQ{4ajxY2ld zP9Mp69ob(L^=-EX1#mx7{@v4d{BQ*v4l;$0HHVX>d^Ky0em_%;1R`ZPVheo_$=F0!kRfYxkVYti1XJ+1y^GRvi3>)}4~*a- zPz>lV@PxcT@&UnE2ImdOT9m0$==M!`d@H@AuXn(2q%cja000p&Qx_1)k1rhkPr3j1 ztML0Re$)Ry=lOiQ0#5FHE9LioAM5k+oc#YkpU1W?2mk=th#sbMsg!U4003(NpVdTX zFkZxUMNG!wuHNm7g{Cuuct2u5S=_+kBo26fMI+5{>xZm2NUJ{yk4UOvtFEl2lW^oG zR^Ney2Q>H4&m(VYPC_qw!E391ajdEcad8@wK_8l&_z%Hge7)n`iSi;4QW3p@y!`<< z7p@d(9SK80aL`~>6%~cU0icLnP!S9S!pe&d_=;IV>yAWtXy=_n<;JbO|w^rR31R79h#>qY%|d@yV9@r&3L5F(;x_x ze&FnfBFynt=snVhr2?cBZ4(= z`Y(uPQO)%wX#aPXOHnp6!uNoV2E9-%=N!O0g1I!JYvEg*RPkI%IdIB32mFU?wev>^ zfQldhCN<@A8IfHY%I3Z$_A)eOLCP@EA_g4NiuU<2Oe$>tJZ^vl)z~8#4>VH5X9Om2 zfe-1D(3~QAF+~x^q^p{@5yaLlwL0}B+~Ko=4O*-%3hR_kD3cv-H&wguf0Nz+$JKw~ z#@*R(;P%&ZlK@x%3OJ0X8Nvt-V5uMh4*cJjfu&=%{}4!N!dL=dkQU=P$_gP&YJbbw zCmPHVTfR~*Spr(Xd?1%-muKy|e9iy>8nZ#0+C31&fp`XtAqxR)Uq@AZ6eUS?B~mkDi==V<{{D#xlz;c*~=si@@znqEf55y0T428vY*PDPpX^FXdSWchVBI~ zh*fqL9xRCQS)2zTlzm5bB`OTPXOMqLyXXgs4kg51L_hBy#_ zXai6H2WIr5Cf%oW-*CK&Uz4yUipVM)MY#P*j@7Cblr00RI30{{R601xlu$o?(aHHw&T5-~4W zmHk#S%~}@sUS4}h2N{rACs8*PqDN{P557t?Cs|vBvt29pR8PWozAPtPi_+#cpFxVV z00^B5i2CJy0F=PZi=5`&Z3tcfTddEU(8XR}rNz3Q%6PYkRBYzZl7iMw4I|Am4@cGN z-z)qX#xAC`fOq--DUN2-t3Q05rnW6;`h6J=ZLb+FaUruAX|a6bVh97GCw73RyIlD- zX~_ee$o73iO8(C$BdocHMl~`G+9*FE143YdG6%RNLDm-I4vY)Sfe6#&z@}8u)am=| zHkrhZ1@Q3M%7r?3Uxe+Zth-P-W4IE0*lx0o9%}U|!F>;YAXDLJK?=c%nl%?CZ`wM- zif)HRR+OMC*N`}ty{ht++l!j-oWk%;wkytujHfUSRy1q8LK?$$Gh7CXi$)k&f>+r1IOM==YmUX4PjGmO_Nagdh9ylyn%7RY zTC`3x^6KQ}A*DWxUFv@nTLxD+{2xta9i(uDaMWZ|UdTNz!zs`3U2;W#Z2)!hiz>8K zN~XG`7T#_8D&mDxxrJ80j}%0jZ7_2pI1u%Y&m9@J!1j!Odd7wmCtP!K=5{PbVNOT@ zU?tuf^LDWha8qPg7;N)i-dyemCqwK`0SSw%;q=77YC5TXY4L^k6hH5?9~?jZs5I_0 zIawcRVd9=RrRAtKH^?aYR5F{OJ}rO_PwtGDyP+=l{*Zvx8hQ3+Q=0Bplzf8p&%9+oDF!M z!A~+NX_zydEUUKXoqoj-Y?m~49UvReC`fk>DCX5U#vl)U9;oHQ|E? zG2lB`XGw#Qp@PQtJwlG6hQf=iB*y;3I3qamLd&M=Nl<(;RC1{mv}Zy6#*wx72PG69 z;1saj`=)o$+tZZIjx4n_Z$R#Jg=q~b(z7gpY_ZI!edSf{p4%#`tu7}GWhp$wa9_B*ruYu;t%8dKt>0V0?9i%acIs6F(CJU2lNoLLGZkd82g zz)i4TR^$&@RYMZ$`p6WPotgw+ayTEl4qK?S&3WWNXfrgV^Y^8sTqK(iwYeHZjy``R z-T1Q`de>E8BVgFR)|XNXnw75Kn-0nyzY%k4WNa{S1m&KK4?pfI4CONw{ls;eke_wA z;kq*QjK@*V_t+x+v9pJR!OBij^wED-xbU*%5UT<5KZ<&c3L81hACFc;M@BoS&%|03 z>65k09}}Pl?s<|DDV(W|^aP|yjYh2b{H$%23m90Rt`G$L4S(!6Im>h6%ba6-eNTYn zSYW3-XJ{8+)m;;MXpu1G#`h>-Tm~V4UPcS(d}fjZ&`Xk%__~YYdUZFX>{?6xlOCrm z(K4IApk|_IiuLhxwQkhPL9hS-0{{pTcxh{Jin^^IQzX6rowoP6t04CdjmURK1bV3w zt=B!@`69oOYPUn}Ix8DXX%6_klsn2Oq8`Q;kXN92MX;QW7wK?SxRrw_>wuTo8sc=q zSXnDOtQ8zgbZGw$aG`efh7A=w-G#8Lh_tv;Ip`UZqGZ{cZlpqJU&h(6@7$-&HQH+d z4voCHVI_j{Ld4Bkd~$?7O&k(va=e5Od9G7H-}Fk#r_Dk6a^|qfDUhSrT7R%Zeln=P)yd^Zd(MQ^k!?K-PZELHa-FimKFR-5swux7&4~Y|$M;ST+i&!ntKU zD&|oQZPF6Fh#y|n{EiFk*62!wDy;}phw?!qkrreow41*MRrPQ2x717+nckAq7ya%!*QN>erN8C*w0c^aaTCEr4dSclYmFAxTtg~#RoZLDU`AO0Xl309D z?sF)`Z7N*12a9=B1WW9P&Un{yYc-$oiFO#B-l38NGHMyCDs0n>lQJO}45=VSf#E(>e&Xj8XL{HH_%|gvT9TK_V$tFs7E*G(<=wGj z6_3C``cS*|>kWzyDv7}$^iS)?05rkuOAZ-!ToAJwDQ0t3+|9-#g45b0&@PT|-boY7 z*Upm$WFAB`*u;xgZ3V0tc;KOsM$Ma0?Bs-@OB@+hEp9D3QsHJssQPU{`()f{uKtV1 zdt-DOn}Xaq0009300RI3A^!IYcOVKnGPys}EaXpb7^=_L{1Y$ZUY*rLIMm10P~U9# z)UwbqB@(|seROBaEsDnMU|L3e&A6IaTy-aN{J~z?%_HS@MIUR)IWKJ-Nbn>>6ljOhw{ zTYW@)KixxOqqU+W0wjNi(KYdHKG^=Y1shJHxl$!uY}1r5F62LC!uxPme38?=TR5ut z_W_h5>xj?Zi$iGHCdtrKGRBZeT=j^P+XZf3Nt@-ClSnRWbuOCGH)zjSAdx%z!E)qC zRNBvz@eqq&O_F%<3dL9$H|U$dVF`dJTY*-nME2coj(G9=aN^FzN}50gmLe30d}70h z#!X7-A#`%Sz+^6E=prPJuq5-EumP@DoT(70A<}esLpA^f`u5&$v00-qhdBfwvb)Cj zei=V;3&-Z^0cw6tf4;b~)m|g!`b0Ek#uj2?g;po*6BdUtk=o&rQi$KNm1QAo7umVNaQAM53iR;L0ebqTD?Y+6%CZ}5@{Gf2azu2 zbdAhD(WE`#2Zmj*NlZ`Ha8pB7yXC1teKM6toU(lzH&Se_m@14)ihcXc?0omRBTeq**s(pAnf0170=vi=Cpi~u9vp#C zyaqr(IYw&&A`~;+?{_>6T-j3*M03&86+q~j>IECp#2m?v3p|W%6Y6@9t#IzE?P=XP z8*H-kpE5*HM^R&DYGw2=;PPzj6->XmmjF0gVF@wqvX8@$?0lGP_>s`7ZzDmaRfi1^ z#?E$q?qIVigM7(#H1N*a86WYaYOSgOv2+F3ao#0Ai0$C4woN&t*6L!mi$g!>q=mL zSjFF0x!U%G@##1`KYrqC_3O#FrhO~qV3P+<;Cg@>eDGxPBZI_Trp#y4s zpS%AmPjo@cTbuC;FJYAu<=lZDm+jqiR!y-A4aGG=HUZ1f(fpG~X_^s0nAQ24pW@&j zr!1J7LU;qQKIU=1AY<00=eQ5Qmf=|omA1opUV1etrBxLRPQP9RY!)3|>(nOq9U>fmd@KX%( ztF%FA)m}9>gf@4$H=8So!(wIN2qzCni&oT_Y!m7p7o`(0X0X^1D1EYwK)ESYirVw3 z>d$HUd&qjztVLX&pwt+vP*C=D=BAA=ArzmHn`ztrMBm3~qSQ)WJpfR!Y!72PGcf+S ziTW_uPH5*O5lTz6^+(OSPvDhyE5I5#7|in1#3J9QiO;h=O$l#%X5^fYt)xtZumPsO z`@?-4xxtL##T{yB<@ocD8Zo!w5))2jg;#9uRV zU=Uh`B%j;lr-aa3?cXJ-FOdu0df?+nN|~sjWz*{J9q@ST`ewIC(>R$G^H_I5siv{e zoBy39@Q}#&R6NmxbrfO2NgAtdaGBv=ggC}$uO%e^#2vTHpNl+cO&YLFBEXz6*R|iJC&yEjoo*Ez&TZOq z^2sW-Ib%(PWlZ5oPC^Ee+I-ZN<}OiaC=K59vD|EX6;*t(r}hVDE2xw6ezq|Ev_rRc zfuPxJ?I*0sEEZ!?on@t9Njn5zemTN)6yjF1 zPkUskS*?6g+5;!OO2uecAi+z6a5XcAE=jS6UI(OEzBmiI6UUxAa#!bc%I_7M6!6jc zYxM8`Pg-tq%kMa@UyA_x+Mif{)2s(U9swSGO*GTB%0^1O{!ffWf6L(tcmsUe^S!rY zySj%sQbI+wR9e}hh(jeS8;%m;nl6m7nWQ1UxA5{SzU9#p%88#v5H|G;`H7WupP1&W z%E+v_l&s<`yOc_WJ=vjilZCv6YFcs@)w`ntQ0m+K|Am+V>0|wzp6|T496wG+YYf zFRqNl2=U)BMlaRiC9+VqgPc5Lg1j*TR01H3YLVO|Db+lVnWYaygHHNehT6)#H&at5 zC1u&V_xt+XRXS<6RrNKGKaO3xO6i?19JKBTqm1fUQJdexWHw1f1J*!SBtp#3-Dh3q z@3fGDa!Wq7h*7WS8vsbANxc)6!?%L>KZ+yPL5$)=&FrykWUM(D&kq>2u{x29INWVBWjhYjw zq1m(aAL^gMloN87>#<}$I;S+dt3OaH@@B!-X_Mh`WIoEe-LXyr@{!;qYR=G@>bCU$ z>bo7NCEo8@4de{hOMdNGp#PL#ZYjIWMCO+p$%#f!=Y&HN1+rbyn!0=bX+Hxyr2mQm zE}p(!y_Z{6s7)`j7JBYOa|v~|CmOXWeEX7(mICsAJHfF6Y^wK!LI)-L&b12pw9rTY zH3E#{8s$5f)HHKd$KD{_A}B`vH$4JHNI{(r^6bUpD@ux%d20g%lBUX$D>fJ??87M{ zxujb%&2)VPCKw$tht>2XLk|Y=gN_Zf%srQN76?{jpW8MOV)?q`b7(XiYQs@e1XMzw z*$uK5l~ig{qY0m6tLvbfsRsHFfx^)$a+Fj7TN@o%4tv1l3`4*%s)Cs>e4d*ab=kGX z_c$LVF~X26)!!r{@qQg>k5t7M2+%)S1R>D z{vNuXF(FxVT|W4y!jXCL*U-}wQ1H+fLe?g_R{#TP_2xJ6*qm~EsYQ9H zn<9pDE+9`r=}&ZSt2HR*9k==hPOv$o7qY~Uzs)uAO{`ETfleYBp42rSc+D+~KbCml z>)ScKVY`NbOWZ_3NxV#jkde|Mb+9@yKSa6MN-OR3LLF^H`58EP?*UXi4E`n`g*&pGmvY zX$3kjVH;O#(PsT+VJGK*{!};3+;A~zuF&MfSZl}l`6g79x3DqGx9_09F9M89^_kot zEL0#}`q9I)|d!f`N) zOT%EAku!MC#H>8QElTshd?{Tnt$?M_u|`}We$vgq#WLh-fS-xnu>F}eQn5Cn1h4&p zGtKUgt&teFw1f>^kWhZLy_Luu|6f6!dVuAvVQii~*IES|!_cw5*Ho}upwA5ah#9^7 zlCPgGP;a@YtmK_o2{6Jh7ARE|#tQZGf`V`+C(#_vgjBJubzoLKZK;9U{(Fkn-F1*< z$P;s)bFHZ@!9W`?l4@c~3m?d@O5@+rF$Q!dRM21qonw-YK5vStYRRxho=1HV@I+m( zzw#VJ;mIOZsJCD2Wgy*-BQkASNfyKy^+Qgvtc*xiq?~XnTt$1XzSa zhqH3H1Efq3-sOr3;3g`sv9x0mT(m5GX5`n#1$et3bQJdN2_X8NRJO>j!fhx_c40e`<<6*9wRjd0@ZU;coY&M1N*0zj2FM)t3r`uztsJE}^ zUK@Ks)%2xTm`V|c4SAsyj^Y3)cE)($z9QQ+P;?sR{?-&hbM%d11&E0AzG}e5cmtdr zsKu6miewEAsWStk?Rr?F;PZkZ>ig@1Jv*eBEGN#DNrivzm?TP#Z_AqM3mtA!P#Da zv{zvk?)>-GJ*B&OUdFS5{jS@soV*!z9Qw0J17_2->rQj5 zV*8~ig#~H#$zkmC;t#&u9qcdpeWr*0FB@*Ht=o+ScYwh5#6v(bwjEy?wKV%(G28+n zA6B+yQbJ55a4KuX4C-HYdW^vOkiKEQAo$H+ADO3RLn_d1E0vL_cP>Ji-}0Al6cl#7 z6jL4+oDm}GU^Iee#e;9U3=j+Z06KwW?o39Y^YlLSO3B~Uwc5eSi4ez5+u}-!TFS5* zPjGo1bU;TZ0FFES-l)AgJ;_XxvG0%%NkU9(WK8Z{gnKuGi)|lxG{aqZiVl{+2z+IL1R?(*}wnXK-q5BzJEPtb2Zfr4RH)E;Vv3sJ{mu7Xsaq#n{NX*p*-h-6uC~h_G#G24cD9n z)B|?YF-PU?%={J4$#1!$__A5&9Ah5QODfJB#<;Ap`e+xl|JnG>8jx-Cht*PpsW8c- zm==?o#1|(zW0P7uWaG7F;orXMoPJ2L6FOT*jt&Wr3@up6o;zHO9E7Q7Ah{&M$|W#fMdet*d5ZAeK(F~n`q%KfRVJgQu_t< z>&bu@caEBACdQR~^j>P0u+jAxB0+!1o_`?u;bF|r-vc0aF;!dKV9>+Xw&C2Q@KN$o27}X71YHoy+{(@pC!2+Jjsy8gJKK#C3b@j-T zw_t2;5(38Gv+9)EpiGJrIx9|e)h%y*A3h*|Uf zw3i>~58ljEcnwHs4L%62kKKuoaR`Cc>?>CdM_V1Gc+GLm!JDcpxTNo~c}|GkU0z13 z8Xq#0t7@5v@R8I{{pgA7>x}50_Dyte#M9RK85BiWkch|%yG`l>YFg$^{jV_c)0B^idG zMezI;vN1@Jx~0*hEsbDfJ}Eo9y((Sy1Ri2LRKMnEd?VDxt&5pqKV_zN5^06)Op*r!)ar z*SqI^GytF!w{$oq!{03eI`wr?nTT4PK{~_K$MF)WFzuK88OQ)$ODj;Vsj8(i)Qq&0 z1sZ4pL$7XCdv%X2cC)WwP2G~zoMFru@Gym`j&Uk(&f#{QzAL->_jmf|RrGBAL%8*v z11Po7NB{!uHy4u3Yabidd|UgkZLRxHneRQ1%k{Zn%v1mY5mVLq|Ic@4<R;OolPOY000820iG9hM}O)}z!E+?@Hz9~S9FXLy>y^*<$@G`OpCx@ z(SKy>JX@nR1ou12k=G!lEamhmeZgb|9gM15H5Cj5>@0#7tnz@~vH2|xIbzk^ zSENcg{X~uk=)3g0baJ>|PNFAd-c1d!a|#ICgcT5h0EqD(MMXebjZ&jFOokF-65l1uW&HtlV-|i~Y zvzVS!MkHzd(=pp1pq7K=ifRz`NDsHh&t=LW&Clv4C`iZCZq$-z{Ywu;OFT!9Hz%0f z$;AEap!EJBn3ND%sk|m-boDjZ%Bt^8u_Sy&IY;d)B1Q&ad@pF8*pDL|@yjb9MURBd>Ab9XYcgjhMg^HQC zZZ2;1C3x2)N?;H#I_WYEtw%^PP_U{i=SodNSh+4VYktGQlA^Ua_tp~2xPvaV2i3zT z$x;^eR)jHVhT-vbA3NRs@xar4A5;T%>iy;IZJu$WBB)Vxl#O1uM1V zW>NjV3@N?Qj%vZ}L4F>0MhiP*W1TbH*DBQ01<)98PHD~9Owgu~CvI~}M>&v*vcYGO$7Lb-k|cNw)fu9)}s>S5jJvho9Vy0ahO)Qdz_E?+twI0^)?pk-X;O z8?m3`?RbHcUdw`p{-|S3xfFY!={!E(H-Gq|s7;B0dopi?gpag|O6zQK6TGs+Tp8ty zFOu*3xC)?^0Z>nw*-z2tIeMD$z-1oF>_GuM7p@E{B$5STaIj=B8w!fT;b7QAFc}a9 z!eL`jWUEmjniql!*B&~Y^}Z+uW9N*j3UMAx5*zlhh{l~1v3^I_mZ@KEMy#fH8Br5^ z6o^8e@?x4!j)so9m1RAZDDS@lft%MHgb;6k^leaqqJtRBsK5)-=4VW~A5-usMxFy- z>R-0SVyYfHtb123-KU0U2tWXj4)C7R`CMA!iq`m_wZCvLX1eMUj6JFl2(KIM);2Xt zveMRJj6x)eD!l3r8R{?m#FKK#Ub_y1Lc?007YdL~Y5Xl=!{y{$u9*mNlv(=RnfT zK1hSPOLCTDxXuc|XyD_}mQB{5wb6Hf2SuY9Y+glx00M$oBx-Z{x_?^uPnh~QThaEu z+xBknp~uynOln!yy=!&7hku3**zeQO)`-U70G{em^&X?7Y&19k001)qo*6`U(Xb{Aw8nMas?Iy&bLTI70cP(hnf=|d=h7rG zo6%WoP&%Hbg~k&p)&WdK3#jYI7||FBnZlZ4B^yku3(l|kM4frKS;WAmcP9_@uhRh# z*uJ1XQP)9*ykxgsc&0dyYa|4J)A}~R99L2FOszrAzTKjR3ZkM!RqM%=K=;Fpz*TF9 z=;2&J4J=j`plbdupHgbmFPA>Tn+I@ZB}NDWMB_ort7=i)3rSdA1CGE{nL!iB+2izn zUk!q~pibNDE(8lk76Kkn5ZrEhpTp?Sr&s&@_mHL_oa_P%r%XY_R2mmtq^y7jm@$Qp z2V(q29g=5>rxe@^5)1hd8dHWJcm*T}f)zNy8q6mF6Oq5`Yc*1FIQ%&9t|F$a001Cm z4CVsDLpwC{ z*z?}~yZ`_iCqbGVG^8n@s00iOz*zzWr@urPTqt1m3WIEu>*g>Mm`fYz4iP$WtfPO{ZFG#)-;{S7 zq~1fOc(`wS8#X}%%P|2ocb9e$2xh@rEH==#nR;`NG(Y;!$CHXI)i1_nucf2T#QaR^ zs2F0K!6oW6GK}lFegnl0Ky*jbZ2wR{A8&gTW%7JU$p~)(Y}M$dTlo8v#Y4h!JRJZt zEGUIHH7)a;{;u;wZ8OVDCiZMTj8AVNsccrpLap)3;M*C!7UNMlE9WS=r|fWJbFS=C zps^~y7_&YQh>TIkeGXEh%N;{iypcjYzBP*XHKO7*#NpfJjLQ>3$Y09i zlTYv02L}Ux=W=3RRTrwM+LlEWHS!5KS{Y%0K#WU5q`@sJj;bJb$3(NjP1HiO7o?i` zTY`i!2rEk6pgK|tETfLcyF@9^1uZKd8Q|&Alr8z->ZKjJStpBum$SE6GC2=)it$H8 z;ht&O_pk_xWWmm#i|L#-juz818k;3%abi8oeUjSrtOL6E*+0NDG+su6+j-%@jF@_a zV5hUsf9pyavbd@Cgh+WSyqi-(5v?6%$rnr62bvUMMFM<#+-1Ke2rJYjH%E@j-JGe0 zj2Wc5w2Jsz;u>Ls*qSi`c>gY0_*Z+^!Sh)B>|v?I9QR?1={b~&JamZgKEC(3O3)i< zW1k`1+)!=FV_1JMDpq!&p{53`=iwj-593P8(NGc&@`1f8zWxSSlJUU{1hA|OM7?6&(b;8?)-O~M411})7}htTZ|oKF%2giC~-Y&AKQXWrC;5S+Lxkw z?p|E${G=E+QPn-n>4!V}D^hDbogsoF=jf&g7&u1-(!!oG=STzAUTXHmOXkpCf9#tx zFK8*pt|opp4>WzN4}Gu_q+z(D_N#atsadYR3?Kfr{tfO8q1}pD#!l+M5xXP5;TztX zz6pX9z{4PgZbe=sz}vCnfW=OXN8DwXXJpiaYpwU!k!W*c zL`7dCET0$Su^}d|!a5lOBj0;r$o~G*2p<$z+WgW@$-~Amb|6`w4 zqmU_)^c-W|Sx$GI74;&;<8FR;sNFNdE&hEhg5S?%OQ2!nPwn9=eJ6eLJ;MD=kUC{r zq--c{BXJrrZA07Kak^FG_1SmSrQal@tA_~*MDqB(09ed_vSgHTNE$mVU0Km^VShPABy+ta%>fa!-&jqyKMu_@ZF1aPUBdV0!=P zs-w)day=~CU*6WMMdiXUB5_#&DBHK!)&SJM_s_bUZ#e*jbjjHfh?{#x(@jck(hn9A z+s}h=6N#u(su667<_OL_8GCWZ3dix-Vzcb2f{Q_rVaAd6TJ{&f-w#(BDMHSGe$WWeB>dfk5=x>8+6OLy)6etUWm+)4QtZW7XWn*5Dyy28HA) zDyya2R;OD1B_utGVTUEpX)d*N`ir)!ku@5tul(TqRbbvP!NHfwwlX`f!VUwMWaqC{ z!h5#FE)jdR)pAeT+)c9bexqi#P#Z~m^SuvVDctb)`C-q zuht*3(hGi|;d4%;QHa@+LyG@a61qTZvT)o)HI3*PF< zIac{{Y7ObkNJu(PR+Y7&9bL=;oi{n)gJ(&Q6nhd*hCrNL_JtvYk8i`9N7VV56+=;> zI+0SgJgI5fO8aQSLCP8@g#ZK7YadoFH#*0ArH~BuYHB8RQ6(Uo^gL&j^RMAwZm}ea z)`oLCe#KvIPxck)L>VK(N0Dt`nhw6?)$(&0r>z<{6Z8kQm?Eo@yQLg(D zW4hHAa$1N>%NgRX@pk)s6gjV!kwj}+Og)o4Mh#16>xw6k=APb# zD>m6?247ZD1lY~vT=O#`ZNfG62U~FTug?~0P_t0+3V21m6K>G|?7WGL@vsK9U3u-m z%NFn#kXKWA&J^tifa#JU`QWpgYU z%}iC_ytx?RN}V5ND_68|GLk=cfCcd_a3HMK`GcUIuepU^A}czELvP7Ljx+?znxCZ} zYLmO4S&+x~XHS5bUa%U@rfT%%dN-2A2AU~C3ATLIP1qTVaI;fP)YsWYkV+E%$exBN?s&Gg5RgV6gMj2ht}k2=gkQ(BNtCs@0hO)lee2O zyEn0H79p*(!3&*l7}^5%`hCZx|Fs}$qak74iEW-@vOSaJLboy@t6O-tHuVr;b8}-K z&aaZmF0EyKv?wOuB8;F0VSQra39Kf##uW4 z9lN}w7Na>da-oaUKZor@qe1)COi2ly;%S7?Q#+k<6F{FjBw^BxjFUiwi2zq5z##7v zAIoSeSOd&qK1-B^6oL`;AT$&m3cMHWh)9CLV4iV^I4QZ&~bWJWZ7Q?rkOVq`>CcO0J9~y9(m}`hcW8vS9g@xP5&uvY(J@PU9x#cQZ zL2n_p{9NvrhN80X!!G2-)l@7;!^~HN&XH(=i``UT+350_b;2h3gJ4z>ji7|k{87IZ zRio|K^jOlJFR9BVJ{a-Wh#`TXKPpjl~u54%Pm`qWVG+9N^2MUP~u?EKq+gGox z<*~64PgeJ_XPiC{Z~+_Nkb>SDt5ql;!GkXjQZwvd)dfsW=ay!Dz zK{Sk%pSn5B(?(wFKl&_=op5rEuVb9tB393G66zcBUJ(@i9Y6mp@WGuWV$%x%Gri6$ zQ%M23trFSZzCSgD0&%R&EOSp z+HP7$mVH(DeQqmHQO`vbIsjt_VZT~x3TuryJZ#B1AiB$|iiN)V&rn_D^43q0whs1t%2nl>RM` zy|mGYEXW!LP=_Z{9-c1nP#_1Oca$eO{`b%;!JGp501B|_6a3F~`n>aIY*sc(mBwak zMz9q)@M;w}<-ADUfP2$QW$0nBJj=HMzdvWv0zvdeX-r$i3wK&{zjeY>-KxeBr2nPG zM6Z64XY-XL3A=;3uHJ%UQ}RuQsXamRFxqpMC6)&ubsBBgu9GA5BuCT@U(fp#O^g4; z5y(t(fB*mk08VY#;L^u*Jw|&V^+}<*Q^{~rdFGyO3I8y&vwK6^-P6}Inm49&bb`|j znlC;D$9AIrLeVErEY|F?q3^5)4E0ZeaT*`TI_^~wB_^Yi)&;SOOLDg6=rkKuL|(!| z?FBo;yHyDPhuyL7tH|UU7#TN}6km2fH!LX7ofH zVK7p|RKw2Gdit#07!|uMfuih5w#9`VV91IwG(>eeI=P^SRRU)!&oCu%WOZ?Vypy6oSIZf zAO}KKlV*%jeDozQ8kpgm7ppQs3S9c)@1r*OVZjot&GtFk$k!nlN*|#wG4!~oaIBwr z#Dgm`-zu-&9J>`|du{~!i4M)!S0E_A2h)S5Dn~+)@ES24j9rF;KU;S?Y;)dhEy>Ui z0|O%IJL|V_6Q72l>oSdC`qHy*Q#pH{cWxFPQ@H32!+-6Y90xm7pZhLGQ2w^u5VFT! zlVA;~Ri6sCO2Oou$l}HB#KF!mAv6zpB(;cZ@)IB`&okSF%ue z0dXNT{SH}tZaB+p7>FAw_YbK9D`JA)?NuLkkvMCLI@ZNPzWv8{v@RmCCsW-3Gm!QM zfxLI0>y+#5?*p!eF$6Dg!4$DVZt4@TYCKAbpQ}xDwa{@(RAj}@X?gKIx=yTY)aux5 z0q$6DY+}OOIMdf_(8^7)JB&@3lTEpYz}zabKZ*zYYwF`0t8ashvo6yj@hf+Wy|>5e znjf*;{zton!#`RqVXt+bOK@RX4pn6>LBw}nH64{GBjF+L+$Zz2PcS!r2aiO{5(W93Eb>`In5-FtgcB1P&s<^5_Ja6irt)z=yu zO@+us+3Z$*Hg9e_Ei?dyddbk-A|z3WbEg+G3!2gF*BFtr6b~9zvl0cX^;S1(6ev#` zL*2@%rUgT2@XrYNgeyTIaqx{>4$t@OcresCvj{xS{E+Rct1ejXi|TGTgZuX}i6@hd z<#o|$&f@L3KJrTD?n!`TFUj`*eW0TB784Mpn!7&})DwF1C{nC7KWr~iJjwldvgm+PY zE>P7cxt^dj57RQY*>RG04nRz3>&TKf0my4A04S8Wl*5v((t|Es^l_J6wdL^agy@R} z*Nt1mxfp+98|E$ffMi}xX6Y!`O)sS)t7>i+Qr&ZgF)>CP8BciYC3a5t)qx%3SNPhc0L+?CT|e$%uR4OPv%wiFD?5mppiBwd=4n_uLLf^-eP^l7&_dMsouRmOCb(tM8OZqxyPzKlIHGy;x_ep{?6l6R^-}tP^{G_n zi&YGuSM-4->1hL`D@H7y>A*476j~^N0rS}zf>V)){%?w1iSlVm#$(}ah6S6DaA0gQ zz^YTqg zM?A$(^(u%-$MC4U537I;y+>)^$J!BlRenrhP8WXxl+Sg3_BVk8YL_x*CSQ#+_hXQ9 zi~mp9?sE8LLD%o|t=LyTh{&i9XAMj>kFODq8H*Hi>!7ht{;Z>F;8tK0$u!ua0JEVg z3dGOksuU7xB9_B^rYDL*M(ZK;ncSrc7j8Eogb&!e_eF}cA$yiY7XT)TMsQzTJ0=YQ z|DhH}O>wq9JjH=kW6P6>v+i5{b8H<}&h$eW8X_s|!-+miz<&hOID|^h6Lt>y_clrT zL|S_;JyTl(77PRX-AZk*taaXRzg8|`?%JTZ(1TlA5z?{~>@b*FDTc~_7M^~#6Mz7O z%nll5T!Nq$lGl)c2bwV}!Pa~q*bc6Jl0XH44Y7vG?(>Lh4prc{y`O#CgH|sAioodH5hE)~!2Z;^jY=RLl z$3t>ZLzT7FQpSjVjDTA>6-^99{Hy|<1>+a(Clq47f6YDe#$1$@qE@NzUV=k&xjCtfa`*Y2Q^g+tFrWBWB<;^M{2DyQV9o?N}LmuKZ ztkOJ8Jr}8w9WFl( z6Pz=}mf1bfGLfP$J(qr)qT%6?g~ezqktJL$W{zQ~C4vwIt0Ht$Uf|4VS*#zM6d1ci zYBTy3u08ycxa_n6RiflNgd&x+;jdn?cEiD3gk=-{(9(l5fc3yHA^WvZ2mZx%v|`my z2}D)>VM@E>J}h@MwthsDEq8=(eIQ&QHk*uq0#OegdB(J9Ch>v(W{8_JlDcY6-qd=- zjix@pJA1CSko{I+RgH4Nt_OFdKqH>ON)d1ds=SCU^WCd+D~e*AvYIbWm!@F)JQLX% zk)qeEf>53X%ni7ckv73{-Icr7X#rrJzErA*lEgXWAfxyZ>mTJ;%S8{v67ahwl3q?W z5sH(%_3>YBaZU1QHt=aDGc5b%Evx?;plKoNX7LHcCmQu)tvMmg-g}+AT4<+&v`)C6 zwA-)93~kxGcxC^G1l>S=;+q@)%+71b-3{ChAbwyYSNM6 z(Q@mts-^f@%+^da|0b=a$20VmO?@arA>OXNcuEN`xaEYqZK}}u`Hk4x%~lXsk+!!l$V)6W+p)2+j~|%AMB}fU^#NX4y&HO(1D-{W{)Vuhen<_A7Fe+} zh(Y#TmilZcr}Y0@{$*{*&aIQ{YdiiWKJSsA(J2SJHtM~1IQ&1W7SRi0XJlhB_l#-E z=aa1VA(Y05Grs`OlKAk5q3XPn!A5L90tQ$($}pAYb4lCoxAo>4CEoElpj9p_-2)Qz4jZVbZl406#^}c!9gb6T0%WIy zKZ8m_hS(y-?$gp>46wpg=B`X=?p+A-jbUz)p;N~#J~}b7VZ-sh-@T;^8Q&SxBOK*y z;)R>A17F#7E#+P8ph})n1>@%{UQg~dQ)Xb=Tmk)4@uV3%7%tt}MsrOP8jJ=Jutt3u zpUF4ZUHIf(=jGw*7g-S7icapmOPZBQ?puHJQ1!bq{Oo8L;dF?EkdvfIiSvhutd(P_9eXc{COGDC==!&9S09DyO$?|vE zpP>+!f^%v<@;b&w!c$LoT#j2(V&SVmbQjHK^#GMg1!w(peNYFuFR#Hi%YdUvat6&?rmr^@WNQ~EJQUXRlnU*VM{JeWfv8O%O z(t`p&oTL+03XXbLSYMIg!yn-z*jaB?g0l&IC{CA)C z9!>~0PJ@u~t$K_ndG2F=0;VQfc}s5i=qMAwj!}3w0Hd0_+>- z%gX>|NBDLfH2V-JUwY~vkkLXFn?yP8`uqCOuouYu5-uu<%w}iK&%De|A)d(NTqpuZ z;=(nxtPtcQ2LLDBB8vj>(@zLdNxK#VxWhV%)f6^tej!vH|4UkrW zgfQ6S%%1`{2M}V*DnPr>e|g5|tO=2C+q}HJ^V3agjE;dQxPXWOU(Cy6?ccZBo7A!Z zq^hd&sEthtuJ6r^)l`b^w=xi2M(!W3_rAO7|1bI{6ZqaQCk`dZnJ-c`{a=q&OG^Z$ zJ2K2*9m84H;|Xf2L%$l68~h%ZCmB@dgjRiD-}rpFn!vjOGbP~}AY9HG-H#_*Q|Yt?!bAy zuewGj#<*mqD4CU-Y}vTZik?B6uHu4R<6&1uTybO(%uC3R#hX_7)f_x{^PHR~9a>SL zYa+9QjsMTu(Htwx&IJwq6Ki0)g5LmywMx<{cX^N?QN}?t0agB^$pvJajm;*MBz2?8A zTMu*W3BO-M!f-hse?rUsbt>zj%e?@*1pE@Sfs|*nWB{Gx^C>pldzGR0#nodZmx{nG zy3z#^fS(K0a!|(Rz=gMU?c8t$jA#*~)@`zC91_Eih;a@XJ>D9>ezLzQZ>Q5E*_*pL z%*?)!=h*2Sh`0F4dLwBg=+qg9zC?p;?Q`sQ2RuJBC}k@mD`;<{@C!#wOTdgox&Mp6 z*Fs`@-ZJYVGXW8iz*G(V@o2%{BPh>E zWSo45`sEp;E_!{MIYz8hqfB_B&VC5u(qW2j9b{q`YkZg))-nqxGHJiqqrplPYFnKT zjIH_3H>2&p7Sb)Lp(D@x`%Q8`tN9L(mpVOnb>URyQv;L#pZWjMe3UV)6wu&pxPS`% zF(e&IK4ek3$})^MQSG!5);B{&ps3N>RFIioEyS}>C`73&R0UGgPzVe&3Lap zT6OpMc<;hf;jl|%W$x$;i$;~7z8Qi0hqgouMwzXX2zn=;4KJ(bl zwj1FfAO?-yt1%G63~yIQs-F*=8Qs=w$FTpt8dXpLxRo}hZaaGZez@bO!Wn=l00jhY z7)rPR02D((nqNLcngVzW@FNC5fhnSI|9=2nnyHm9@Z{FhgbwwzHZ})=m~M`>>njgJ zd}xIx!*`r(O09@r@1JdycFNM$q!;)8z5W%@AP@HD_t5zcfwMEO6fss1DE&Lc+3iRJki2l%Q6eBE&Jt@_FCK4@PouROg8n0;6p4g)1&qgn zWf2Q1VD}hw4t;E_K$)NgEhEIA9LWV*8a0F-#~H!xqCkWhL_5YGDd(6Y}I_kQEZy zO6s@w3R!GcMQL>A!#41Ai}8dRVElzLN`P;^m0>>L6?t?{IB_j&NhI4z)h?jV{eJYl zAbVjxW*@r-X0oI=m`*n{TCikn1k%7(q!@WUiva@#ofKM0eg7VMeTh>k>VRpe7uw zmBX_*N$}kF8f(E^DFY<6d!Ti9tT?289Y=TKZk4-m$*{a{_n;@{x9#CHEwFLav$9F1 z6)-U%n}hXr_YRhO$Q4(*!CE6qXv2_o6`cI-gdzywea@I6jLjzbDndzjK|R*b5*=WG#+E~{HOg+~h$+9v8hwfl^P zA}qSBo*dq4mE1CWI}+d{V+@R!wxXKOR;h>&H$5s#KaPr8EjrIMUuV5`A*IDzgL7Fy zxV;hUSoQTT#-f-<<$x}zKCAQ%dLs}umTToRrC#&DJ?nn85nCnunE+|rDMj^#FlR%e z+sA?D;lA)Ihe2!!HpFfZxRmwogB>t7bXPx;;y*I)y<*R&^mF%bu%e2G)FX?q?L_ zc?>pnPif$9!?B?AR*J&feE>CuuoT6(TRB8d{6phj(X5X4qRQhV?nQib50LedGge^# z8At4%x8LF{Dw4(}0agx)OGSQsYDA%Q2~C_Z`)GI^==fXV=ZH2V>yx-sOZcVQGq%W3 zj}wSxlBy%{h4~#R|Ldo40dClr4D1>hn{=OVy_;zQV0G4%m~X(Ih%03_7-q_vfw4;q z*9k0%NCOChqNB2)ks^y(mX?dui7F@ZVe`8#yWc#P=%EW z+>fxD8dojz@3-U09Aoe)+51i{OrRC-Z>!DDSAn{CUaO;vwxPNWaiSGYEB2VrV9@LMF>j zq1XvKTV+8U4IL4`owgLwKW_H87U0?xCl3r5^F13K^ac_G;Bonn2}0Lz>6^O2xSt`J zSQBnbyE_P;kTUN8ctU^>X(Rq{zq%d3Z_S~rzhrSnbF8neT5kOD5Dfe$ewN$rfi!aj zEVLvmY@L=kHf`vr2v5mmudV*(07-n5)Sgs@PKpWI2+k9eQ8d)NwUCE-6DRbx(Aw$} z0P9nlr1dti0)xWxe-p1!PwK3YeiFfNZ4!`%J2SX+tyKT`7$)Ui)}8e$qDP7KNI@9H zbF5}hUJ+pHv)6pi@L{jqJ&sH29>H2RID=G{VBMak4UNI^b18OHpr#8%D>1Yy? z<=T3pHyo|5RcfU0ek>@Y4d(rujnp=H=_(}#7zdVd6ScP`-Ss}m0_I1Vrd%rNKiv87 z{4p~L+>$ybZRlfo7{fBh-u{#O2~q2kMw$XK&x2PDK*O&ia+_O;eyJy?Yud- z`;}xir@%&df$DvKYNWB)9YqN<M4Rq8it zp5b4)5Z5H)6EQ~zd;t%LgwrxLA^*>Hp;_7 z_H#mrJ(ITYGzX}BSuM?*SEx!nOBdML3M9Km^D}g3(U9O>W%hw<0iUle{v#z@GN95h z+bzxk4W^2lcT=uF8|!kzE*l(iiL^^b72qvwD{gtS<64}Iz`tIF6lCJFQYkJRqJFr^ z2)HYIR*K=D>%;VCY{*T5|HL`t@_KF{Vc%h%7z1b9YF1(A zoGckz!PQ_NC_9fX7t6hX%RxDs;$MKSoJ2UZ?IuSewJ%lT7g2qj=X8KY6|}f~BlWQe z_O|l1hVfcE{krh^j~B+Kn5Z3g5kyuB9}Q94Z2lwU>;Xey(oU3!vCrul)fRFkX7_Ts6tJ*B<@a&og_)Sv*K}e2Fi|;!QKD5+6`OQQpPD}YWqf54&;y;1CAP% zVVKMWXI|n-8Cv)F+zVK1B>mSTCf3X#xH3PM^3xhZFZmofdF)0SO_a%gM=I?}9;Wml z$mZLifZ-{Hz-s5=wzj)>P4Z6lvlvm(PQ=*gP$Wf!7UIm1P_l|6p$^(Z9z~2Ib>|F{ zj!A0*=PsuMqWyfyrPr9{Y8 zcLp+2k&#r4so~&*;AC0}V$qp7ner zeL|)YUyz}`ZS=lQ{78&o+U&q&pC3=~LYCjz1SrrVcIo*xRCy&=L1ujU+3$ttps!|* zb)#6F(4@($G_@NcLNcxYf)HPz@$%xH=Sl1<@x`kj2AAS;EF6Xn6Cda4NxRsbNlS=b zC+Hmiied*c_U+=DZ^7MTR*8-W^G8v<8)XX7Fqh;GVJPW=6=DxNv>IKms*i@Y-|nZ> zS!4_r3)l{eN{ULk+(0kf8$oQJ;Q-aBf>shdwKF!4zn~3cSk7`P%gtV9;SuTfcx_P8 z^%>j6=Bd718AN+uM}M}!g1%3QVs%$)JxQKqheTWl=nXI#*8=d9c`N~LN(hP2P zN@~wr028GgoydQ!Guul1atDg_RL?C>75KqrYT({~{Q?1MPB#z~L_jb*HNP|indHo+ zf8rbuTbouB`;_V`*>+Oe9oX)-pir-7@j$NKhgpP}-8Cj*4m<{sQeG)2A%1Q@s(=o5v$lxz2G!)0e2ig&)Cdd1qC79b zz!cvHZpIol=KgH*DN(!nJ3dfC6rO3aW^X%CRTMdl)fRn>9kx4u; zYWLO+=Sb{$#*jG%3`8Hbj>@c}e(Ya-2O|z}ao|SIwpO7vh`$bLQn$mLeJ3^fWjA5B zZ-!3Aw;|gPzl9CTbl422W5H<}u|U)jE12gph_Imy=(e$+jC7R?>TGDp3@eHg?tf6N*U>z_XGp$s+Q@dV+?A z3PL@Op#YWSFVRG47eL|#)}-<_c2MC{ZKQ&B7xh>-(a~%-_lw>(cI3`;eF zcujK%n)^-^B0UKcxr$uzSmR>2{VT>$NkEuZYpXCyl1=Rszbx}}Vomb(D8b~rt93N- zR{)@A(5Q0&3_72RQpUHqq?nCWH^8sT_?)inAeir^xN_EZXMmG!yg8ZEd|Q z{J&$dlr;Fjy|Z64tTPOr-dQ_pPANJ({wdblQH(RhrqW zfSfcnSgDDPFJ}~fta65+hDEBR$p1azHPssf94j4Q@UulK=DqRyL8uLPidxguW7@)S z>azMhx)+&X0EWJ4qN@8YcP^!`4nzgl1qDDS>$m3@jVb~@(uRlUQ{$O`c4}B68bOh? zXC%sL{rMrw!w|H?L*TrVXGhRiZ7g+U0acb1D-8-1K{yf%6H~xa$29T_;poSbHa*Uw zkR&-YCUsVK#y(SWG(iU4XQEZi;x}Pw@W8dU! zYK4_#&WuPv$J~~8l)gfzD3fht>iBV5t4eYSEY;6f-e5tog+>GrV1jKMeS`U8xfk(3 zFed6m#Q4ta*dNtIq4RNF0~NV0iZ7Py&)WDYL3L6%Ui=#L^7=hP!Bq_qIB*ijZD&wk z3Cv}ho?*WJU5wdcOdj$pTmmCJtd~|+YjGf09N?zcP_Mx6u-@61w$DgZQHl;GDa;3G z%UPBNy=72zlp$!ogCI~a)sR3s4;lk)_iI6+tw)^U{>z4U^}Qnq@~r2cU+*ZC1Sf8yKj^%lM)5z7fYNO0?&uWN*&x!RzkK!`OOC=c9VZ*Ej(pv#D;8G>l< zK+(4aX6}1pkwy;uYQ-OQy0gR#2R4D0X}RTQcDSx5Eh_fQnJK2NlZ3Zo@HgE(^0~Jk z-yXh?(a2Oir?}IJ^B<6#c6IC;tdu@+M#$eLr>nw7dyF=8x$ocIn6~%BU*4QGBI@Po z=C#U~WD=K$0JhFuwb$h?ycZ1YfO!DwIGWk z|1McVq*5+-rcP9rp5%u<$kZQTffav4ffUv0omJY!VSkXq;>O>4B|tZ)_(TJxJB)fT zd{_XEonEprGc-B7{IJJ%ZD0PVw{$VGceVERy!G=)oA=2FQH}-Lvh&6j{v-5kgjurN4K{^$ryiaL zwuB*2k*8)+x0j)McF$v+iLvQutKou^1_Zu2sMq1w6 z$>oc?81}!IaNEK)g4y+FM$-PD;Qmf487s_rUjfG3ilY&X?&$bY2T2eG$|j#_ge;4n z*Zu2`yG zj`t0^d>t&Z2wcR-l^`Iz@ZEY@XP!(e#%}C%}Iu6$iD zO4r}rJyY;qTnu*_vA9AjTU+_R-24Cj`(z6MzhkY`8~^|UFae%^L?QqF=w9}lcOB?z z44v*_W37tY1;LVy$LnP2b9au|N=S%U-%rWCs+~MiqeoO&Tg@lZ*V~rlX7;u3mPDF} z)MIuMMS%&y%l!2ikttgzDWyWkvq)$y(kCKNpXLqE8#1|0pgR1VM$G%!c$!$Apud|W zR2t^!VNNx(9D^|d_%_(~;|ecie6kUfB%I4xHqj4sXg-$&>{1qO%nWw@{@E-Zlh%$1 z9RqFB%~B*^=<=wG#8tohMw^kC80!RjxNz(Fei^6kNwXI-~@MI}rw_rG41 z8qK}H!H+LoF?S4UvPIsq4u=9;R4ys*7{~(|IxCb59J2 zA1r>khKfZL62CqNE$3=wMN;A~tS(4Fp^ZiNj$rjKQA$PF(TEr=6)VC;fLCSZl&GA# zIY!=27*|SICH&_gx$N z5CuX#@Iw{Fjnd1GPR6pB#F03OT@|J$pwO~AdRMk9t zB7J2t$w~{G&GD}}yofq)x!Z`CJZNwL1@Spi9+b5vL8V_SgUtOQVzOuY_ux{@!33qr zFL`cJ9fdPtrIOw^SF|llx$mB8X}S$pKki5>WMu#dIUG~q+8i5O?UVPG~gZ@OD{^HK{=Ad8$xT!5)v|H_rGWFgq~ zuF)0d04lqj`})(zq#xvx+ZH3k-ec&!oJ>I#ZM|#aEJcv&!vW3g=a8FTQ`=|$)c^>p z#{@`W8tCOO*G6y@kR%^dXYnFB{6BnPN(Zi=mo*Q*zJhs*rz;OAj-mT~h~^WZpx^K( zn#MxI)EI?lvzBIqRomT%8Uf#Rx)`Y-0(97mFU_wc3SfSDJj=Y51o-S#|jl_@+7731u6CBRpmg=NUB3mzBHy;+MsXWHYjh+BCeg)#K=lc6F_L({YtTTU zJ4;O1f)a3=DnW~D6OjdSyIeYPO7aq4&`d;}@Fw*N^py4&*7`E6BFaq|l||HVz_feo zBRY{rjd@PcR?L>Snfh9fr&@d%@!i_*m)_B*2J5=x=NDsEZ1(xo<2OVg>n1%~1dJ%` z=1t~S0eHuvjm2O90}D216l9W32no(AV##e=Sj?8gMgZB*s$Ld`y8c2-as3~a@%4ZG z9_8JDOqZne;AY_cZt57)|3dNd7-(p>Usvh>&s|}(>kkUJuNkbkV~?S5nh5 zQ=OgRqybQ~0wQ+S&U^P6ewFK~CaE;QA%;ft0OueS2>a_(j*xWuNXf1LbWrB#t}xKW zh-)PzGO`0ieW}t7=jR^%KLO2k1Qlvs`Sr2?%B>s!x!Cu4dyPLHzA0cgpyz9U5g1x4 zURFW`gQ(AA?gNy96clIlbM+c8$o{|wDIPQGcZ;7*CTMd=F+%+u5+L0mlxtxEB!3) z@ul*oa{maDTil}?_J;uCsEFdujjPmDC>Y^EvZ#}ba#)s8D$N3w0$WcV;7QBm%EkrF zj5gx=e%(%%92k+6DRpu(3;mA2aJ9vmYT3_#QDzdg@qkQ|@g028y5PBl&7Q|Q78}N; z#z6fb?=Og`+Ky}@2;ack++H#^1o;8_Uh-Zyg-D`Piy6cAWlM0#aNN2Y)R>&Yu$#Q2 zlz3Ubw|0up25XezK*xs<`fH4-s2hW54^OM{+SvjYS3ro?ds?w#f!Pn#Q-rb&o^!tC z0c;?_-H0rrbab7E#cDJ@`*)0gU0;L)Q+yO%==^l(J@H^OX5SG((bno)b?4rJ{T!*{ zAVXg(|5TSCQm$O${Dr39oT=}FIU2X06i9b9Vn=>ed>G<^$3PlS4zD_x%USSCB=SEg z=|Z#BvNXbqIM3%;oeO7FLXf;?p|2I%kdos*Ro}oLz#Rrun@&om1zljrh~{Nf|6G)4 z>ani8gx5CMP|hFLt^DgOL0=3SHL$UO`BnYOb_BXH&{xH2uT;J2Q;h1PtFlnkbJm?C zk$fLeLj6nIRo{IyRCwu&LYmzS-yo2j40?ws%@QZ@i4wNGwu%^o-~a$q&q@zDga|zK zx<(Ub-Tv86hgLCBdt66<1YDE2N()YP9V^mO8w9QPyHR6XPtFLdP!4EQ3sJ>q^l+ z7m_JWF9y=fwLJ$V%>IUHY=GTAQDDwtlQ2lv!=ukQUd%g&{!r!T60MWL!quC(zolvn zq=MiDS}Q#}X*X(Oh$4dC^pDS_t>#DZeWDjJzLp^lQYbV87J6JRj*0qaXKUW)kYoeW zE9d>I1V?Rw`~9}*xm*Y`G2Scjaw>NtrQXxtgsV z2=omXDX z1YVG6i;ZREVZ;_|zfw0X43p|vrZ6=V1vZO(n0-smM2>VI+2Sl{b2Yp$7PNJGqhzFS z@fAGN-t@sUkcIiG6B%ptMBjm&y$-!(Qqkp2@gKXjR=|ahxZWqKo0>IeZ-E>H(GRD` zuSkXF!kzRpCHeRY1kNW;{V0LGde?p#2&Ywi903@kB&(3^RU1f#Y(+NDMN?3qn?Zw~ zVB2^oIGLb>2Gq}PKR9>+f6_rj4(h^L^yakjA~S{c)~eT4bU{CM1XX5zo+W(iK+ zTGF%dPWj8787Eh#YjSGU^k%L{*>Lwoy+IQ4#&U3&cxnmkDf*j-ws`ivzG&T8G(t^+_5Duq}5y z$q+>3SPRWm3fqUM@5~!JvhU2%J+&ek? zY-JOq<@W{&+N~>A_ysxX+v;4Uolloq9sTdM+vVI^-Cfmx2z1;^%s`$1W$=Oet8$s% z&}zt{OfwkjoU!nRYxW8wL^b=8>0VlKc~;-v!kvek{r6JsM%|F>qeuT`fV?S+;@C*u zz_H)LFakO2SS~$bs70BYphYm9)mf_2kOymz_^mbWeMhS9)eGi}tl;{6)HQLRi|ige zEF^-il4&G9>XC#}74E;!IC#uc4X*Uiff(Bg-`tseyTVPh$9%rp$qz5hQX7?3FP^5` zi?hrM9oT8wA8Zz$`QaZedwiytrHpPUA%cmcs2khn9=~MsDj(9~g{!O3o;kueqd`bj zx3K6NQ(bZr(<#?Qz=B(f3uI}|j!t#YhxSmg;;}BDJ1Rsm~rU7`_4Bod9&t8jcGUrd%a9+;e!+w3^l=hqDCRZo8AX{2{e= zYK1Tj)=r82CKIM)PVDhP8G}}`#dsY1_!lF{dJ6DnBm*f&mPKgcn&VWrF>KrHwN)Vp zWC|1Uun#t+gUBjgYN2a~{BePYo2C~hjpbn$Uy2!z){F0Z5C`#i^)*RF7ox3#sIgNnn2D}WD1f+@s z`Y7f>OBl-NLlv|t5_6VdhaUTf&w0ka-qo;>tc{O*G4j8(bj7xju)3m+j7u#X}LXcXmcYY>dK@^=T3 z$XV^U-epiHW{I8Sx$K|JXAPA$u;z^FUwV8%79nevK1oTTBCa0r@BjdbD_gO* zuOwj8HA%7Ep*doDU(w5}J;Wdy=LLTBO6r&8zhGnz&phE+jARM0CfT5dy|7G)$YDoY z)IG1ux#4dHmE{OaH<)5Xbyj5#^IHAt>h?d=QNMvcMAZS{rB{fm->@2kr)}HTZ3~~i zNW}!5&3_t#h_5E_Tud`Pw{O$r5l=nZ9ydgYiyQJBZZb`fnNgv>Oi5d=5B-(XIchp_ zSh?8b)T2vq5Bm;F7H6fq8(9>jb}8q$6URwwYss53=mPH5ji2&_N?|cL*4=Kn#+|S* zahIX(EcfIUd?FMOB>lNCJ@<$dOhKuLAk;BmatZ^{$0Yakip+bQ1;6y$?jX2{HuL0X0`0 zegY0i1zXGmgFzvoNI#B)iG~wg&>a7K4mo+sECg>P?0RpXTe?etrTt*V4;2bd%w!lw zP~lWS&(QXu2u=RR#`8v1R1afOU%qGBHOa#h)Z@c&FTY?jWS{t#6E=$-Q0bv!t$^k{ zbRVLLl-+_C?YD+>NCHia*VJ=v{id zIIAUGUPN$z4%26M**+e3?b@yYOg=8P%UAO!H_;wct$ak!4suMgSwptvYhPNCNWKhR zUP%J=09LLmTQ}C!R_f;W?z5Hg#m$#qVL(gtrFe$@A-0O&Wpgkan%n;|XZs@UrHM{6+aQq=1j+ zrVE&ThlB}sYyk-lE2yj@xbiuBe+NjDDP@T{Q#iIFNkO6Iiz@vqB;72b zjf6Jq4vkV|fu>h~bLw@g_ zq@?dOS#z{<4=-=P?5#vD@va;8KUbrK*bj(YT}&V!`UJb4nEPyu=;=JxZHoJdnDTe} zJ-$0eWlH_h#*LFk$|5_x?TDwt+1(h+sTtKy(pW^%kFRGWm(@gROGY(K!Y7zj0HS6< zZ)LgpWmk+(z8z~4K>#E~^F?M19VXO?Eg3BiYgC?RvEhr#g3QG~k64!g5yGffQktV? zQyIkBrV{bmKZ$WpuN-L_yes?_%Y@B{c#E9>7kXTzVT03f@ssrBd64y3IdP=!8oz$j zPE)rpMA0j=7y_A3zwe6}OAVyzx*=2Q(@2cw$6foJc9>GQ$&lvXxISFHCMGHqbH-wu z5)Iqs(x>qIPP^nlZc2$rzMLoCP3I)bvc$Kt0OYP*m+Ymw)GT_($nV&}&w%fOnpt~! zJBE(UVQj&`)0J?@$+ft@F^GXDmikEk3t@fOGI1==Xez-xe)m;kg4G8K{jwW76yb7u zy0A1Q|-e-@dv`>|X%n}*`+4p%@3MGxow^^d_f z4vms!P5aTDqdM#XPJM_`MjyT1Je)-(Y!|5VbG8yesEo{ppbc5CQZV2PxwYTB35-%0wo5 za4iQifw$fS_b*EZn1?_P(q+ry-Waox z0Du5nDw5_n{RZxbLoH1%n|6-e*B}j`dVIcqbKn2~1k*vDfkhEKcmASV_N<2cE&grx zjCZc6A8n|NwS{32S|`3cC7G8|kA%D~uMj z47NPB?b#vE?r&6BR{je~)Td8e>gS=Uj5AHtKyGelXxEY-X->KMFBVJQYONb}y?dS8 z29$fH23#7FvU#Brw`?pL&iXU{FK-2mKGy9DeCvWcYwuzClgSGqio>G41$85y0VAPb znOeF<%R#+oVS`a1I<(iDdLX*!YDS+0=j*rdkw> zt4*f*QXfz`r&75=%NihOj4{Zj7msVV_%RngD4`k{#6+EL=JmWDe`h~es|%&)!8WtR z<`8V$Zf4NuxgpJWh5Dw*_Jx|S;zl%eM-*fJo;U94Vo+tBXC{?>J<;#F1}a41WN8QQ z@9or6F{mxNffzi&DZ+5A&YLpSyCFEMDWwmEPHon1VMX9Gf7jILxRhZ06;)FuZ`Y(! z$sbzo_>5$ohZZZOpds|4xER-CfvMP=Q`vP?Q0id*gVL9&W14V{fi8i>5o`ZGl9UR#ztPr;u8``&RfVYsTfUGnC{dzT3`nPn zVEv^8{1Yh}Yrt^Z4?(F_KT!=p+TQ2s*}TbEqLA9!f2xnz+kh_-jAPOlT8nRl8+Z5T;&7m?rOFe>KKv5Q>JQ#JTHvkdS$EW8U+0n%iUSDSiI8Xjq810Q6&Pc7J{enhR7W20@u*^X31P z1HpuPh=)$e1w~*uvReqkq6+yW-35YUaz9*fH8)5bjNeL@Az+r1??IP8t| zXQb4^$7P+%TSjjeXT2h4ZlIbPD#qmwvpdweibIDD<2CF~7oDML{pPwuw+#UEb{f(Q z31F_SLsP=D1W{}LkBAqnP4;guq=(MdcQD;cC{A-2b%0xCGTt0AMmgLMM|g8_p70_$ z`j^)9o1YH+RR+W|nQiMyEi;$N^lz*TATqdw1wDk6i3dUQ{R-wetizC~C{brebn4Up zvr?(N>%oL?L{QHclrXgW{3+hN83862uFg9gipJuguv|zQ2?j!>FdmB$nNEp&2q3sb z1t+Gslb=?SmY8F9`G3T+aX6yGcQu>5xqL!^;eLM~6krVrCNSQG8ZqC%>6B#{3fJ>Y zEf+-FuW*Ve!!4$G02wagqwnT2$E=L2Jujnyb)I62A2#jOW-x~DS==FL$EHJvPz%}b%SFYCCqH*U$TQXlGYrZCe7?Kf*3XSyvRK0U>Q;62Ki$>Uzm2o^KIg2p0_&%KJx#Dy9OeRN zs@7R@XY=4I+&^)Dm!5EG+d#uGIzK7XeLJkL<8$FV{$3qlGH<}qPdD$fX-+N}0zi zSSyzR0NPYZtt^iIVXrQ~uD|_e_yrI&L__`!k_8}U>PK$=0EB?7f$|DmgbhR$YXeoH zdWbKStA2PLk$c++XW2MexlLLYRhJ?TBa@1w!gp>GR^Qs+MUmz;sCq$Hud{xH2P4Qq z`^`2QPi1^I$_Pc9jMsgMNDg7P%sJh~MSM9@f`F4x?lsN`D{gs$sl)Qq&x`oJbu+Q5 zLcK2nAgaIVTd=Ot0&2EZl`Ml0@#Ow`o%B(Kep-A7aXA9ELpl6`+sX3_gu zJHDmYnw`Is9M>cCrCWv0zW?#u7-5oZ)%|VeVEB0Dk&L}s+*Q7LV^=r8!_A*?X2?0^ z!~DxMMz|4gXwD7?9f(xv<-G_bNz9i&VQtA%nZwSY64gNG`>XD8poCC4acN@=86E>Y zZqU|hK2_M^J%S~R)pp0?pY^@NPN+^67~$a7!2mxR#RpGPeVvugF1Qn1W=Hw02V(+u znl$y!vFWdY%#kdWv-7DrP*5Gh9O7&cxO1j%nj zLv>Wt$e<#_iqY7c%&v|Iw{$%gS9;`I7zSE$YJYBsg7LgvKJn-PpBkRdGb1-Mh4he3 zkiES7@VtAb{@Nmm`(c-pxQ;!4{7VF;;n4;+k_H{&#U6!*nF-9BP^`rB$25_uF@s17 zfDa1xJcg$DpH_1;e%hCER@xjxo#rNJLM!s}YjtrhgPgl_qzFfD`RkE{V#r&)k*_M_ z7$Fm}J}XV4ehC0-109+tO}KKGBtS5gO&l~G7+?=%M1F4`GQb3$BAj!WIo1{B+XGeK zLz1y~B5TZgW4k$*YvzqW95B#b!SsZbKGjHPrAi=(J|NdE!mpy&;^VU<50WfO6 z2Q~b16`39AT}Jae>b!co+ba@)fGd1`rZ-J>TN!_5*KiFGQ+ELHt}+`h z0D$W!lvT=F!n7j}+JK0NI4JG^J$eaA$roF$RcA9Ta2d?YjrU*&siH1s$m6vU7e3GL zf=u+(yOwxkkZ*d#C7uu%@yD5o5sCm%(vb*09420GwL8;>WAnHZ6=F& zEhd15OsIr-3Dw6fiD^pHWZ@X*^}jO5Ttv1YXGezt)NHBuBS>K%zEO&7eE@Vtq$O}; zmj}?ZVC~!?IGe-LW>l&KK+Z)CH&`J;1-d^ulUs3fy69BsW>g=LFAz^KE8#x2Zl0*L z&i!!{6^g9w<7gkqge_{=o}H)&i)|-XMNN2<0OT+r0a#=x4*XR7JAPH*$@^_)?*m)N z#f%ZNa)dcaMXFVfb;QF6M4RSEZs@5Ug02CFd&kN-KSu0(WwM7vkmzVUR?n+rY* zF1h8^CoI`#r6gt#+=^QDS)5e6qCV+V&aAp=v)fE{e=!5Khnu1UikzW$Q$jqgQ@sT+Nfx9EuEeBV-Ad! zVHgM@08ZanaM%DXubtM{f--AZaf9+wELJf&b;e%%+tsSsiXsh6l+yaY_5=Znf{OOy ztXgdHSKCzoZs5pfMhNoyG-OI0Ez;=;y4qd^CkjXt#5e-Pq7UuZw|WN-jd-0X+C@e?>Ue|{Rs`qfkx0jIs3 zQyckRPw^f|1^mN}{-2)$o<(ougeIHgCViD|K@r#{kqfK@ma8ZiBt%Jv`0^8cJ8e~I=*GTCv94VTL#J1tccpbBAs>fd=cnqvk(T|eVfZh;vN5P49 zj}S7EALS`DZxd<3GzWp6oR@2u^vScPVq<*;=R(M;Uf2NA~Ad)?JDL1X-1fWNQzfj3R>aheB-jh((`URU(Y zXgs@2hwXRc=>=vq*2GWH`@v#%_yy2$YP>iQtLj)5PQF(?v6~o!dDkkRB}BP7y5v`s1gZ(sRPkV0t30 zUTC10?wm*ONm6<*`=h~Ca`{~; z;`7%~tMtklTn0er3!Tg{``KakF2d5wy;3}4naiD005)M0c9-C-YR|xX+fTsAJ#II) zz&fz7I3GYZpwKA4Fp4Lj%dlGj~=C@GBYP@);OY%3^vc)~W&Mz*u>; z@B5D!7Kd{Hfb|N)qX6_7KzNLT-6c$%w%abjVwCY)MZ|<4YizBJM&Rk45PDU2;aq>I zb`Ag(htlD0CFqNlaIj;9&q8N#*p?^B2mpu~9EJ>=xj11F>4VArrUahPr#?dyIwgBH z!Z2MJ0vARygEmzKTm9KU=(EYKA8?TXFOd)w4V!--?5nrbuhZ_Y#+s#(DLb0}OB5X- zn6$KlWD~vnKF4GF?KsR}GO|uaAO#)MTio_7G;q&xUM3hz*~i|6`Zsftd+woivZdC| zgG({@Li{Mz>)Z&3UZB6)UxaqaIO2Z|{XZEBJ6FX=OricZZ6DG<0tJ0FSvg)DehV`D z4c<}cT@wE19Sr(@?(iwRA>J?i`OCEu z1^IC?H6~kyJW+!{{@Zgb>{Tr07Juy9f-kC^WdZ<9hb5r`3cAnM+=q;~xexnYfTcP5 zQklPT=na85k^qIxTX!%lqMlvvs?%`{y8oU+(|XgY3=su?&IX7UMV70Kmn1d==1BYldty=MZ`#Gd9;EeZo^j{S-Bg z;S-$`uT9?qA!8U>9pP-FYDM=2nH9EWArWTZ^d3@3Rk;FEW!+??8~z5VA2tI;<8lqc zSDM94f)RzR?;r5Tmm2Gp#fqLn5t@=agF^*s zz#n2KT1#xRe#ZS;;BocLS!JZSB%vwg^<;@XH{5wLis_UNw40)_Gj!JlT>6#dDk$4lPc zvT9iI77;Dh#N7DT1oLd)#u1sdqb7Ht%^xTI!J4nW2{_}aDtDX7{`l1`Ty-iMz`+;F zXG2!vYwC((Mh zd|*vk7+UtVaKj2|H;?LWKgcjtnWj&viIW+y##t9eV`$e$d4ygoT7%7w4AQ$rFD7&J zP-URlus(k!?uYo)4}ZJ4`YR7#L?Hqv4<{kQyf_S>(^1la@8qav`SgA7ZSj-V4h}6V z;mJV-()Z1DBw?-b@OiE}b;KfyREgkFX5T)EthVcz)JeXCoz1w^_M^8cGk{&c-#1zg zn{C&5-{F42j`%>Ecb15)#8p7{hb*9x2065|W#pE=fwUAA%Bf@}MM_B)DLoEPB8xZ9 zqNbYpZ8e|6ntv1HWXMGB9u@mkbf1fU&s`9P4A=2u$c3L_V(NW*lc5vi)tLsB|=l9q~3nEs1os5C{>}ab1N`IW|hCZXxfluxyyoVV)V>Uf5K~j_Jx>^ z&}`tSEPzD(SmGx|JBqaO$Y9u&tWO$OnfElaz^}1PW~S|O1dmzy7D7r$HItu+Kflo6_So!JQB z7fYH}ZqZBW$f2ns{m9d`c1JlYz3s0@!Pm2E;wpMhhIcxQW+EcHEMjyZ9lm zOLy{+6bIvtbkb}&M4S-a=qJ(=VYg;6t%V=S2J&ypO^WO0^ z%uGRjomPD&e-bXFwOBgjn}<2+LMi7}BD!Sum_3=sKz$ zpb_ewm5P_@3^MmSjMbKwKKvgQaE90p=ZYd2CML!DaIwIX2ZE%gF2Kv6*l53vvH-#) zt3GPyWHILC!GLyOU99#1Qqvp}q?tOEY@4cgavjPp{{edsZN1rN%K2h7GvsA#NASyL zgUG_oAor)XW-@nRn-SkQGez<3e#!og<@4Pa82iiGIePjxx(r)f!=*m?-$>D(093W} z-z?Vjk6GZUoCjB4KFOaezT^8umzkhOl{|tLxZM6Y3gq_Ef&S2&#xq}_U7lAkYea#= zx3ZCql1``P_ogWsqK7Jt9;NQI?!g~+(T>a_TJ!`IfYK~P0CM1Yd25E5Ie&~X1WoRy z@p}GIt}w>Nu{XS;4H}_5aN?G?ABJ|rn>IAJJph2N)aC>*|G7uj#JZA*auiDy{_K?N z5XquZ2({_by*ZD3L{cg@TQlr!I(q&`(K#~i@MV4_7 z+$yNRTxBUh8^g02*y5Fw!Tz-A%d&jAPPpu^lkn^Q-`@hnn8dSH6(&WP3fLbBM*|=K z=PyHi^>INF8M&)gi#a@`#l{cFa>D}OmBS+$0g}Bl_e7BOzHcZFhip^%`UP2$T~kRp zCV_GIuhbt;!7jI01-?UpICd}hFKw4Y=(`t40tg9%J>$>%j&;6KKI%f1RMy9XN=x~v zzNe-83)u4t^Ia(gOJg8F4pBadyP;qS(HXwE-Oi?>8rm^6Jcf?7JP~-pjLuO@8?$0@ z6CFu_d8S~sNC(EGzXTenHy6QIXhQy&DT&Xp%maUXvE)ODSs*^!!RkY8|G!6~kbnOB z-T0^)0r5Zc$Nw}WlqF4H&=soXn6Io)tL~aS#D_BFOABv+oR%+pqb?Y4pyZ zSLaXVZh@PBN_%Jyq3@f_##J;4R5SiJ`Sv zW;lV;inS>NVQ^*DR$&KX#e(a0kfoI4f|-LQWL7oo_CQ$x!W62t3iN)ywpLdrZ46OTJO=;ayy1dqZ%p}Vo?I_C_w2DIPCH2Za z<&UX|p?Z)puRj1sVSZIfXDg>Iq^NV(p(QeXCjk_)vCcy^(9Q}e^!3+hP65~J3iqsk zQI=rMfc7U0rKtPtMlllU!z(EA;l9*os?7dlFVdyOE<*soH2SERfMYOGJfrD~G+z+t zGL8Rm-W>}c9~PNQNoDdDevTeOP#jp=ws6uG=@}f_J|Ge;QJ>#1>uMtYM`5PyG9jq9 z%g=5gf2|zt79)Lvlk!E^I?+;Qjsr0-8qQ*p_)ggYO!^$V_>QRWpmhp3`HnS1RlSFf zbsPcPhF^D;!FvJtAcabX{+Lt2@@q&N>u{04%z5BfpEKb;==i4+wKHhWUn3tW-7Qsj z<*mn4YS?*!IPPi6cQ@6!EzKOM2+$jtnLP21mtQOauOZxE!!W=w`7k(6hk31O{1;|I zcBWv_PqF03zV8vz&xT0>sjdf0hDCmPz$nYcby};zw@5*-ZpZ*#{dV!$7;=^=e_BOu z)0hBf_VvYnedZn6TcSy`8WLjUKYJLrDCRxqDB4E!n2Yr!u=MLzTw%(xw4d2=joB4^#cKK2(z4 z3$e;Ur16wpq*^cEqOC830@9yOA-wR9mZ>W{hGonH+aUA^DK`_OZd5NLtV+-IVI8~k z{Pwea-Abn-HHpI>nOD%u$Hs6akE6njVJk4OWwb|M^(vIP4| znU!st2=9Y`Fa8tyXiDxYT+h+b0smb$uz|;EqF98ngG-5swzG)3OWCa>-RW8kPE!PS zymqq+8kPA5aqdJd7iH(ZQP;iZPCWUOy%#!upRasm<|8wl8?RPO%3ub?_6QMOE_~|l zG*AC|l>SIg@tdxBw#7ayJbfLYn@GZeF0)c_tXNcuPUo$yKXrSsdVUauk1g*Dm7_;L zm4-=i+C6mkW!=A7B;_^|E#nxn;xuUX9yH z2uCe;H$B?jLp1vH7$5;`-M8YNAZVM<&~ye=9H|X&9Tf(_{s&r;_<9m3b>z6B1BE9t zvenzS*(CjkeKGm?-+E{tujqGwnr~MjLW#=nz*4(HK24q>5o-`45K^GuDZwXcp_n@$ z&>(_n6#r1vTM3Qv4v&)F3K`@8EezB?%v_5lVwZ689E83nF;DR%|?z;hr zf`1emool5TQ1Q(yX0p#QFEJlk)=fB4jTG_>Zr7t`JG!3FE437lrvOkdyiH=T;$IuxEnKgq_+Vn#*h}QQHX5pS?@@+|s`c%C`>6$W$=9Qft?-Y-*Nv^i`$#T~`$?rp8IG~H2F~Jwuw1|k} zP8+>Y016Sqp!fe1njnLA%@ejUcy;YR*a0o>=@zrVECbLJlnL{Nm1i&cnhJ9l$Ts{T zCxp?Cge%sa)PeER9kDjiq@`@ zAxiF1QBLGy_h)-up6#qmD#$iPQQcXkV11?a*^VbKNW|xve;G(F>*P2u0237bUbxM% zg;lp%q}{@w(@IuZOi|3vpak#d4|BZgDV&2Cri?-Gk7453)O%$sNfLE&A%p4q3K`qI z1*{?jqzD|t_|;shTbH@~nNt*w!!r{r%C~Xx5>5@l9Sps$p`)h!q68x7L%I+ z71B8G_+(j=F?VZsqLCA@^6QNVW2f=FHyhy$JJ|NA+XFl=YqNMuSUJZMY~&}1R1g5r zSr`d#>^YTy!MYUig5Q@>ZZmwa&i$y9Yz>gqHj9dCrAXq8W+F-8qF$%|(mwat02aK$ z{T}<$g0kO12?LgntX1H3y$>~~2Vt^-!mqyx<()=HYC?r=OKA^iSR=*o=nBQe17h2p zhU;Nf_a8fM=Y0-`nWw^-4n&A&7VCW*TaMfpu_G_s-qnXry{`B!FqhTW7!9Pi9v4Q9 zD5x!!w#K``mM`b69x3*G#&ELluOD2Xe0#I7M^Xc_;kbWyc5}ILHmJ3cPccKDw*mja zDJ?#TPI+!)8JXl9hl{%lIJa(406=bV(q$9@76AZAiz(*mIaXPczb;4(+ty!3WPK}S zvU$=>Nd^rTg-&>1BDa*YezE$8B<7=S=!w`YOM3nZZ7j8yScztduyHg&`mM*L;StJ7 z;Wn`q*=9XR>4hL~Z6D-Ofjv6YvxB&6kF5y<_^Leu=e&6<7jU*b^q|r&ra3l!MxaW( z+f&fDS6QcvYe-WWv+SFFK!2${L59B!kZ$M56a(Ur24($7D5Y=%}V#9--b?pQonrQ!lI$NI8*`cbK z${ZY4u~?f2t*oP3xNoSBU3-mlSzet^YkU<9C!7TNhzJ*YEoP8}n{7EE%E^XMl-pa( zey08lO~<7{fx~l}U_a;_Cp*(WDb+}ih-Oj66}oy>vTEoW^ifpXPik_dK@*qqy99$z z;C0hD3L5N3A?!gLRxPIi^y2i7MOx@@BJn>k0tjrUxkx!ITtFY>NKt=*wjIxx;FU{K zkN6t1vMWKlwyaFHPVrG#tVg_`V_K{#csH{Dz{#uPs|LgYuLnKf_=hVcDD78&eqJvoYcA6Regm85QC zS`6$&f?6m{GjzrB+%W5Jekw@yCEdo$7M+RHt_;XMIpTT=&lb881!3br267xOItL#R zyijAdbr_Ku(G_BJ7X#)3#Dd;{fL;qjAHoBD`2JGyh6H>*vWzX#BoQ<6ejQB)|Kk@I zC&GW$_a>$o-_LF-mL0R^xMzwDV~M=B18WvQ4Uq&^^`(?8L)QSW|21%O4Y2^W69>=d0O!#r~1r=$8{(0m2)) zdSfXxBSJ-{8t&XZAQ_V_OcTf{s!d_dXX)D~cDRAucf!g7zpIQ#O9(D+mBk!2!LA}>6>pM8zflhkoKWfr5T}K{r z=vy_?TuHw<>f<5@Mx=^;Ex}nmZ+1S6gn%9XBt`yu_+8|B?H(>2^z^;KS5nGdgm8>A(ACV7_t0{+H+O zej8?=hrsu#GIQR1S^SGX4mAKkOSKTgM8F;)gz{7US)%o&eBi4DpcX;oluL;bk99e| zMYwqORHMnH@X%#MOY7vUQ6K!2Bbw{V0RVs+P~MOz)%T=IhCkWLF)CV$&Vz>Ux#lE! zz02ID>)CW4)i2|nzQ(41WPJU%wUjdcCCyP8~Et8S^$zNXtDx~Ge${CCs zjBjA@&=EPj1L;C%PS#ZSg=bj5$(C? z*3)wdpU;33rs8NU2uhXrX%{@&v}0v)LA{tF!4n;0dvY!b#iWm3151GbGJ5S@Ui!%q zbK%i#M;5lvmy7Ftk6&Mp-iJQ#2+Q=@GlSRreXKPUB+Fn!{!CkA0%~zX2pHn1v>h=J zP|bB46XXl}XEREr%@$bMU;Htf6q4$wp926uWC&%A^Pxa|1JIxJhd}4s`d;x!G7U8L zuN|7nt@8&Kd=dt23$Rdd=2qR-nhY#Ub zAjE6&bNk$&YyUGndDSbr;`E!VuUgQeEXFe#xAgsF&+ZA&-bGPB^?>$&1T`Th8eT*} zRiJ`bN}ux|+R|)@^^6}j&@boo@}VbcW(HYFz>Hk#|7>$@*0qqH4=Nb%Ip=<84QYPj zOkBpiqLz4|9&ikoF0F{&nwqt@Qoa%u#I&qUcg^LzVTTBB8Qy(Fn8>-D1A+1a+3Vy>7T%iAb*pM#tZE|&= z<uHu(9;m3s?}1a(sD_`%iX>kmy`Fk8+|~Rfq@NOl52AkwMi?x^2S#9PTq~ zXNOwa=zb)&`=nl&4~Fc@X`lV^gS_D$Z~m>b`qvi90t_vpdS=Zyfi1pP!_(B92T`4t zVD!eM0n7i?0hyOhvr68^i84PN$x~oDd}wmA|7_gNBrF+-1%T-k()&`-)vOv5q@k9_ zS8{#VCd^~fKWoI2kc3H8-+R! z+Ez`h**YL2jjR>X>9^1}$5a}yNLVj9ik1C&%i|ewR$V9F+wUYB_bxN*N7OyU8lJty zVK^|@ZD_04^+n3+qi54gNGn*@v`T;ZJSXAH94oKC4!c5I@`4HTir?79aOEN^wx)E7>}kk@zw$C{JK8#%h`i_OPSX9XmBuRWIw+NJ8)9he%M+P&wc?#gMQrbFZFPUJ-9&GxVe9Ce2 z(HT%}UI(HW-qOC338-+QSPF^@%kysivxdxHGi1SsbK#Jmoj~x~;@U#RBKUk1jq~b+ z1nFI&z%IcW=1mg?eJo4Zk#u4?c3mNO&511!6&S$}YP*$jXvlz==3FxV|6Kc@j2kIe zK114eF-h>N^|Z-Ei*~-O8OhC%a+G7kjIQt*has3#4*I$*m~b5$M66cR&M&>^cM%Vp zfW>7RW`_FLUj!D3d{$Ir%cs{V;u)?2fGZZH25(+=WEx?MjbkO{O$gi;5b(vk+=!ed z|G;%|bCuj=-5etVswCl1G_CeM)LS|@NQg69*1dS(vy2IK$J7@)G{7>nRj&Ac?~X=Y zJSBO>kkxt?+YhM2zCX~r;s?KL2YOq=o^*IU%B78j!GTh(I>7lS3O=WRR{A?@khnBs zKSL7u@D{8skenxWkP6(hl~1<;f4UW%C%l7mNVui52BEj|KpSak#MNPL1B#~|fmTnf zMS|ytJ(lf4>K_uQEUD7yy{Hwb!F=owc{0;?m*Xq?>%wMp*GTqYACposU%Y+171P8E z6YJ`svK5)OkxDX_qnK^6PJsCA+nPl5GU2oyT5oWfieyxA+b{E@2H_661N_I7$>FDV zp@cbedNz?>S(rVsArAdnFeGFKdP%>+Y%AF?$yB;sBC*L}T8V|mA{Yx1*B0W)saiVx zZxrDE7wHGIlTCXuA}`$YO?wt6x;VW-%(TB~R|0+cKq|xQc*+%-&%E_+ZQPCofnWr2#*0#D)yef9d zdH`>=?m%}bIugz5vsNtN877654O&Mt@qZAmsb2b0i-%w;?NN_`z-0^T{+%0R|DcM)|duMHoW@=No*CBK?r>5 z3B&-MM`K@LGlA>kv)k%4^Ph}x@3v16I0ax&c~Kub+YmI6%%Eym=h6o)$Rehz#LkKx zQ2PYhR5^k|)tq4e8L%8*@ICpM$+W`4-2#l|SbBA=w4=kAj+^_9L6BNg-MzgIFXQdl zu}C7ppjdWSBl`V6&Op_Nx|-I@ZwxYf^7W%#wEwD2>{Xp@3T3L9*wshATl z(uK}Xu4Jm&XHu9udalmy)rkAeoCGdAyqhe_aJ9pEcK;Do{4y$H`n^(;AS7g4+v!5$ z!&~*6N$^Z4t*I6^E-S8>6z%f(@4!h7?DKvfGyL}p%u8{G$tibOfc1!$5v|6q-+m>r zsr%T=cFGZ$Er1!e_qZ%4HM=}}nN9b-6m=niFYU_O5rzxeX@RK;zF?Q3b#msqn` za8MOHsZGfp``+?)KjSsAiva^1er5zIpnPx_;e6Sg)wjA06B~H=a9pg7OpCMzNiy{- z@Vz{`Ys&W4nP#hAl8k~=iD~Tt(DL?5-pHZ&5JOSCb&sNMFRM+OtoQ&_Bp_~#+94d? zxR8T}K2u^07|H%UD=_ zrYighDR=DJo8c<~lrEByz8hbR!z`!ShohJ_;mE0=b&e$BL>}J=b+Z`($A8J>rpL7p*?YH|BV>4v3rk>`B_)q3pCnHN`T>leMoHl0YiK>+|NiugaByWB( zOue)%@wC;u^0lcnK#QtR)gz)eN>TqwT=+^n;L^?M8m)fIz5P8a0+hdbU2eeEZ+{w| zUia9IpfMClaT>Ej6J-V%cHbrytxXd>{ z_>9Y|v#U^%v!({Z8))G0{DIRC(r!Q~8;-T4{~G{@*1T_tfxfs~sWhUic+!EYI;`VD zD+qu8&4NV7M<(!tvJgo8!rr^MhlSZ|z`-uB&cwb1wCsF!=L3^Ho0*rP`L?{N<_ zVvIiuOISUHE&0rZTfVxohZpNkYx_~JB zoWH|vmPypIu?~r*z-0QFyVr9Xia3>P9*TU{q{a}W46rtRp_zNW`Z<0_kbdy_jVQ6`-x;_rozQ%)G z5{B(JC0D&2N1!1ZrhbF_%n!}Yu!$gk!~fJC5X5M2Pkh+sBxAPH;=g_U0|p* zO2BYg?3sP(A=sSe%gNJ>XUGTQega4T9@WmR16M&z%O%mOrT*xzeBf8lxhW%u9HEoE zO!=t{K^AO7rODmsfBu2f66cDuJbJqc{GgJCjR1E4Bk&@!O=iA6gX2R6q_ZN`p0TmLZ z{kqdlc!%s74dQ(-F$@MSAEob48_B{tyvvijk|AiYZX;F0^=$EVkd~f0vmO)}(!~pG zzlqqKdvHKFPqo2B@K;DZ>6*$`H>yya03UySbWKXkLlZ zNI=UtfJ-L0vJj4?HOgcr(qe+hh190lK)osZyXzAXDnjwS@9#sTpu~|2IL4s1PgxCb zQqFVKZXPv_XPj0r0nTiC(s$jBfXbsh@10t>th6JYf58C3nc^mkW<1>4>~IUbz4))+ z6un>j_}^?z6XVwE$ATb(fz1#=iq(=0fp5=&IacYx$C&wDRy5r^UJt=i^Kn6?se*6l zFd&+Kk=w;kz?qGa-sMUv9(H6bu$C?FUAF{(G0V)R=)G=HbXsX8jS`X=p3*8H-p(r7 zRR_s47=TB&Y<|N{ORsibnE5`l;SW;<%e}&q2YrKwqMX(SAk_9y)gO#6>dK2bWR;$P zn{aH5fcs%Kv9aa&*lGz9G+L3*R1G9BJ2r>hy_e48U4sPXY6(-RdO$=a7ySz?zvf4c z8W;hM3^086w;)#?)N?Y$Ll_*|@75oXsQxSNYd&qrqWVDVWK{sfiBY@6Lk$o5QyXij zsiDJwivuc_2y0&v4};Z-bGSP7MOg_<%XdFI4;L!@y1s%()CRjB{o+ZL@aCB*4Gc&d#SY&bmay|W5}Bx67X?SdavT@lj!@6s>4=hl+>sTI zO4)m&RA5s<_r_k5JNWOZQwgy9#vkkPTTY%wKqOU5naJa>-ll6_wV7@gWamQ>n_>CJ zJ2+;m!VbwSP+M7?8f`r+iCjsZNSWpdTYfS zlfgT>>CBt!!t+-FMIoXJmISlLR_Eq0aimb5=j!?HMa8W90ScNVj7m;n2BAf{eBr=- zF9D3kLA$XL_ty9G$qbWfk6^VHdLh&Owgf``>G!q(!Th!z!SQ`|7a8oiO0pqf${kw= zbg;BH3^+n%j}dpb-JJPm$l{XAEISjBxj)a#gFj_{c5(f7whJXBwg+Ia60Qj&K}~hr z*XcTxN#p?u_$iVeLisdeNVG)XobxRz{WvR^dgCd?nCcU)toS3Y91iyurwsP}ZBBj% zgbP6`*Xsa>U5r}0$HaXwG!?gFcdFt@mEtBnPDQmrN%-67J2O6e?#P}XsRCRfM5vvU z7rYa&?M9aEmVwZlRr7C3={dbyai(nF5|!feANSWhSWAXM?gfs`v0_lC*4c3cM`fp( zQ{)CXV%tf4eugY7(v6}& zySA;bh4{U+v(=bVnTdqdHiGoNiTI-%JL(JtA@SP#?)2P@NK$euevQAGHzm_&-Pa^KmX zd>TrpUw-ivSSVPIj5l0dUYNO174n89t4TEI<-;#Mej3TM*Ukr{3=)0c6d!MsXAC?U zsR>Z+z*i&^*^LVaj;?Q!OM8~CJolkVVah>>Kw$b^otxd;1n&9zonF<<40+nWfdXQs z$*^p(CC5HU|^uvDRYy5NjZ-ewR@#QA7-neewpicBkmz}O0 zXUmAL-{G8(!I+l>N%wMy5I_-4Yd zD9f;%JlqwPhh4_i&$0kjDwM7C(_b0@@KDR^>u5BON?~IbeEpwMYK3qcfh0Zt7bkT465Dm z=zmqP5fk$_gv`b;_=|lKT1|IJ^o`|?^)=hu?`TFo^cyD@s`>-6TCI7B*IpZ0tAmBL zeO0IXpm=B{85&?b{3DKc=)sJ0xeN;{a^?n^<#8&xVKHT&SQt|X!+61{Tu&hLOHr7P zLXwS{u|Jlwg;)*_zK6x@h~;~kkwpE#Ue2z4uG^7AM2W|hTu(5lIVKROr;5GLpJRdi zzn7Oi3eQ4;@Mk$nEjpA(!kwTB3#2$i0owM)-%1{G%c=OAp{+s9p2J%I9N4QqZf$ta z146E2dUg#dWT(-rP6;EhH(^S2}E!{%Uxq00J{_sw*`Lrue2LrZ-B1{#1Z)?6foR z7LWavDXa1Z_15y+)8x-2o3ovd3}Nr!QZE5p$C)`i+~)4JNQukeq1JWPsaM@FCA>k+ z%;-c%(QXl5p6?L;%5L<=lP1#1$hwyJ;JT-`A1L19^^IDwZIZ1mbvKa+Bxo{kJjU59 z&G2f2tma4#NZQKHIgoz%3Fhw4`3eXC=rqKyK2rAcY^aQPaU&80C!cvPZI_-kuW25soX8sXs7Jw0jrK9)qO!j)6c`*I5eXy8IUNeH5fs&* z95W0VP^f2mH5ra*5|%)=b}2q5F11n@G#i8+Y*Aw1PWcCoXW!wQ@yS+L``m0Tk-B!96dT}!|0tG~qY&qZ#LGz6 zYxyux%F(fq%wovAm09J-XqUs^N2lVO{`DBLuijdjxhL{q-;*?E1os?%YKIkBvsK^9? zjnib%k^qs+{ZcHDyUTFP|YK}(3ec9goU65xuyw9QNf>X7al}PrN}1I=x_Zizy0BtQxUsE`ZQHh; zY;4=MZCe}L_Qtlk!Q6a*_r7o4|E8y_W~#gD=|1>8=O{@nW!^guG2g#d1i=p%@TFFQ zroX0yFd6Rzm&AB(qTEcXW5T2h9psoNief&c>yi$p3|4M_sSk6NTLj$g@q_2A5?GG1 z#{EN1#nT;&q<9?O1J{q<-zJRv-IyedM)WTr;uM0qh0UwStWs(b{<)Wz%Oq7>zvgSQ@xh7l__5MedI;6iYKr`~AsGQeM}gWcsI{F9Eq+~U+#_8sWM{FYnec#Netz%k?(xCWz(o& z4+I|aHrNoS{vks@3sO9&8=~DpoSS{nq@$G$`eIyA;Vehtv{R)>v&1HMv91<$)>TS~ zqFG5RUv0d9)I!yfry}|C8Lozu2719?y{7#M4C;*qzoy%T#Bebl)c6Cbq zFr3<<-h;3w;>xc&qS^`cY&f};`$e}p!TAmIpUae~NBJA4MMMZ<>&3FJM^qpetaszJ zz(7!XJKcH^9_49uV3^SAjl~UXLxP{r;~&>WsljBh`(3#&eT+5)fN#{wI}bkzTW0{E z0(z?WJ29B6LIGP|7cs-eqd~o;BRFHiMWXqcwWkmuSWr}Fa&v*!fPhP+(x(6Nw~A3< z7GFJr*(mgsOu$cK#`-wi1*i>7&(9BctT{)X>JQm>~31d2deX}$afC%J#hrM5Q zo!@>p49zfI=7VMU4M8Bbrm?DaMET`KhP*PJez%7UpPlX!G`@9jM|OG?+Zq_Ky$bA; zw3-O!B}?^618o3zSUyAajEQl16z}$Z|GU6kD{<`qQb7E3kn@AKt|ypkA$7$pW{rDmd5{K$?%3jvT`fiYRtT0h zmm<9^kf>NY=G8YPz=`M9p3ygWqua&!M{^tR*KaDU9#0VF1fF>dumm z4I^$~FsT)UO$ewCBw8yIP3j?oO-*qy{0fvNhF(BiV+~Q$8K=Oa#7@j!v9{=gXs(dI z+zbTf1>>>mu8(Ef`Ikp1%)K1e$961965~r zyL^qzcyfatir~Fi7stC+K9!T?1mIoa`kpK;$rORn4Swif6+TZepU(J$V8`$2B0yvd z;j6)$z%bbNeF#q&8nEH5__3C}-neST`gBTKqjj`ju?xw(z?mPU&Y1D+v{ARc0 zTkyQY^Fa?cw$=rcb#0N)yv}JpWVIA*_m0P(hWhxyyD1}-48o*hvtBeYKkCbAd+*I3 z@Xnhz{|tP3OHoe){9MX7ISS0|BX602M0QX&owIcWTxRI7hMbtK)j`ho1nQeh-cBlM+3hKve^2Uvo zJeChi3EhPe1VP6JHS30%*x*T+RprVG(m2>ER!mG4F}F~5!F?;}^Urni!qyBYrY*1L zN2o8?zOcfh#|8b@wS2gaZx5?_>5U8q4Ddbuq=rQXDHXs-UMFQN_oO+`>?FxtRwG@m zE2)->k*v?B6icAraE<$=-&W-f~x5 zy$Teq!GJ~flm}ncmh1Tena*A+(tsSl+dq0BRQKoNNp~KYK=X;yCb4u5y!|@v?+=7@ z6Mvh(p3lq0Uv@!F4m3p);e^N{5Bma90Eb-l(G?3Znxi4+fa8uQHBMi-o z)>&k{iR+(k{HI)QX8q@cHc=%He!rfwK5e)acD_rJU5oC3j1LLB-#oAvkQe*S?Iq9B zL6vao1Jla48FW%zjrT#u551X6r`aO@nYfm~o`sl>LfTq&9N~Q`-r4@NS$WY;;1+%p zW!8JL?E-A|>Xyd&!{~7st~b6Z-kbED?F;qj88>mz4S`Ou&BvKp^d~6d)o?{hMPJ6= zyMU=I;#~0{i+QFY(W!CG0Wab7Jx@m@rXge9hwn}HOtnGzKeOyAv}pU4tzt{Fj6Cn{ zyIb9C?IINlgem)y>wt+ zsUwkNffZ~BWB1HGB(VHWzHW^JnSsnZ5Lovk4u1P)O9H4v41Tzm844jh3}`(f()6V` z&)5l-Vri$894ZUKV5I+i(2g%!*nHo8+=LLfX9F41GcJxoW1^nDONi&1%f^u}MEDE< zY#22RUZg0Y|BdmfVPQdn9tou9?AyzfR&a8tC+8pUdALcF)_<9ezk8bP;BnEY^Gdod zhBbw(GmZo@Z&vl;qqwkTi^_kEe>Xv6loZ%rHtFrDV73CbS05z7r@oA9!38@;$$zv7clBZW>)j5v=gt90CCL&^5g|3^XQ)v#T1lrdEV|taTbebyG zF-1l1oq>pU#eP%|wTl68;U=RpGKaM@!;(7Dc@R#AOSX=_Lt3WQ)+l`~=_sVKm;E@5 zr!!r6P~CQMC^^G%V%NA+1gF)t#?MP-5Kv_ZPJlNa=Z7`%B)%>7p7^WemU zlQwgNiVQ+MqMK);=rAM+wqz%HcLonrvBhn`@|&3vmAUhBo-LCN`TpoB(bv**djv8y zj1oH%mxiib`%DVU-zsXQu+|Hae)_4Pm_`jkCH9@NC8naW!72T;73F2*cgpbGY!~3c z(^GQ;XYgbIm+Lij@UPfEBioFNGM_eH+rg{JF6S^Zm@3Tg+~a>>L>?jitC_!JkxjE9 zp2EE+15H^tM}Ad42tVb$=plVo$M-RQ65t0WG8-e)$vYdNe0}~jFog4CXv>%EIe9&H zMA3Y{d<{RdMsl}NJ2zTNe)@ENP;JV(_5Q$1?(S43Pe#Mjh8dQsjug~@jK+Bz*vXvK zB(ZRM+_=4`1Qltz3ES$Ux*um2f6H{lGT?HV5soLh^dZwAZ@% zN9fdy40?~Tg}me`H06mg>*{wTWs5T<0-*o=@KL75&+f}t79%F|GhphvwXgK6c<@2; zPaX$Os7id@NVOr(Pv&N$ps!LG$e-kT-m6`^fYmw^0hB@y;wd!?rDgOx_OhjAG*y@= zUQ%C6;ZCJ~YXtU6jdM7l@WU7eR-zo+%=0nFXc!LNBki<@#hj~iU8>OT34@tc`6S11 zM@Au}o!+T7OA#pZ7s};X?=1XakbpR<-pIdjYPfb1FBkeULCUu_vrKLMh67?{HP%Y; zQiDZZCvU-sg+X;F-DSz(;oX)#3*udczr_(}59g0gGKMsS`P5D$wr)8NYg6R${iJP@ zB_uB|aIuOUP(a|>8HDHZeYtP=e%#*+|2M5IBh6)Z-k7*)M{n2PapobKq0+8kWuY1@Bw?_x!uh*0~oOFj8dTw1p>^JmT)+P^TWOP9z z!PKLm2nh=)MgARtYnuJI8OS=L2NVV~xj8P2*f;~p1$sm_wi z2_Uv-2EjYtAt+xd9Q_7X=Vc}T(y_Ug6B8IpSHj_cpy+_3DGQcNfcC*~edE<3c{M43dl;RKe8T{rAM zTX;NQatZt&_Ye%MxmfnOuJ^kkGatnNzgGZS6arb8p?!Td6AOGQXpthSb%mA_eDkww z)Q!4i8ub;*;OpG^h00G(vVz~s?DWab1VSfUu$lihfwJf$${h6~vQk*eURI-K%tZe1 zW$PR!+q&@Uo`UO=H&FSu7EDWpjy)8(|c&~$ny?^ zHKd<@tOj&>U$!|aU`KZ~L+~J&1(P^k2XDr-6I!@*dw6hc@| z+h_4sI$q4RpXDbD-P)|K1ZXj2>$|Q0)cT@`Q?)PrPObseY**>7h4*-WBW(o1yr%yl zZ64_-61)n}*neYRM6Ln9Y8rQ7T>GLFej5fZGb8@)rNdEC$TG_SOneIRY)#Xd`+X|e z#)N|9+Wf}4a9Qs5rJWuXlB1lFq<9yeB94beL30kK&p%T7q<+Q`nLr2Q&!>zNplx7r z``A+zd{d-FR}nrHZ~^V&NziOrjzN2P9}={i9YCMM&v?n*P!>3+O0M zj3IQ+IY0%ZCv5Eg?W~<%{Ck%Pb$9LTxlw#?|hAc2gz7W&6&`Y5+2af z`C`xOe+mBP+@vPc(S~S~+bk}*)_xgN&$?w0t+l4Z%R=`K0Tf5>(k`M^O8zwx=-UnR zEF19ctkl$Vv)~Wx1t@4Rk;1108wpo}V@1JrC9lQ?)+npm!w$%qVz$UP%TlD_s^@h~ z^7ZoVo}Rw))XF#zxE8BwV04=E67Q>CyP$VquPw_&l(CAe!qkCc8oLQ1sY`9-$(#Qi z2SbHw{4$I~T*!csaQg_L}jT`LY+8q)DP^7HR;a%k90_C_ie@K51Fwnd`*%E=Gy zxq-}pC)s(}i!b18N-a3(!6mECL&n#)jHpR)E1Dp@E@k8FC@Q+7|=C_gm1F(*V_#G(?9Ex71%gW zS6&G^oO+&T9I+AB&Y2F2cR0d}3sgHm&`Z8mxJ3U9+nN!SBvbBfLZoLzv4&#HQW~F! zxJYr#Z4yac79I@=4ZCgyHIY4<6V(mKZ~8_=Ak~1prEdrCk#8LC6bEd!YqeCa=7rpySam1KhBb~4`yQ3mv7MFY;iNQwA5AUbqhjjf0(N0De zave-ME25g;X7b8M;H%{!8&PuF-XSO{GXkRpV0jA5mmd=f=$qNTs6s^|n{!C7v=K5F z(!cLefKI-u#-lYjUe|#x*fUfn3M2b=f{V}mIEH^rjg;}!Z@{N#tOZMwqs0DuS~_d9 z{1^nQANwC*mMDQPz&I!?(+Y^~R4_29ogB)Wk{ITO2AA!Fyi#<2wUR4ZEOHI>UcyGJg zL47m#I^YR_I4GJ*NJ&}dnGGSprI6m@@jLVNy3se^s_82{R;B@I5tU#v9=+xld;R6- z@KPsbX~|3{KqO|>ZpJXl!xby;vtmB+@X=hG3BCmv4*+*j=Px=xe+A0L-K=}P36PmK zf|F)+W zu5Xne`wuS)nYJG>riK;i7g*E4zrHM59vro_Y5epWNi^^Wg0N#TIt0w_Wz&I!dkyMD znI8JPyRJ_!ZpZ%fU9UO(p8IA)6p%-HvXWiqMmJHFFW#3*o~h2w`rXgjZB~fFK-$<8 z$7;=G?Af#kWV$f`OVnbs(ytm{$bxkQB$Ul?P3%wo^+e*zs3QYFTj`|#D7ooeo|VW~ z5?a=AAuohruL{{^^l4=7HMIA{(u+4wkGTNi-w@_7jImnN;Cv^;-*KBBY-{aw`s966 ze*vZ(KD6;2H%kTRPtXGgrZbT3dceQP!|P9ELHs6=BS*Wcv*@={A|!sh?I@fN9SjSG z7ocBTJ5IiymNZ{I-`d&_jYymfgdC6%_foyW7Y?I89532T&()%ndwp}ux456A_4r2- zwb^cDiq>4cOZWQy@mTPoK)`MI3R?1*JtUAkjfQh4WZp5c{%nzOPh~>KQ*tcOw5W9y znOtH`LSg~@yU&oV^lxb^tC7!$ym@qlCS8lOoR;Jd`ozxq(}+5&UJ0T<;B>iWs`{#F zQT?xFe$rVMSJI9@7k+JDCPfAq7rBker@2%DxaA-@*yO?(TL~QUNNP?k+}Z+|`%ZIE zOs#`+o7a!=9-9helj#RNpJs8mI3XjZ*B(F!MP3w>%I+k%mgQNLRptPGD{23P zIb=g!%7q|(-7<~9-p~kI{f$vaOtKOF;GB{ywldUN@@v~&3?(2tkp&lY=(@ZGnPF?g zs`v)?YY1^R#P{~!$W_9j<#z&LLo@3xT{9>LUK=Y`heAyJCN8#f)3NJE<5hG+EWc<9#em;Fjzz`p$tj!*$E3Qph(?-~E zr^ObTgmwsM7HD|6Ny2i2{Ie(%&ueyTg@WEeH+hPTo?o>aL3u*pYP^j`r{{*Px0q zksf~wc-mDbH0eOPYxDwRKggrqr)oWo9nUD&au&`dlcy%IESnHpWrgSu z!YOhWPdG2nlKgil>PP^=J^s>cwOgQ(A`_|~h!&-8iUGG92-^n?S}9{mY7 zWlqOV+S70`m;}Ln?7nX#3_zolQWv1d(-Qp1x(YImb>L8fB)A;magsj-`5DLTCP5!B zmavbN;2-jx4V$U_(qi~Z^r5b8_k+SrxKZ{1mt#QLY}Bi;ReYQZNcUpf^wwiTek3s; z0$K~Y@oJp9lF2_x;r~d0fZ2n(DB~^NLsYnzbipTMkeCE2^816n^pQiF$HVr4Q7i=7 z|IwgKT#Pc5G7x$jEd%S+_^LM*AINhVbRgdM5aa%YV|oL}x^m6Ae$!RIBBpeFed6C# zKy+Ca{CH5Pav^X_r?EiVx4#Q)i@M-Moad}H_22=4ROJn9O-!@7^5R_ijjR!+*?79M zglv5#+*X4fh8mj=J+AqsgTmt0edU2|(}0E@?3(Cs%EIxkv+UCC!SaBHZX0x|Mx~(? z`Uw>L7Ts%Usp0WQ_WZ}vnKmQWQM%}Gz(1> ztsN5L_&nfZ#YlMhIZ|R%Oc=s_sk>{{CcsW9IZIQaJyoeWiG@X?VQj3rPNjbOR7< zXH!G-c}D{2Tdpgdh+2BJsAC?RuW;Kc&t98 z&3tII;Vh1s^b3pnxjUX;at{H=e7sLTZdT7yOQdY6_w9Z`m`?2tZOM+gFzkj%Y;`Pq1zrOf%>l9C;s=cl&G?!N})~QkGY;_*^(e|si zkLtCdfY9yH(YB=(z|u*8L~dT!Zy$fZ3jvsdc`yHC2;_v2AXZ?}3m9&jL|GD*JV9c? zcmY&5C99wKOn4*<1=utN+z$s*5#M4DVErV$B*CcGnELp}^ygk;6a~t0}%F8RWpcj&jcI=XW%>sU<;d+)d zws4c3qBhVBbwJ5g304p$-7b`j-nJ`4qH(Tlh_(S(Mv;D4(twg#jY7H#Y{>(S9O29# z<6umEi_nzMUOg8Bk{!2R)DLCm(sTr~J+oRahKQTIZ@3^7FxaTbKa7MWmejxNwF;ym z7=B%29phj}0_Liz-1yP|?L*o64P8P%i1a;K9y2i1@XW`SD3rD{T>TAJi2ufq^?+RT zZ^X(F$0@-S>rJ@9j(y_WUmsRLPT#99YjF7Ep5Nn+F>mM6YrOtvB4o%H(HH`cr zLK)CN&gp`@EGxv1=wAj~Kze5wFU3U~e3u4|_4`BYqA;48DZ4vr zb+fg8v6_#p4!aL40Oozf2y_X~J2Asa?VZiPmk}2r7xSBH(6(V+M0_fVmZCX7xj4k1 zo4gs{+Y-z14yprumxWp1u(`D9jw`!HUoUYSQcUGnu^O@6&CEKX%c_<_7N!4AB;0?f zITjor(z1zBv=N?-fdUuP*j*s|W4y&iyV&KUYCiJmCA{^+>6vXZ;_lw0(WvxswT33<+MZJP$3OdeJr)5h+&+hUb{T!OZi=txL^;?78cNFC= zN^C3|0;n-+>8MFyNBZmA4Pv?AqX&w4 zv>2|h*(_W_Ft!t!E?2I1RZq57k}}bG&S!<+lq4-V==l6g*=hY!p5q<}AOf>YG5nt}3qi8O4vGh>{HISdVY?;rxP7$A<>d5|R90#c>ri0pTmtAst)}jzdwm9S8JE11Uw&of|9QkMENkjmw5k+8d3bYksQ)G`g|L&jkU2 zj}Xkn`;QGdW^ZF#Kog#tGEE8o=HeR1Y|?~L5ZI0wsVv-hX2e zl3dXPtFpJ&Ig$hk^Al=Ekawfj>bO{-h0l^qj^;*JVr80dvZS6Jh$OD2`?F4#$GwlB zqJTXPT9eOsllAlCJ!fjh0sYWWr0~k4mpJ&{u%Rq9DpV34`pp09NdD5BgxZRtN#)d= z-nb$9^_QXc;Uae~DjFsP4**!~Nm45GGLghO(@+Xsmd8Qhqdi4nx!FE;3XlJbo+mYe zDT~~b5;v1yRRFjU&f+*5(+9Qi*WW=`ih@a(|6Hl?4=+c;1@yjd&Pat0}CsaxePA< znmJ>T&)X&Q>2C>s-inJ2)bcK3(vK}CAGZB%-7SN!AjH0OI53&V-F#F~;>fNgmzDK} z?~p+xU9oKxc%O<>*Q!rLD|T@saHMXa$jrWJu2@0O8|Rv7VpIF{;QS}$aAG%|jzq(@ zLZnGrjn!~$G6n1sy?qw8EI7;}2~zHQo>mgZq*Jxs>K6meOpDys&t?vdj*xz@?^&aq z$$ZpDf5x!ZXMEPbo9MlG8?|c<#fB|TOX{fK>D5~zu{4RtIP&&0wzA>aomhN(rE2I> zEp0)kA5Gt%--}R+%-R{Y{qW8L4Y;uwJA12XnartQ%V||kw=8gOlPtwe+br`EwO<90 z_JSR+?uqt9YE=|>gmcW1i?5;v%@ZX$s+={|+N)CT7bUGWFQ8K6)huxgMdn zdRIwLS922-u3sE{-G8pp#Z~~qjKJ3?f{r2YtdE5z7g^tbxrLKr_SGHU_Ovv~*FZx8 zN;JW>>}e*i^^uQRc*2BFdb-u?>gYb{lekyGMh{nJ1Ndz$ww0=jg~EVm#9F#(4g{iv zp#NhR^XP6h#TV(!0nyFFKOD^L!-C$7I*ix5?s3kclE}_WleD+)B$*fRR@ilAjpbYD z7IuYREu=U1va=||j9y*9TjcwfRb+rM;LWMvf}-=mUXRXByvnRDzh<NX< zUh9kK9*lpTPw>+4-0PG%Y-M#I%mrERQzpw7(|P#nQV9WJ2tOByLsGWzn0006{45|S z?;7-~pFv*m618pBp7nchYLZN&^f}Oz zK7ZcpG+bcb`>v)53T_jgMLs2UW>!3SK)DF8UbtmAtfO&r`tv3f--s%Ym2rLsXR4pu z1!YrFMO3mCq9oR2>eb`0Z&c2 zTZZ4N_0?~>71UW{{7E-og+w|-J0J7yZ2VjRz+&wucERhHkr%<)TG6kl^HH@zMnE?^6o#_Zr`WI z?5<#;rOXYc1`E{J=PF9M;UqkvEeZUbU0oTwWyQ0CxWSfs!>mVCb}=)9?Jl_}d4ZP% zcJ%#+lhXwrd(#GMy-mH#Ggb}A0?|nwQn(;;;=||3>$7(iif&0mmH&PQ9S!W2Z1sM< zeWO8`nJA4t;X+hH4P~enyxSLs-D}EsY9_fr3l(FoiPObO>js668%;Gwi&yjnO!LBZ ze)v5M$H>CFP0cW2(DS4J;SDR4Di_1;2d z$nMi+{ch{`L?-yfMb-tQ)a4r;KB3VGn$9dA{n(-0AuaQdAKW)-^tf?MF0S;*Cc$8* z#V8gXsZL-Id--7jb@MY(t*rZtLY4CK4_L^$-duYo9Y;3PX7ze)R34gWUh8@u-E%i& zm?jAPw*x0A%U6D>0nYLnyUla!0_ESE*K0QCdO>J}5@OF)VAJPOsutZEQOm^!6`=+#84BT_&z+|1uvVa)`fyY(L5leBeE! zOF6%65P*nbdBT;uAMRC4>NX&22{m(rTw}?(W(E92CoOmxCSc?8NV6ljSH29j(;_Ll z_E?H5?MtX>M8N~Z-NP5#NF?4s3nMk_k%ZUHwYj(^#@<}h7e9Ot%OKi|Z(UC4@v4%6 zpBF!%L5crpCWLD@sD+fUf=y*xCI9LogVDVTp$j)T2s0yOmT4eI8zkl%>{`!PmKY2O zRAWMmHvBjQ%ZUE2wQ|&R>HAqs;aj7Q@*7KRkK!fd$*5pywa90RcU~s6zUw+d@=q7y zX%5mfZscI3$tg8~gfX4KK?qnW@3GuVXyWiES*LSYFIm^E$UVz$*hB1#Z0{Ebl6{n2armn=&^pzE`tK zah6+2Wk-cO#lvmNu|v`K@K>Lmmb$+7FS}S)JFgF$g89F3F_s1wgX(EpW+GmlsK}$?mNEQIRc!+psUB%WY0YX#kIcv@afhf4$UiB=uXyaF=#?zxQ)nhE z4E)Xs5?xr@eOB^K<0A$g<=0d(HB1`D2O*$%NLJ=ng)~G*J(-K{j-@TkrcU;JVXSF8 z<$au2joAmOJm>h{^`NIxBi9#hyf z8#@uKdS1@Mzh2Hwv+GFtM^ewqe0>4ll-S8#8yOqDXnaz zBKK0i!3X*nz_x*}^R!wb-@|3S;~Rdt9SN>egbe#W1={5a_EGrz$Ass1GcTg;L*i$q zmB>N-VV{t)wN|xkiC{8P#cNelMC@G&%?S7X-6ZitEm{3^IlEF(6$m@C7$F^>cCs~l zSw+GKV$Y`A&D|KJS7J^>6Z5wtMK|w^b6cqj49*BMwLwF4soD<{j2L+VdG<(V&$!*toL7Q13xpziY zibS^jD(gBZvpR;qVbD_3borEUXqmhI*?K{2jwKI~X>5HPj=w)L?XWwn!3n%0yaqUE z|LkY;k=w5tVT@m}hDA8+dg5uAnxm#(Py7hcUvW1^gmk4XuCKrg;Jwdk&Fvu zoBED_XLppJVC|?>V2qx!n_Ns?5fF3FbzP+Xz(?*A7qR@s=CKdah)PSQoXaMsd3x%K zL()H6_2ilJRcHSASd2ME*&x78rqgZ2En^XvQM5$2i|XieV>sX9#V>_P0M1&;@d55< zynV&~%?3ef1arCnrw10((d`jLLunbBv>bx!G_GHoO9QC-e=zWP$PuX4BG5vvX-5Ma z-!b~9Dh8|Hn;r*}8*w!eZfb0)=?%8b2+1f{N4ixVKz(E7C!wevz1Q9gZM|)FX7L^bGqk@ zuvc8!-3`8+<^u<|QXQg<7nEFDeq;umT%qy8kcXk3oj7oT349vG3QbT(%RTe>4Gmz< zsHBH~5JnTyhjk}*zX0QyA5zI)vcqq)euG@UjUPFDcg_r>3-d6E;k=e3Gnj|n&T6kd zWy^Qs5;8@-0=iI^kSrowo};c>tbKzmYA4EoCq;^s`i_vV?}-Q4fCJk1$dJR}=sNt> zPgGzgH4A;TQ!$5YyD~$OCTDa}`LF|cf;F7J9<+F(KFwIS`Tg_m}|8^izOn(v-)JOkkjBBwv52a zVPzWH`^k4(d|<4>{cf!G`DT*!okFz?N$P8#ND)we9c6v?T?GZW@o0|%xH5O<1S4(d zE_*Vu%}(^1-D-3Pt4JsTRcpSzFZaz&waxJEn~W>MaQ(pE8AOD12F7oRv=fl4^(~P~ z6q)se2e;`JLISH3(6>I=d4AUH?Bnb{5?i1sH-FrWw?sv+E7EL+a}&+88c9K1ifeV( zpNQAZ(`|-E0GY>Z7JKK^T@%~!s*)L$lNMF}=2bV_4T)Mcy%Uhj%-9q*ldT#QUPU|~ zc&@#QE_Ew_Nqn5p=X|Lz1Q24jW zb|q^JGHJcH*bm*PGuZ+oY|OceNF|0!+F#bTZbZv?A8RZte3SiSGI6Q%&oj4=&_>17 zH{nZ!edHST?2Uban26?TYu6l|+$pCZ^Xr^Ma{0JJ(0VuMI7-X_ESTs?&yeS?3d~~K zFj{*M$1(G124SG$I4s7|Q5L5|v<3)BI4m`&ZwEHe)FB^)5cti(;JIwd$EZI|=i$w2 zQi4CKzT~ScTzvj!8sucQONnlAWCW_TkVcu-m}AB2$2lBYyX(^rz2KD^En}xQu_n2j zlWhzK+D;)v2>3kx*4jfrG9Zo^1#y_GNH&<7gsDuyw0C{aE4c2^_n95NK5xb?Y;1yI=tWl71io_DR%yCUHw>BwbkV;I~T#0044zz6DcR18p$z zDP9T5B2#oMV-RR}EalCz3cbGLTD3ejBr6VSXM{^oJ{cx=xC1`~CACG$X!k~Er8pC$ zdZf0?itbr|8$T33|8hT0*t32*G9*OkJ936yT#z-$OJc{yDSD`ZpD~s6LuTTE;=TET z7L9@nKf^}VJ&LKHx9$*i)M~GV{pv!PRoJrtyy;N@<2_VY$wm8A5-rc4#fRJpme$F> z8uUQKSeT$|#qMHnKT*%sj@L(s`;v*yG9FvL4d>+ArX%I4{?0Q{hzJm=wlBbWLJu|SXmC${i4_-7^MQ33$T9&yEgHcP1#Ogq^Eu=yUhniw?WR0x z4wH={zO&a73%L_6>el_qO3M;!OS9eeQ$21@A6A^Pdr>PAEB;U`n9T^fMvNH8RBb%@ z;oadUo#FBwjAvs-2?Z2Zm!^PJo8u!+wqDL%Yvoqljk=j|F*2iMq9P?^qt@oQI=uO) zE}i`Cx=5CwQnyDZX?kBQ%#_!)8-4J6)iYfI{gsL6#Ujb*};X?cN4eKro|KvmMS=<7iU9foI=FNpey*gUgK(i#WLO3vQ6y` ze#un=FAK?ka%QH08QarwDck4v2!nJ#`d@G`Y@{)kq040;Ln`5pGCdov9GKZ@|De!R zW9{0=&iSraCi7$EFTua;z1`c5TO*UsvU)5NcaXTniHnA{9jkdlg~!cVwqlWw>|7sQ z42)-1Ozrt^q7v){hgZG-$c}&JZ~ci~D)FAU`kz3syAIW!YxMJ%s-dMZH0>48#e;;w z^#h;g2sy@laxFZTfsbSz+FrJCsZWm!RXwF2*JKnT2>#CJmc1Ql0ccb>JfG=g@_wr9 zJZqmSSn_6}8Z`_|F{uI~Oq(EZbSb;9Q^P@1%Mj_B{$9p$z%=2a$im$7r%?t=y>o)4 zf$u#%J6I%!rHZI?9oH9gruYXAQZ04h5|y@q9oTa=!D&y77#ZZ{=UwE{A9Cy%X8R_32zk5yjGRO~DB1&13nj(Ckvk9@H)wT$Hry+_kL+XBi= z^G2grWb;tz6DbT5BxlpoP(f228}qP!!VF{^=O(d^h$3?oPYcsp=&6c;XJwZ8qsOqm zQ_`IhNRgJc{~WU?DOvNfVmg9Tq5Q;yFX#a)qodLnV!;iFg;gRWPFOobfvDivDjNP< zog3sx@^vA}FMzE#f^pQ#KLT5v)%Q^}>>9RLfKcPpDWViZn4w`y;9}j*^YoHhMSlXupwx&)HM$tu}zi*k871> z7^vcWwHiJrNDwBn9+3I$au90jS=sq!3a5xA5w5lt7pB^5TSQ7`c5@lv?<4_Doxhf( zEq(uE58}*9zM;~m%~Gj#yRI~V(;(UJI!1*-GM#lG{0KSNm@4$=gfYv}pGDePa0!43 zW8;+%maT*}*3n*i)HmHduF90N~ zPyyzhO25mlV2B5s`s6-RCglv%wQC?r5e7YxciBt@{FJPx)Mbmcq(De8ATc2XknRsb z_cK`pJblm67CCH}lKNTE1J|T6r~Up2d7lu9l?cMX@f?8_eCQ7F2ylUb0oDKS(gEb3 zKSuD16e8W|xFXU^HRh7_b#(uDQ8847qPJ{xtH(to?b}AX%{VI`{ePEO8sT^6Sdu>o zN=T0Y2uU($ae4T3n`4JfiKUO(N>~}KGMTR$eQi1nV*8O{>5rY+a|&nl^Z)&w*5*V{ z9|#B{LQ5Hh=Aa-2ac~zfYgPv30VU|wf#8+U^I-H#IF`;!{3iTP#r*(EictPtqoTBY zVQyB13wTysD(xXtO!si3hG-tHV0jbBIpHnaH<--o1MC zp>$~*o?oSsPV1%s)5C1{%I^1{37<=w+#nq}BkJd;;^DQI=R;VMf}_=MsOx&t%tCBw zLU&0egn0PX1QHaTC?88tEJ#s`Fklq))A6SWQmo@)E%f>K&HX<~&;Ula|9j*h^uO=Z z{*~lUQ@t{R=KM%Mo3mOlJJ4Z0tQAiYr75Jo1WCdQL=~+c-}NxUbHd7FuY(Hs^P)c88D|VZwZ+w#-Y7`h3%}j_Quj#E1DJ$_p%2a64oU>K^`R0Q0Nj2jen%m_8 zGzl@u3A{kvy)DaxP7;}Dg|@(sgZ?L!5KXBR`gbVcM+c)0G2W6Fg$t5-Iwhui$V+t> z)FC-}eT`?r>R^&tj+4uNG1c|?7I`ITv}AOjqK}i?mSZ)q%FEy~4@9flW^?sNK!GSu z;f+$7=^xXn|L;b@ljWi-sn%fff~mc}euoqOpHOY31R-N0Mkj|DWnD`5^{LUMrJX#!qM+BY@{dL0>9RUb)^1Qe2QIY z-5G3TqGl<2I-d;&F3cn>y>j!Yy>@0M6KR{g*%}2N zPM;4D2&@^HLWO7g8b88nR#!7Q7%8-Pb3#gtq%+zPL#^_BddvVp-tS4rr=iy9|A(h{ z43eaawuY;1yL;N6wr$(CZQHiZY1`JcZQGo-{q}S3{l18*Qzs)T@<(Q#+-L2*)?R$z z*G9GcT`IIx>DT3)x6~jAn*+{j7@Z?|CZERBY*1r!mwRP!49~LJGGtyBMFv)|tOKTr z)Z=D{Cn8Yv!R5lkwY>t-^`j!jdha|LAe&GQV&WqW~@XDWEzz8>c z_~aoVu2dKugx@Z(-_~+(bI3U?q`t88R;48hB5I*~J(^k$Yxjl;h4J5Nn*8xY7C4Z* z5GPf;lO8aDHY;ri0OMH~M*whS68M8{_}0FOmrTS~ zvxvX!Z@ZA!3=Ye$!?vgKu~~f1Lsc>bw!%OBjx=n#4wf-8Pt>j-fxu4!3Kv_%AfQfP zmIO9=kn22AFad=u+;RDmghVpczfS+c*5OKTa^g~IBclTp|3*35baKUyin}A04)yHg z-b~UcfIWfG>!Cy38HBLz_U_jZn7!s>#^{^)7}I&$Sf^BE5J~tr+>p)dr6DHjAO)}-mNEZ z;Nf(AZbGro3=$OGBnTFl$F@;4LF1STg3dJ!m`Bg&(+}gJ(_>JIqC)HV_hhP`azb2= zTfseVUHmP@zNzfIn#u(6|?4(TC&D%5aBG{i1OhYrej z-dr6$jN;{E^K~*H2Lt7dViY$u?2b%sjS;c9PJl8xlzr>RR881t5`r+mwmT@S;D?3= zcmT@H{mCOpX8|2;=^K3zf$jGRlcg2bu3 z8;KbGknJGVGR;6aZ(p>~MM+{PkjpCK)cTjzr26# z`4WKMs0;gjJ`?h(N#gJgQva3L9q1Q!UB))4M%HE5^=+rOd}2*VG`OW}oAP(p?wwd6 zFxt0II(n|JnSL%W`K{OCIgTodeR-}tsZCbYQxhAzIU+^DAT?D7Vv^Ox*DPrC3M1Vp zH{b~L@^5)@r7K5(mYCbE!QcY`~3&_T3VnRo=qln`e&L>lfRZ zv@U^!C~|%SvgJW(YruPEE?zIqR+VVKH9BgAKAF?Xn%le8AN6;4w`*iTU4rsF9m&&4 z<8RXS0ZEJhjF`CPcgvWQ*kf*qh=C_S?SRkrdKzpAvv{FwsG~l8;VnP8 z$WYk`4`fk z7NT8A=hK((Plxg8G5jdyOTqy-g(a8O1`dH;W)EF8G6zPDo>ooAZ_YeGu6=MOX_Hal|(h^&WsyZQBfe_{=3edb$~ zZP%vT^1#s^XXAc^EN5<{F&Am=)R*70KzczV(Sub)fJn`<2h$!)I7`F``UC-v@co)9 zEj?DeDJS|yl4j^4qr?X%TMm@Z52YMX)(7nLVyCoip)~Wv!_}{iJnC^|Ve7ruldQYo zggQtNPuC5bS=ws{=@k|UVwe!TaGYE%3dFqF%mN7$*f9PFqMc-eqX~^d1nkeW$7gS6lKRygjp18}`aAQi zKcO6KV%=2g7|7n4E(2JtY_W&yPPbEzgA45&NY()@Un$>c+nDm z;slt;LTv%Y#zCgp$YW;(8~&YBbZ{QO&%`-e0axpL%k}ugG4T~)s=i}(-x>?wUZ*-3 ze|(oy6UPj5Q8uP#7H|PQEXn(frxvPvGkTSeB<==$e35LRbZ>>tasRN92HOMBqto6+ zBH9>Fo&*Qp$shm;%QsjGN~r@x_-}+XhrYpqW-}`>enM8hngez&|<8CvR+KCtP?)>UbiL!$MZtG(~XY_Tw zy8(3xg|zR9rST;Kx(a<-qlyj{N6b{5fsun@^Wyw{h^+~Kq(3&5nGb#*g zH~T@7BH}k8xBg@e4DU(0E*7loaucSWNGn$qE7V6Kha}jwRO}x)W}T21m=|tsT~sbn=x0 zgIpdbMM|CP`Qr^u;bsG5k#K9Dc3yaJQLHYZL_|pR>B@_Sr#-!pFIkq!O({7eVSsos zYQO&vdI6&T55hQa2Gs&ok4&R`uI2-=_;JWrd*Ur>i@Ab(*!xz(?R+yxSHCrCf zk!>nKH83AOjm*~aLL<52>yE0#o1OWj~pt3SZ2T6q_i#tqm`p9 zwaxcqLZa^Y7+0W6Spe)gBGyiJKsIr9r2m9K$C`k480?#ZGT6gM<}TAzSHI~=ALXZq zG*GKR?w|ju9+LLVKL9;2&mDb|%#zB=?dkP%{UZj+iPZ{~GOot+Hv=FjU{I3Y(jbr` z+1YefY94zK?Ge-p5-V|}EZaN$u9Lc062JTR9(phv%=gBtk`nPSa9w{$)&2fy#_=UE zfM5;N{$Xj}>jxXr=Og?#xkzy4nVDo!X0V(_A=|^WqH_g!TVcJX^hzFYoX)q9ZAJ(U z&C8<7;MKXnOS@qOhD@eYV!ed~4-i_rA7rm}Zf^Af!?r7$M@#Ee`6N#1=ca+o-k> zqKt?&xxuvIp?-EEKfs4O70f`tEu9`21`4ayZb__KU(&aj%(bt&vQ@JUx(uS zAiOB=*iZ}4M66T|Hqy_p$4MqLo3kYfBc<3ATo<=R$&?)4rPyn}+pU4uw}TwWQxXu^ zd|)tWHUJ2A8+N)7Nh|DDS24+R0NAdR+$W!H;y;M};SD9;9p2MTv0$@<2`4np@XU;S zYZ*p595FRoTr?$B(OBTW_-FredROR7ja3j(Kl!l!13isEx&1$&hjvdJP_X4jtS~o- z8cosG{8nddkawD0^kJkO{>C*;Wm!zeQQcd4rSX`lCgPhrgY6a_fgM0UM??sw=J6zT z1pYZ|1B3xt>_Y%rGWygJn2)sST^qfw1Lk@sYQ{Rrz7KRpQee&9;{w6LLK-RQgl(oM zn#UlIo;CtZt1s#Y(HyU zi|4}ef4UP_-*8eVf*IJ)YBOU|ferUF;MlvjHCR6l7Fe#hrVtfHF@tl*L0|}M=-e(_ z+sW3f$7`#2vfpA1^UiLWr%0*b8(Vq0N3fO& zvd@k;!uIrBZx?oJGfw`)&9F9ef35M@^L@U>vW>!qwXEXWjk}JeUEOTo9Ub+$OlCOgtU5UJax?bx2^Y{_^$i}4IrfdwO*uC?jd2c)Mi4E)zPThct-t> zf$e;Uzt|bCny#W8SS+0B8N1ncxk*Qr@${)MEK%&tOeGpxGpHiBQb$=4AM8}N-GJ<3 z`}X(_X5yxslnB#(@d+fDv7lyeDIsrVD-8+}t;$M&*@nJ(`4Wd@7i<@&toTzRJH||MRm|jhc}g-Qnjf$JA_n| zNSZvsEoKfM#F!Bo3MS#LBCaYga5N3eNjduuUJQza9{V$M-P#(JsE8NX;|6!4SKv-@!_{Mp|_ z`vDiOuuk)u1<8ET%Bq@^+IeUII#+{YW2oLOKyeU#1UerDDQ^lmU!j#zN$oHd%WE^s zO=4S#lswvOMyDZ`M$VLTsG9NvOs~&oQKz)h@JSqwO=Z!#@Y)6d;%D~;$eVC!SFAM~ zyo*S;AJ7kbDH_bP8-EH$-bf(v8KWAk&$4hu+5GxxRdZ#?rAK@HnP4$nO_`3)=S9lrU!o`IgpW#b08ocB@jx>fHdA@zW8|D8bp zg!#VhLq^J5bWYj033?}J@(cRY2g>U#^3lNLlVL<7$ zwLxTf7igI`o5eVYylIDugKxitLgjtuc%7sHYP^%HA45g(iA-D-?oP}L4dJn9S{!1X&|dBF1H>gW5h}25sHZOl8a-9DP!J;Og<28^$3F%le!(y7d~K>8O@kb{&S+(FDCKI=2ea28K9{tKG_sHj3g zsQBxoMai=BJJD1LRcg^YmNluD)VVDULGdzgbuY(ZtkPXm6&;_20-_SQTX=&KfbO;B z>u^E;L5p~i70xdTkr?ROS;yGfaoW_mU{;Rv=Ai6=WtW+{Z#GJz+1FH33kgH3H9V#X z0zv5%(|6>o%PTWdKQKg10S7u@_Ki~j)_s!?%l-s|n@7*4sskn`X+R3a-YDJk#5NWZ zt58+pjU2Ombrq=B=63L5(~6VfbmYXIZSzE1O)4(FijP?>>C#abvYVM*mrEEDe>=#W zy*-EC_tX{~vwzH1%%=hqM|aV28}3(~H(qe7<-C-np~co>-&bT+HIjwm1*?!O#QHpZ>Zr6+ToPo$#ZLCM`aO?3VTW>;sXw z?)lvPiJZm%8KM2xL6Ue;bTx3^tV3k$k}@UJpU7Vmo#w@xu4L4A0;ota@b~@hiuEAf zzZeid|J(w>Zb`);CD5K=q^#@spd$V!W0^C!KF_5gF6l5B5f(+{FS=gii(A4Q4!-&{ z78~U>1}3KDw2();d;(hhvAA~ID_s(-RJbD>)fjJJuG_)SOxVE_gS}ijGdqHeq{ zppID_dhrm;nsE_V7Yow=tZXTM!$6Ax*N^H`W22@3A2MKAxycxJTi1y?Btg>r-lvA; zgsqZn+^>spumi*jMjzI$Sz6stbTlTO8%qr9m&S`_}?FT zIQzG4TBbwm$7V^P)tkcgf%ny14?baWcV8){b@5CoDs!ogs`ZOk9UR;>@L0m)XpRI# z(ESe;E?Q2D-D{MH;S&XGelsq3X7%U%5DI*6awR`?A%NNcdXG_V>gQy+Kn*<0dY=2B z{6!S4li`LFFknC+XOv>Oik*J3VjOu(Lxn0W%}-KA-Bu4VV=_yP&sVVc4GRspkT1$rw}ob&#aCs*86J}$w;lo%xr;V#a{v=Bg3Q zv|P<}oue%DBFW}vUW9(Pp6 zWR;v{%|;RyAcBn;SVR&+;Ll)24@kmUv|`=@DmtaY`u>4FMMRrOUqIsIW%Frq!na{h z!PX9uVqDDY`Vm1F8!Dn$^)htn*}Z#mUp(8NHRQuS*@V?;CvapYlq%CLw>q4050Y=` zi^GO`!R?o$S2`C<)lIVBY?Oyb^#*WAqx^DG#z#i*0b2k7?TtxzFyQ+gUk})`f6X47 zG9heVAgDk?E1SkN4j{RQgt)gX><<9o14g%?RPIs#{}Sf^Hv#2AAglgebvjo=4~)n5 z^G^`K3f<2L%ufpd*!1!Pbbn##h#&jC`Xqc$py{eu$jRR;{v&Et2hQG~E22>B>+}7) zk{|x)-j=1RWX3y$q6}=TA7lENXb7fnFbh0Fy;=%S>$jQEdFu0p`OW!#sVldn@!C|! z8OYpKo4$(y587^>`k{mRiY(!q@Jr1d(+pse6(F74#RtssjBjZ5JRz=I(xl^y=p!0-tD-9mG+h#O=GT}>FtBSFK&XB1DxZN9&<)splb85RX1s43 zHjJfYkJSECbS3XpWx?;qL%SZMxSU#bbCIY*LoAPWu3xuhebogf3hGMUrMMaTTYkdBY2H(Xff+(lFBq#BX{=iv_mw^#c;{{fX8isob2&hwe~{z!1z^Kpf` z>|bV8ZsJLfez7-9UI$&4vwg@90GO~>0k8W}!1)6h(Zm`)QC`@6HtFcMR|vco zE6I=iHc!CCy);T2Qcy|%UX*Kr5clK<`)jputEWO!9nSR$!*a5#0E$4lsZsrkj4#!Z z`N5>~eaQd0!qgr7{^tN|q}rt$MsJ6p<+Ckz7K(}5BHL~wPa@%*E7J^;giB8*N;dZ8 z2@D!Ni>GfPQ=VJ{15!XQDlA3}tu7#rn24~fFy~zQ>&LZnB%hl~canlD{t5(g)7E*0 z$g~TR(~If%q$K9vt!?CTLz(9DwR@!TWz3k{vrx8s|UwL}d3m5;a#pdkYA0 zL*1n7@P)Y!U;7mvEOjR1)FpdpU7Wh5TPx>uy=2%+-`x3%x_b}Oz6$a0Z>jj@=@qDKpNK4W2!;KaiMteq6*5_YQxYL*%$@YF{C-U`U9o=oQu6(Uu(O*9=TQuWiPAphJnLVT&v;|^|u@B9{--jBI(LXWf zF_Ag;wpCh`*qTEhx9}J;k80p@J19e)#dxU-4dM`Gz!V^SJQ-uDo8P#BX?NP{)5Wdq zi@^1)NZA^B5`imfA9?!f^O6PX5m9%IvV6l+gwuW5da`OLf=HL<}1#ye!mHkEe&v3$=B9DL9hzAPadyk zVZM?`7=Y_G^_?*8c<8}jOoI5aeSW97GyFr54hudqapn{Sj#Vw_RWrwIcIklf#4LlS zEJ3t0;REWWc*Q=toQTy`oD6?pbFm`*807R9^(SDj(30u0T*9SC>jp$bmH`Cs<0SKU zxXgl1rD3w0(nR)s_rK|m`1acP$La(8p``jru|$#ZP@vl_0})Fr**>Mb{1lnu!=}l7 z)!Ii!lk$3?>4x8l0oZM8$Vb@LB0RIGmyW!o4k-8IUX~$@`0f8KtDjfePafpI-~T?U zKLdz606 zzG#woDlUO|c;R$(a(*rYi6!Ot_xDf12ee%0uS70jul6B1%U+U?n7qkW#oSXw&E=&0 z3b8hV;-u{g>{?F=H^R1HX59Za(5#f){(aFXW8dz=o_ME}O^P{4K2jM_^?e-dBKV7C z8g8%og2Kg8T9WHJm{4A;L|!U4UE;o4j?>TY*lrdv`bJJ1g^F`#-OpB{BQIui0@Gei z2!FVeG#8(QIRQ6teae$N6dbXl?h`3Z3@KdLy>*e42zc16o7j`LMrQYxLpLu99H6@H+OraGM|y6D`f1-dkY!Z4PU?)_txmQ1!myi-Sb1a19@ z&eds!=X~cWN`mEmCe@2TyT&@v{OMt&U+r`FM}Qkl2@gHzJ^axkf5=K}fWJbZv@07N zda|t2UYC$6H~|Z;%q-4-$)B3MlMF#b96AHrSDRJxbcS9?5!m^M^HihkGzuC5G$llg zO-LtyugyPT6;+SxSLDHK&M{T9F}6Utl3}WPKufqDMITF(a$av-k_7V9#KfV~9o6)U z{M<49NuFRzi~#8>kbRlyR!1qtUmrEG?IBhR>6!LX3+$%S)RmIp)#Ir0&Y6uU7DnKc z;NbMtw~+NB{6%tF4K#E9o-fp6YH^i==QMsGtU(XKOm9uRkZjUR3_&N?R9`4d+0)O>U@JsE^ck-#op;h+7RP zQY&zZxiPd@#uxaD?_*)^)`M*iXqjUspgW)8+2>ot!1ibrBIeG*L)mo~bBd7$iHuxat0o_i_!)o#5JMa__4C~-f8x6diVW? z3uBH&v<7DHohydhDMpmx{9*@Pqip*J0bRnlNiKqp7rZQ-3iz{&*w;up(o4D`O&Hm0 zx#8c$_)|B3N-nnt9l;_~c*F>wiVzE2y0)m#f)dbtFcOM+;|7#0EZg9Y4x$8uczRrc zHNh49P{&W=!jgnuL(6X5h$-aj$zU)a@72oZz{h-RvaH$IGTjpYj+1Y!PeZGk`5e7K zd)akXEZ>_ppq9(p=ztJrZnnN0*`mlETAXpeIrv0}m8=KBNlyDUs*kUF#9S_r5ZMp{ zv8a|ZHfe+|pixV;NWmqGs~t6fT_Lq`Yr|`@AwBn`O87&`TbRSA(XZKPL#jw}!6bgR zIYK^hOeqcg@|JS(=SS;T{dSKUGmP&5z7rUNSJ@(^2RaC)ewd@9FBP@~Yu% zU??cXE&$nNQ0p6*LcA$h<|y8jtZs=B6s-^i$|T_4r3}ZTXxvzwhBN$aj&?+rq(GSJ z6P&o(-2g@Tm;GI@Qo-brE2;*4ch$dKXIyL*D^zdQ%pa)~o0ZqwNOL_)ky{+FC=)tJ z4H~>)(2re8uw~bc2^6nJxA7N2^2Mq9$ZM4ty1ACEsaAZm8|&kr_f_%V8@|&k?4~b4 z++{yv#ngx!L)8r_(jq?VUB-e7qaMFCwb&dyhJim&YNN&X8Bf+iUq@JQkK6`XRi|AF zVadBNlqnc-K7ls#?}7FnsG@l_AD8<7yCi|je|B~M8?q2~|C_Nt{x{zIIKAxxz@TO7 z^BT2lII}%IqlqoSBDHiFZV)GujNh>tW8}sJsI719>0n zf1CWEBn~#;El_ddr$&2dKJ~sVC^ObKBElgsVM&D*^(SW&?}Eh3)CHW&R}ld+M9~Z6 z^8?T3rcKFq1K}ZGyH-#&FVXbe6=0$~t2q>-BH2vVe6-tZT{b&FL1i@rYLC=m7Z<%s z!1vbs7#U(lNulrH1u;Z*YMZ|%otCJ8Ma?}18ckp~-t$|U>3zV@&c%0hSNw2P5UdgM z#Kno9L7+5N5@72Y{1Lc5)MPORgG5*3jk=%hitH?emqJ5LTK>#D32wonE#tn-#PRNW z)jl-X+BAE?2rE~f#HRHC6WL!g^P+a&Rp_ztDSB#^56ee1PenE2c9(hup*0MFA+$!< zS{M3`(JR*G64;T6*B9;}#usS*Qq^LF93B_+ap=HlE~cRg%{xVXo7(cPgFPtmLo1?e z@O=@g#ygUhGiL~bCU9L8+V<$Mw8%b66n4dnJ&I|>EmO%RfrG;_Ww-CWa;D8?CmOf? zHGLwx5)WwyjXe*n$a8 zYH`ng^-3xQ{n)s~Z7S_MZuK#d#c?8QfyaU3vFC5&zukOltv@jNb-X2{XyxjVq5Oe1 zZ(s5%A?~?d?H-NqGwtZ`NQ@?>7&z`EWMx)209KLkz^4|38z6pAm?B@F!sX98>!Ps8e}K`;*FZ z@S;N1fVK-JZ|XnTC9#-Q+RzT#$Pmcst7klWQB6&iq>`1v)?_)r6o{8kmO~=|im8tg zoMuvI4F+lt{QCc$dZwNt4m~UBJ@pZHH^{1s;RBqH+Z9+@QsVrG@-a#m~31r3MdnLIsINtZ- zRLQv=_@RYs5uIeh{?Wzk#I4kO;r9jLpHGwm-8Kef1I){N$%L4_v4XPt>}#bd&%HHd={az zqe}RcKS=wWy`Cri)VxYK4UTy%W5pF4BDslo;pd}s8r8Z7PspkEazVnR7;%|62;$!#KehrTO?zqIhv zS0*Cq))X_DyAU*D2hP&8N|8h3i|%HwL@0p3N~ELE%S#$EY}^Eh48q{Qm^#62Y({54xWnUXv5uMotz4bMLbq{tEL(xvn-5x zx=EbDzhq612$9RD++(g*4(&DF#<-Z21=qIP^Un1do$F$|U<$jKz}J{U=Y=kt&lIP6 z1sg>Z&|oD|VDh)&pv7$BbfPa7&?LeRog?J+*`#*EU=9uf+0uv}>v-4yLQY2|d4et1=_eU%e460xK^Ik7pa?UMyW1(O*?I2_JH0)X*6 zuUP8Uy?1LQH@21`46=pTW?Jt48?E{CX+>T<4rAlc+E`iDaQ7EkD$BB2AdV2qZ*V6{jT?C}jeU!e1MP z=_mRa8J>CcCHe&gfSb(5FBijtX2xVuyM>sTlggjxQq3%nobg?dxrAK3#r2-e+2hll z02O<&6#t@01*dmDSCfine^@7I=QWu1ctJJvJbDu#8@waKN9Mc|^rMafN6 zY%f=@6U{07<&DktlX(RJKqj$l<$tL?I`88rPBTzuT~P3A^J1ZztCIBD9LSl{m!gE` z+g^ZXdqeiTTCSJ9Il=4GWDw>S@ zX)(Md@mEsL5#h*B--Pz_U5Ey}j=NSj@@ji0?IIpQW?X2UtJYuX#fFE@1)nqLdO5j> zB#TebmL96Z&Z#M}lcQu~*(Bajx6eoO|2rNfs}5g%w}i#6co$jmAi`m;jw(?UC=x*5 zy(rsHJc2Wil^efxr@K4r1y-v8tQ!*^8D@9JWL2Z=PL*f{vDdM{pl6)h{MvO3Sca}s z4{D+*Jnwd57pIeck!FbQCdxYi=A)5s`NBXJSvXE9Q{ANb{>0fY9_&KgM7;AQ7HN}i z5)Q*Ymp)j=ZTnuyR$+$fW{^ivS+E;bu~S0f0Mg`&3c$*#S;T9^ zG>!p?sf|BT-T9n_awkizePCQn;Mqp|6F-)k4%h4p6vP#c>-)O>&w7wjYH~`g9{Q zR!*`)**$)rgtEJ}cw&AMTVLp~Vl}3@SlO@W4*!mFs2#unNY6W)vvDXygX~Nex9I)5 z)-c?w-(C}q!bbuVX1{7BL0JC{$BLJh)%|_3f|qZ&Ajzij4oMY@R0P#d)#7(jgt6l5 z=Rb7(QiJeL3)ZzMIL?UDptyo;6Le1zS1O4_83%fwbhVH z{0Ln*Trzx{o}IFB?AR0+jh4zjz8NfA13O^%?Q4}*ihg1~OJOr2NG9AL4_b`2Bes>& z7Dpk3KD>N^MW^_FTS+SK7RwNygG+3;7`#&WW$hhj=BZ9x%UpUZ@xjxyj;yD4X8RWx z^r79$f{EBvHlHA=--LF)0qt zy|+w2Cnp7_91~h}9*tNZHW)CeKu(73<;#rI+Wwi$G2?QODz0{^lgZI)>(I4Rk9guk zu6artd{4(~MIMFTaTa4ZduLnp6gHL;7{u~S1L}#y_#6E?lO{}M;YNr`DwyUTe@XBr z^%(6GQmUX(>N)du(BhhaaRIGa#Sz02&?EeM)gx}4b2n~(4!*CeoPlueq-{nF#Z#vN z8ZAG5OcM-CJSA1%xQqvzPN(#bBK8^$>3q@Q2NZ|kA2Un@cMq|_x{k}r2nB(f1&>P3 zQ!o8MOeEL`&dOcSmeR(oedX|p1llP5Qk%W&APT#Gn&1vO%bJGfPZ3}1Hx2R#RZA=1 zX4$7J`SQ3aFNtN_-B8{dC5;bFadQsgC>rGO-StV%i#_qQM-Qw*Yx5QRl%|C1iLgw( zs`$pkT;ttSt{3?12r!xLJ#$1=Xx5y6QMajFDG8&0K(R224;qq_f;LIVUF6MOsFV$3 zyyu1M_EKWn#}FWxzzsBWfu!*W1IFpin@%hRKcn6XeWi+UvZ7f|Sd?X4^IA`H9@h@y z((4gI%FAggf_yCpH!>e@1Ky(+o<-Pm-#z4l43|(rGGA0J_#z&>!wG(x`8g1rE9D^W zaoH8}tz&GXTYy@ZW|R>6LW75>Oc)k$@JTaE9WngJ1)dvKo{S$Ho=_$n#JR_hlbo$Y01jnoNifyc zoto##h3a@^UJW)VJzS@4|MFY8|1@3YbH(BVK`GeFjK%+ZpSrAZ&D#m;naQQcwO#0BW*rfh?dv);>g{{S%kWm>7stQhFeZ zbQSyqe@%6?R^1TFR#8TrgXiM4h^zSI6SEmd^t$DQY`uD+c?TZLO?d!{rIRj0e; zEjG)zmX#nJM_%i&38T40aNJ68ou{eix z;de?yHjOim6^%F$3`31B1_yM`n_!V$`gN)II9i}VuQc}Kl&OIpSk{KhKDSzKd%Jiy;S@gcZ2bsg5@I`<= zKGC^I{E5L>9Gy8ePHo5!+ObPgeXxI>mB6oM3%dyw9@<9~ocjDJ+KJF32N02@W=?p0T^gp&Z|r zchPni05>Tt4IY9?)Z$-AQTonz|NCze zN`lF+yMIyegt{SI`>+hK%o7sTM+E+7zh~MUc{3!>r_e_#YWBpTEV_GprL+J9kmq&)^#?WrB72IZ> zNTU43i2s#YQ8*HrYLO?4aJy0k&a}b`j~?qpv$r`b;h-5dTeI~c_gYvs<1;04V^1gl zui!%q;z4BD7dXcNqy0x2HK_{^I+R}CtSJ?k)fPT1!(Uhf`nyk2_`FYBN~<{6L$19K zNoUHeT}o*#_E9)<)k*x5?U9}eA!kmvv2nK@7vK4ms)dO1^K$m7OQU!$Pq0Gq=*DY@ zDDm<;7N5+M8aTM1zF(sCO10H{6il$q6Ntf9)|e{Jh&q0v_)RR&8`H=|%#@nKBeK-tgBzUZUM7FwKx-$Pj7Aiq4<7@)(HU@uRS|Dv7;P7wCBn#2S# zBc`Af{(g^@uRY)T*XljyQk|o2s{dxD4tK#duvW8_T-3YP{+i8?9xnPRI9PC~D8ZsL z7cv@t+ctF^TPrftdkS+rLeMHKiDqu&ET$vP{RPZGszS9|?tJ{0`R-$f=N~MMnYU;D z?Rc%0^~;_-r@nob^kCa8-P%FOE)TI!9^ z6K1y@{`w5e{jtdKOfDVvg_;1`L}#-XYG_$!jU+>Tw&(?=?+7v^o1J-ZvrUOjBh&(C ze?kHVqRHEwJeYv~jriMJsi3yYXT1-B88lJw!7LvD(`;tk5*~nU_^u(DtV4g?lnRd3 zis*n3fZx4wor8}sljRosV&oTZPj9TWa}z86R;PN6a~`n%M-+!$jx0q%IV<_VkJWq;!OWiL=8KHVbS zm;e`^QBEMj6FzH*zyyY|S?ejIg=Dnnnm768Y>M6*DinpPn)5rZDaQ#DOcI-1f_b+O z>m>*ILyYqBIatSUS1SV{fO;yEvjK7+k3e|4v=}@~p&vjRC8|f#PQQYeZYl6IEEWkt z_I{}AGKWT7()vpTLKO3TJY-jdFlu>HPovRkMkfD4jWNIe*41t<@2o!|XXxf&c_2B) z0Y{5i@_u0>%r(di=+iMwaC#_=dVothH~r0slL= zH~uEz@)m@N9Ao3L!Fp~!-Opj-CDFVzdm~72W##qeV zy4Rmib+NxYO)cAKy}tdKZ|5NuX1V9>ec}JL3!}LklCzsy6bWZs5k54~9^eA1%Co5Z zV?zPy$a)f>|Bw3J`q@2pChofd*Av!>wZZjXzEwl;(57+Z4C1GX@Wdr)$8gg- z8?hqz?dk+Im7$XkGjOh*l5elzfs~*P*d>rlaUaLX=(3TP4=H>FimFD)y*;rXO{JQA z8ljCS7?7+hbYOvrCq*P%^zVHlq+jg?Zw32%t%~5H3Ah)B)4C3P49o-OX!l$0*Xw_j zK3Om06B0h=kKZP`e|l}d1BFYKHtJm=s%$5^MYq;wNwJ`vN*SFjtNI`O2rObZ@Vvib zph%pWxoh0-JBYnYt$LuLMaDB=Bg}VlAPDKnhx_mcd56Ym{lQuA1}BDesf7Kc=)vg1 zIE-EeyTT~cnt#>(i&xJdpV~RmJEy`thp{@WsT`1+4*gwFIhi~j71nvyU zso1wWt6DyCZ#S}$nV>j(c80ScI^Cw4q#%}3iEV%^`yre8r+4V41hyY$`gZU>5S9;c zsFG-CMZ7+tyw)iBYRQbYd+gE))Rp8Y`+=Q1>&mCM;JdU20j$!$xgtP&M`v;>7hIIC za?lK0fKbv48@Bn(P=}E?8ZklyhqWa&)%h!w?VEX5JbnqsLSP>7%HI*a^K@U>*I4wA%TYqx?sdL)TIMcl-&b{4l$2;^IZb5z#s z0rSr&p7$uGxKZ0Bq{h)u0c*a5LS^Y+T4t>7BT@>t9sPXZd3i%z^Nb$M$*ZFx+Vd;L zgt`G?wcYcUL1v*9O-WG#KkQi4Oq6ua6+$hw)`}*bEU^qM`BmSfO{2Q_H#1MPF(6KD z((l@i=AA2E-^h2LY?<{Y4vX0Fi4burW?wZ?`wszrjr08(GL`_V|Hsrj07v!(?ZY#% zH@0nOW81dvjqQzXn;Rz^+qRR9ZQJ?h_rC8}^-WF9tvXZpp3_ISPj^30FP$U#fmsAc zht21#cNwy-CPTy|{6sQW7GP#>%=0Qw?2mxJxl#lvD2VUCH(0z@iLk8l=GqhaKfU~a zwR6DF^3}6s%{lS9)hN%++b&k)ZnJ;UXY4=ikeKAiivi;e4DsuTWLI6&%H*j)PTe#~ zlFP3cKIa%V0=mrGaebAc<=2%&3NJ+kpK=8+6+H8+NdB0{(aFHH{LE@ZBz zAyFXaid-IIdz~DO^}U=)qtXqPT}rDoIxZ4Bi~=i7S@CkwfK@_P zkGKh@!>FnDN1p_buWjE-<9yo+Jr1g6BTm^L5lQ16-f})4khiOAlmds-l$eJ3g!sDb z)FL^IN(pVLWPFp}V8{*ZR6RDJq8AGX1ztPfeAbeR4C=U?-cCr1>(F#Efs_=egKCQZ^^uLniuSUh_L~GPxgzMfH-@n7c zIe5@d)^Jt_ZzqO=aS}7X=SO4Mi>z-DRrC#x;*rm|PY2UR=)@;Yx-KzeKe63U>Grbt z<%PUPLlnEAU3|I{$<8y{1v=Hcv_|n!GWs8s$?j{JuA0JzUjZ#MU&`2|roMqwt;-~Q zT7N?;nJ+!HdXE?x0>Kyr95(-C~ZQP9r&t3eVseLo*ZUiIInjTaca=7 zWZFh)D2#>T?uYCREK~C$Y$>F}3JUx_*F;}Szg7zt@7?=;i20e3N2)HIs>T47*sv_r zmO~M&zBZtp!3{(9^9dvUtR#*-MT)aL;yb0dny(-KuujJ{$Fdu<_ofvpj)3o98Rsk7 z1r$ysg=~?XW4IzX-EprGMwPv%89lSw`z};i6~WMI9`+1C@}e<}a5b9~@D$uA2lmI9 zbhI!gN71|?geVv}az7#^F|P4GJFN4SX{zF9BTNqve+prlE7xKpt*%Q%kfB#xkX1gy z1$3rFy*f1DpyZ9ZyjRd4HvY7Eij@s7+r?yQ$qt^t9GFI%)r}nR(Kp3}BSe``afQVu zuf-LZ<3T)!rR5532(&y%5s<|-)F{AG2+v}GgS`esLW`B`aE^!q4h(nwU*D_JB(*gHR44fR=}F2;bD|H#=iO(-qGO$O^5 zAk(=0-#y5PGv5)C>GIoc9db|YJV!1Rpe^OGV9jyc0N7e(whr$fti~m|R$uB$6Qx7r z!%boN-6FqzGUY-i3!a(F*`_9Uit{}Fl~c)0f_r3%O_a*@|Z>nq7$aCG^Ysm$s)A=^v7}}0n*EHJIC1vgIPhy^NnHP5_Xv3 zK;0j~I!=g%AL>#0X8c>WRFFebIOwe%-Q%UaWc>*6vYf6}JUt-h-1mPX5^U5_aw4*W1xMx$}5Su@8RyU9tY42z#>hlk` zcsY05+UJ2d(7Ixk52MZ+%bJ55+kmmL`NVa%f=vJKUIk{wFKF;dvUUe$BnrxSGih*O zZ@r7UHdvv!D~GQ9*X`e5vV@?)10kwL<3CNrUXKMSZngiF{&&C0cMB1}_e&N40JcnA zVyg7(%SJahwY{(+tOcy--D>L{Lt+C9k!66Zl4cua<9q3bBa>2}D2<&nGeAiEv*vzz zx4gysWq%hhOL(ZjBJ0n*=$Mx1bG;NFgNu3Ara@U=gRH*r*{83j{tJx5kC28s4zZwX z-Z%H=tH2z8BGGY-o7mxc7YYSyUs6nM(Ufe$8%&g;v{ANig$3E}l2x~df30Y2JK0El zUza)P8ZpyK3`uO0P3NWpRt5l=@A*#-V2<-IT4HP>Gi?29Fto=$iECKCE1kvw=l_%b zfBOJ{fA$)gAz4N2)vWESys0|s%jM=Txo_#E-z7}hF3 zPf3QREb#5H7V-xGvjqS^fCd0OBwOA;VD8&e3;@79R7DyhU*x*Q-emu+m)r8MGc7+B zQW6p>Md*67Pb_gh;4xME%S1PifqdE}JQFNP->VVZt=a#SNW{}>Ld)v2cYF3d0{=5W z|MyG!aQ(eP_5lEj|H|9G>;4`nb^!p$cXb5*0O+QyUq&Ki1H5>xT3CUToo{Aq?J8S& z!(W@ivb1*o7%DAkMYWImSkj3*iRh3$fpx;8P!J+`XeQL4eZGXFWEHRp@!|+c4QlPi z^N~BKw01@y{(rE%16f;be}-C|l?U2qBZm6(SxvZ~n8f9352T@WNCnuwRUJ(wp@)96NrF~0;p#T6V3Rb`4{|}We zHC#$RXkwXWLZEB2hW;;r%r}SVE-lB9_NR?dB>YMRR!vj#n-J~zd$}}k_lua}t5!#T z2p9Fzg$*%MhE#2q#e;+Lzfv|kgO=oFA`uWKx*jK%S`BW01t!dw5I!Ex672jM_vPo> zC>szG`A)letEg*@1L$Qq5(IS7YYHtT*k7Hc;d6$4vBA+-rw*Uq z^N7VF)J3MZ>Zo<>m;w^bxZb$r={9&`refP~b~SgLwTd!&kvHn`a+i6(<_oWm6R1p4 zJW3^%VRA#wQ@i`m&yVK2LV9HAs{wZH2X}{$#x>o|1v`i!jFj{hhF$JE&9l|t=ual+ z@BF{t*9pN4VjFb`DxKx|yQHdzJvd3%BoOMg@mExmKj{X^H`JH{KVR_H`A)eA`M6&Z zsy!xVXfibJ2m*dPJh%6fT}z0}@876RjIH&+;5FULmi7opXVARD zuP_mwA;n9czv&bdT?pka4nUz1j`K>Anx;H7S_|c9d;FU zI%(EjjzyDd$CAlug}vX3A!atrNE?w-nnro>4Pzw3`K*P5S)?tB=Z#wvFt}pkwGNHmKq;;J|X?U1Uh*L$^7%@e1G}0Sja0nea{&I-W*d z)BryP-h~qm#^<-$^6+BH6L&lu$`hZ6@UJLGrQRMTiWjW$q0pvR!is2h#!!v4MfS>Q(%Arx*z>L|Kr(=(^A?EJzz|l z{1mOc#lxWhUF|zL+WpsfixP;6`a^(Nh?+370&G%D(XqkWXZ-D{(tR_x_a$o=7A8}x zhWG%?&G(1sQJ3G`O)DOGH9BoMIvYOXV$9Z3jiZ;m&+Qk*OC!_NZWJ+943h(6@ERO7 zo7>%O2SSwR7o-@P6*(a}go%lHE@Unb=TAT0E~!a>0R;d!&<7=YPdEFst9rVQ4a}dz zXsbN;NWCAVqsQZ~_uKbg3?KvM2zs!CW~IA`PS`};3PSpJ{b4V6lOzV4{rStMky~&t z3HzV_e;MS9aAXqt_VP+Cm?`1XMU1E=CRV$c5a3`Y{O_P&nPj~k>v-?70>2RO>0HA z=rfyY0ty~hT2MNl?MokBKauwKZN()N9u(ZAxxwO)Y#9S{UG?J6*27Ni7rCQ>G0KVx zdSf_a)Oa>{xj(T#QoV-P8r-?=Bcj4a5wi>=Iv$-Ged&%ie&B4rUEsFd7ALiiF~BA# zde|*gQgqzmkG-8gsR8I!0qfL%$GHz?@!nl0<`Rfu039v|(=0a+qFx_~Hs`?MCH=iE zmv{53l`s&Fqs%Yc4zQca% z7)XT9>cYdfl%iFPb+%!BjVW%l@xN+ca{wqMs)@_5E9c zKlO4^f;GiB7@8mdx63~Vsg24`ae0(>MIlWYli>gh+H-G6SH^w)>aK=}p%0?#i(W+h zQUVz65ZV>T>?O!iT}4h20oRnH&it`1s=tpdlh+y6aP=Kwmq}|JmWYQsc^rc<1I{%AgI2FrnpCcY)Mi9M;K|jK9-vGH@G) z_3txFUE1#AHx^eI&dCw-LAuL=V{5T}rbU)h^f;4)sV;D?oba~ zVH^<3z(6fIC9EPz;Q}*Hb6NXgk-1LKGOs_9#6Igct;Wv03zeg9zf|)}=ml`unkx+P z#{{&lbnxw)Cie2#Hd5uF2Eqi5vO<2-=Y0u}Ayryq&VeU#q6$I@%pl)nd+(Y7-KOVX zpK5($ue^B7$k5Of98DE@K#`_Uq7no8Ub|D*J}NFghex8R`oY433$dZX?5fZ17{)*L zE^<=)_J?Ww7|SbB0(lAqQcy4*y$PJ}F29;?JuEGNM#}b}*{7dd=J?(EZy(-&VwcB) zgGSPes02EcB!<~Xg%)yK2)@CN|h zl&d}Dzo!H#FegZ43p7H`T*<9E$IXYyf0LOv{npIYQ0D2fv$c~*L&HoG$ngzRrXfKX z*vsoFvccjE1NqA}SzJVwVHeS;DqW#dTI+tAR5Vtx;L&6zY>Cqb^R>M{AlDozxu4{p z%^*vN+q;fsY^D*);cpnB_!rbGX{4{HRU`a6@*vKa$&*PA*uaQ#y2MlKLQ!~;FWxeRabDFxfV!}|}@ z3H2qI5%x`2f%8>n3@it?`$CBPM*!N*QQ~8<1CX{UhOp*nS3V1ow+C$Brg@ zA6erZt0Bu4*4zYgkaFJc6)WR6diI`6Q8oKnM$`7W^t^!g;ZHd$JdY&F%H0HK^eqnI zD&#eI)A8uu^C)IeDYQ{SD5PIN-6sNS!^5WW=FBU&U|j~h0^J;C>(SK<*LK|kqnBmo zQNxLYu4?IFgv;B#+0|?)C4`n;4>ua5Sb_4JRH;ppx_QLYBOBE*A~jf5(vIgsN4x4( z`k%IKD(Y%aE>)x}QTzsb=okrDM{H(zhmgjXyeaLSjE75v{C4D+nI-`Oh<{LPlK37? zqfa(u=*7dQHuAD{u``4KG?r17)f^`@IZOtST|eMs`;YEk-akEhO|w4mZ{9!s_yY>& z`iTGMgTj4$8Z48k;;Gz04t-9{8QlGY4(hFe&=`rX3wfp(iQPljo&|Th?N^ep?>D>=N8ME%Unb*3SwB8>?-L&f0HE18f9sB!|6mD z4Q>&O9AOCrGyDRS+_3)k(&cNV(dxcH>~In-@%!J}-%!i`w-ukhqbMDaqTT-$pKruc zSD_MogV$_z;L|3HXD)8xe;skNweLslurR=Ts4MCurN#q0h5Vo>fl6l}Vp&}%uOZmU z-7qY5pSUYbVrK_V?{-T<)Sx?gs5lhf-fiQkV7PNN)#CN%I3m<(57wS@i=U8vNszC$ zI2yr&FWh#Zb+5&vgyuJZ->tia4Z5N$;pWBF7s?2KQLhk`c@R=J?y?tvA*;BRVk=19 zqeNEafW{LYO8O6gmxNVN9GESXr{l9SUN3QmsX`Jg}()qTK9!RlTl}EtO-^<|p5`$)P&XRh?Yi<|r!+f6Wy-i}~!YS!d z7F`xHh3BA#n;bsdH5|WNvD%l)ie`(QlO91D5&z!c>K zK^`iE-Qv+$9y;#N{%PWXU870Y2czf@sAtKs@Zs0SSgpq%6(;-kb>qPIRjD{k~57jd>Mp@yp+d`c0UgRT%%{hQ}Ip7-cz zAYL}r>PfqIns06wekUX&JhV3z1(Ga~{(71ZvwJ${WTb@x$rXtBhIx_|%=d5|l}FoLph*_=hp2QZ@<7_Z?1V zLT$DpS=9{z9e!iaCx26&nw?`^hVhJkE|q5_g%4wtfZn0jqOgG)m6DrroN&HN(e^i@K#pNlYIVc8M=2T|2=2p%$@p@mPXdUu%-#_FO ztu?{#`A}4=6nqmXmE6Cpa>==k?6!Nv>}M`O?mZ1o>N$>H8*yQKcArL$*H(BvwpOt5 z{}38M-+@OBcveJZofBF7cZd6y`deKl&Vp^PJ%-BK4Dl20TsVa2=d_YUv%-pCw{<%b z=3M!tDFu73cS1vy2A9d*cz(AXFSgCmEa8ve^;HgA@Qg87!}XSqAjf?~WGk4jOnM-7 z*;6nW<Nx#3Ak{Ve;Z?JODCAj{{cPGl`BpN_n8?( zP6G9JquimeDw zi<}+44t4Mw!S6Bwfc*IyW_=KKsBFZziHo%JFZ=GxI}wdY%+}$JZeabW5iiAv{c(>b zI_OPVNg9b$)R-%sbFH!F!4nvi`~w_v@02uDc-ID7J3? zBYXGKtL-c01aWHAmNo?YS5X@Qx4V~}s8^rqA^dZ;LtDATp@xF_k-BgX$-q$ryc{#n zo;<}VkveVT_j?l*_)W3!ZKdB5_`mK2N_d?8g)yk6hi5W8;1*06`%ZH}{>~Q~2H&Xs zX1n+ns2~4K?(@&`Zc@UECNX&jD%>vdbjQfWH(Vustl+`|U2ZxKh9f+r_rt@ogLo@C z{1->#i|i&C87D4`cJxF)e_~On`Ho4pEeZozSSO5W-FG8+JK~SNJ`Bumswvx1T1f?~ zY~}))aX^d|=x8Cu@rL`)>RsYC)r zjbTZkMA{VFcJw&_03xf3y8S#TtdEo2zdFG(Ud(umFfR^DEAgUpK6X1R)wYVWQkHVX z9t4xoF(EdIYCpt1#wc8^K&k@*{8uO;xEcbcAwRnk}|Dg8a%pROXKz7e2Av< zQ&glmVvKeB|Gg~yrIqTkUnZ*lG>JgI5J^~#XLkGFSqcFsJRkOLlC)a@04WL)-F?hd zg5$DrL5OF+kHI2o%?Hbf34T_G5fc<;YE*n7>fB{xtc7}Mro)d+|6W8a9pg5#c~`rEl(51+hHVl z!bnaWjL4>3p|iD*PZkpHoI8&GK}zFZv}8>Fppo6N_nq?JvQExpw^hvSN}@xJIzS6I z^a5S{_}RsGebi65)jLXlG_P%?v=kasC%rRG0Le48iq;{ytmTMkz^HmEz021#5V7h)b z9`F1qoNgxu#B1LA5=D-DUYP;3l;*y1hyZwC&alWAh~P&3kNZpi|EQ@8a9|*Q_tkM! z+Ec(G2?OH=OiG9!LzaDgq%6(xFR7p0HOZ{$q2N$E8NK)hXb`jT5^YQRD5!%;>&MY4 zgP8k1K({Rqaq(>{)Ic(dS$+-<`pr;>F3GJ9O{SHFJ0>lQ1jv z@5nxUx*zOo*d#hc?Kq0dLPp&U>(h7hZW*9g z-;95*W54+`f^%9+mJM+^_QSVZ9pO^oE)Tx@-A>7u`6h0^;biS16QL#b4m2-lMmb

    Ty0<$xUir4drNBd3P;0cnC-Lk6n^_%WAD8qk?6cn`ZRI4=$pKZZzJI+PT zLt`O|2K}w_jV-y;@SsEZBd?D+B|r&|#I@MBR@3~g+XY`#03qU!I{kLP&^~@dE>!|H z)H=R%KS9h1W=yaaAzC01DL7+-fQf#&^61pi%@}#^g+or=6_ThYc=2v>1wHa2w3I$8 zQ~d4SP`#Ud*>($DA5xonbH5l0V-pVd7hVTHR|Iq5SV(KJ4d!Jg79-A+U_{T0gbuEz zhEc&VVfsOX`If{a(CY79kCv>hq>+V456<{{Lps|p2&pjCP)^qLZ zDw6GttNgyeO-=H$5}&3<#Ao83Rw@gy`zs3Cwo|HS(7cBXq*$pe>ncqauXerb6E*cVF?9CHdre+U7EehoKnI;(`M-mu@vKXd`#4=~j9NWQ&$+|ezTiK~#>e^W$l zQ*3P0ClO|(z+lqYEq zcxH5OG{FlQ%hRQdvP=gHKaJ9<1^UF2|Gmg;RcX0u{rGz7S$;PqCCP?}g-cfyv+OGl zAY{`vZ{GGnEa*23#Dx3ZKASlldN~RldX3?W_1k8bPf-e$QyiT*E?p^EXlf1!&+|(C z$1dp+f~W2#D)GLbEQu@)@BNrCMn2o(crU*A(SvkV+cSX|tCsF2Q*Ab%*T)nW1R?Ak z#eSk9_nr>P!u5|l^9)=bvYUW>5sy(!S$f6Ore{h(S%?X2 zGWAr$C-~~U5Ss2bs08+uzn73bA zL7Hffb1%X}wKhStq!q(64fcliO5e_pvzKFXS*Xy>EgIou)bePLq~V$NKDS9#xjOWt z{KTT3T?j1)V@Q|H{+s2?4RM>Bg+Ov`b=1MAt5EzVISrQ*CE&q|nRc0|BKX-N0*Iom z3T?h!haXM_DN{v!nP!UGsH|U^D*e{=P*S1d$Lv=nqP3-Z`tqe8-J%CCuLEPK^~K91 zp^5$K4|ZP7(M2o|k(lOo?EoY30BR1m3gvsRG_||gYkp< z>=Z@qN+e8V?dmPLc1L3NHLs(}%B6O7isBmWmErggr3Mip0ObNC031z>{@k-6nnC0> z%poTuFPF5d$9}eE;OnhH6jWh5&4ALS;^mF{z8QgUTpo&?+!PEjO#fTqS1tUNzZDdc z;Wofwo{DY6-naTe(Ts=O|FVy$}_WN5)MMA9%>i+XZ{+O-!0&%lEsFcc`Ut-Njf;Ci$D}V&_2XCg>lBFZH9#Ed>^eW*w88TMsD_ zSK6(7YK2atb5rT5d*IYzPX;icoDrsb_bSkUN ztx;Tw{}>_2+uPfu$<_cVUH#{fxGMj3_$l1O=a#%)8=f|aqc99mw8zY;C4Q$D;}M__ zL+9{9vip7ZB;|t1Ht9LEAQTvVnT}{T3Gl|we1Jga$ztJOk-12-VIyvPdb;9YYSdYH zVj34|2EY@Jc|ZL8V7sG;cRCL&=x@RM7c?>MEBTio)nCioCb*J%CIM>9BS8|G@iAQG zx}S+$AaXjdA*R$TD_)aLNU)jW#*3jC@8I-~xA(F=rg%T~dc`KmMY$~Qvkn?JN2LrS_cI%NR9;HMMof3H)h}t<}O4BAf;{ZXD z{(!qsXfx_0i@4jWCL=@d7O$nDP;&T`q_>O+@VM{$cn#SFbW^{uH4MIW#; zrMjXd#*fr-GB*~t?`{hSjgC0En9o$GrFD9hbm~N&1EQvgBy>*RIeILCM0vutRp_Od z08r*=OU+Lqyf4*-uQ8&#n5_?YXzAl7l^ximV&iWe?$i$<9`|jG(D zyO~N&rg#L70~y^2FMdyqcpW*o<W6j)^}d%Eh8`3+;Y&eSnQ%# z+Zg9sP!Z+UC`z!b77d>4mbB~2ACgi4dS=7tXZM_^=Gpips1iq5gg+@xMwIhxI*eVz zJW<954%%)dxV~3+Ule@S-E&(4(%Vt>J7p`^N>+;9Ah@6OC8vI{9tpi?>j)9U{NhI+C2(6 zZ|s;(Iq_v#bs(3kh-z+QgQgMhtcbgzGdkN}5*Ij7$gney`5 zyHXP2_HHFVSk|>av#}=nrEh3{1;G)!M~1M@p}9j%DG|feIdr{D)?7E4?8iu;yXg>r z&fh-x_G|ObEL_ObqIKrY$Xo4o$REZr!W+Z~Xw<=0InuxyF){(zp0V)f{-S z#bUi6;wfv)AkQ+zuDbaiR{8X@msgR^FVyi+J~Ge&XGo+uX%nS`f4$_uC^~1#)E(Cc zLZQndI7OCAKZj!i6TT&-1m;3J%YT7^CSpxDt3kC!5aYCCr?1`ekU3#`{HCVrmo(I* z?i0}L`On2#gael_N|`s7RC+LMG+R}EQj9dVBTFMR4qoS#Bn_`|v{g@6RCrzDvV%CS zz(BQn2;hgv~`-59@`#9b7CZU$4=Tk^j=2L8t2f%7xjeq`)J&i3m znVx=Q=wTAx-+7(udg$V(G-OsXo7(TKcY)FSS${1@w9`JN!BVeotNZ>{6qg5T2TpWx zHVqdwVPVXVH|MN1TgYczAVc5q?)%EP{}plhWqIj`CHDcYbtNoB!h@3s#hk5Gw89n<-(dP0Y zx6b;g%c$p6NK088kuke4KRb8qmD>3(p1<#YLAvU%I|+uyrn-Fb@k4rbEgC0F)kDI<9_Ad!_~w0>Xxv@VNd9 zO;7;l!is!}l&v@?n$m!3;uxnD*0nRxgPCqGo6mf0nuBnHvFZX#TSY7j9(hAMhc6(zQVh9$qs8s( zs&JA%=d9ffoQ@_O0;bDSv4ixixCR7vnTFh^^ihjS^+6U~)cBP-qp|y{4@HWmPQOv) zG=f$R(;zW)l+<^z4@ueM3#C!*l<;PGGq1)m+^F*QX4fz;56ctmF{dW(J0I|x!y}n zCec1pM~hHHx(e}OTJmDcydPmDIeIfXZ!Apk6j$)Rf+TyzdNv+gN!QQhYv&h6@>hQG za(DO~9-QBe0NmOYTf6IDd#ke(s@g~u54ru^v4fQ! z0_lJ$9^}8ziqnnpcM5bnm%gA{ZQLmIRWA8nDCYvKiWj|9sG)c@v1FO{qONk z9#uW>W`hYDxwZUT!oq9=;)k&7McIF<{fB3|ZUtGt`_qp(D*?9Hz!4umCW;H{oRVMp z>YVt066Vz>?Yn8CFUzl|$dQeI(Z4_|H}Fge+*17xbu)au@C|@a_VG(mgMBL`_kI*) z2X-dL2TUF;z5ISiT|*qFYTJlsZxrO)>au{<5dyUBRPp>_=VR+vRcNJVc1v;*|t_gT+ z9PrO_^~!JXsydV8op4cL`T@kdt+L?wFdqL7^EEfnO;!|#kI-7w}mMN&r_#bsp$vKdxCTqAXO>t(*Me5KNDc11w96E=KJi4Xim0(T7{@>yg^Km$!D zfY`K!+XE-6Kq84&&S1WEK|_jGx2oKh{7|Z1=Iz3h^e382qEVL6GVg0FYKLJZIW+)x zQKzf7M=0~3LtXQH^Qk(^*6QGZJ=dS|W=Y*MeKp`ckB^ zV$nSM3kJEJk3;@>YX<_l8{riD@xv426459UbMP z&HD=9C3(I7ZD=(1kECe=NlIeB2H<+H0svI>DCL5}16!=P30-;UD7af(r(W;r(0kIjovT=;IhD#dsh592M8;jvOm=BynWHYF{Loay@8x(BrXjNRXiB+{VlLnK z!azJpq6hM*Jtj+WgB=otq77IXX)XlX?oI*!b}YYW*4>fX4JlseWr->!Lb>h*1~tRG zq6;aCkYUApt{6IIPHmF_T+kR1zwBhF@rw(+Gxu9_C}#Hg2E^(j4^IM7ZaYQ42z>mS z+vd^F+c5~wXpVU-Q&s;T-*Al}0RRSJQt1Vp&>JRp2l?c8M($1%{jmJSb)aKLg2`DK zk^H}cM^g5JQ)Xm(y4~AIX`Su=4B4dC{+4~4?PLu0=Mb=2SR%y>F4-a;iY!}m(Za~> zzvaF;XWOm$w{=m*lO;#C45D!Z`z#V$%_-RJydSrVXz^6IPL&P*3ZHX-errT@z+5_! zFHlb}VzW3W71j)KdNvEh-iJZ`o9uA;STj>gri_QYvIRivL4yiW?tlJ&QW{d^fnNKW zO6Fvuo#Y}erJz=J2hLWMUuZ6lRfg_E-iCiu=?#e)EO$%li{w;ibjLT_K$67sG@*hP zAs-M>hlaeAA);+l;z_g4xQhYQ5%BbyTj@okNgU^es0&R zIo9SV`XWJVKmmnDYp3gDp0}DOdO!K$Ie?*Jv_WI^jr%Q|C*Sad4@$rJ@SelHWej0E zAhPM%`K#0Q?A2F?Ayomq`cfd(wbk*sTmAG4$s_rY9ss~w|gdrFr;sO2fg@ahWM%cH#Jk`H;D5$+Sw>?q3zHF%)1=SSv)P%1L zoPl@q0flCGVOleQB!OEeP5W}l50PVe>^#b4Sox2;?;Oa9yt=I26F-yeocEg@zL^nr zX?M`z%W&(X6({ZFJ58io8m_N?Ur@G68?>f7+hUTO+TzKVEf^^B43W?=D~?^^jBADa zMD>bsiCE&zEEgwk=Y&jG6;~YWMAq?UJ7_)L$iqrf&90H{j`rXvES!JYBWO}jAERBr z5ZF`nt8T{+zg+VO>{PkaO_rB2f3QG^oK21)XwO%DCifR&JNm4`ZA-riC|SmVQriMWp@_qwl{g_ZR>eCy z=_n~;h>)pwCB#nwRQHPe#E=y}E=FOrWD(Mew_709OsheZLiUVw_ihO+QAXJus}T!n z970=#AOC)?j(5#Dg-3~FfFveT#)$Ap^ttHvlcjoZAhaAy984UW_T!Y=6+Uiqm`L_( zT_(mciiVI}C<4dN6>+$X!DN9T1lwm295`1LykZsKbZYcAO9XA8_sHoN66Z5u|EDOq zFD3|52r>uJR4Ka`#g@$e=8@#b&yoL6ZL`ocWcgQ&->XLpv4d_{$Ba2_8n=V)?nT!o zP)*=dAp#4;?%oXYO4v_&q3rJ`nk*GtSM$kv@5XC^5()mOU<*1A-BiVoGfLukvI+;o z1q@?_YP(LjZ zpB#q%#f~;N)Go~MmW-$rCJ6MoeJCslyI=w)!u?8TyN_@5r~CqkTRdyQZOu8O5^k~} zQ~Wl(q8obrrul7|MR5XABsgGOZksvW>L!qnv%({87eD(4Q8#2-J<1&)%>U9zx4jJO z{nn_U4uNh@s&r|m0Ap|90pak}&^=a(s-uB6(#xf!89OdH7_qCaiGv}(I9lnu9wk%rCA@voP7$w4BF zS5hRUOSbt*{qlM%_FJkD%pfswP#mKUUx&Z`lU*!@=tAxZeW{O1@l;AIxlX{6ZDw)x zmqH^+?crxEk^Svixk@5YQrp5F8IX!Y6dx~;Scv4r7u8&5y!Tv(zBFmY?fK-kOIxe6 z;1$<0)-Wk2GNJYCQGKeFYL6J%LAs>kmOV?uir24%1-rp1!wg}JnGXRm4?@M=E&6aW zwy+w(ttkBFG(WEr9D4Fnftb_AaRe5`mmcPfPRkW3z>SkXvwqI}{Ehz@M-d{_oR3Ma z8ZVxN{L_pj8lBU0FGY|NLBGVc_zVoQ=G71W%{NzhaIMBFB1zxJ7z3ZJ30G|+kK7*J z-J}YKziJK+uC{Lv7iX5=n_j!pS=$$r+GSjZ*7q0`-?u|L&-ePn3`GM$bZpAKS`jVH z{|R)rjd&?;u3>vn<`SY^0}CQ>WNeCP_ES-lw2^4^3@>C4WAS%2kSR8YQWXKaN#Ew9aRvtu z8(4-EazVVYK9hbs@9$Jgu9y};)Dn-(qb*0%s}~g}<5{{-!KGz3m_C8(=8gVZOWRyg z1Th5qz(YSN`0Z+W^I#Vun{iU>v72$C zh%B=@**|C@ix0d*la(L(Cci&u=NKMQb@gzoB>m|f+J3qI_j`n3e3A|UzMGlttW*)o zCe{{Y9)e-H3&~^w%=&uVq7D8qn5EEbi7bKnmN5@gXAr(?wEh?C)`wO1uO%n{D!0k-N*Z>DZLR1zj}=${t}|$Qr9ay zrLF{$#Qx^=C+DIjs9#xxLev7cjbb^5m)O=mG9|=!w{eSt?q)|BqsQw>k&}s)ku_vd z_kqgX?d&Tpl@U-`DT6KRt&=zC9{f7&Bm7WoMEZn{LfhhRB9PulcO8DXWU1rjQl0S~#iKOu}@qSoEt6INsI*|)Zw0x_KOnmz|K_ba3oamKeaQSX4H!z7BN-Q)! z>b*ricFm$8d8OcXtRRhqg4!=0a*;D&)@U9~eERu> z7}G~lfmdpmjRD}o*=jy=aZS(^>Pk4jm>KSUZV!oMklzJuk(f{gGEGgE$rm5mW6_ znsxfLRy5)DcM@Mv1bpwEU`7begoEL0NAjr2D_?I%` zuQj_rI>U&oP*C(Labd7@LcZ##-qVXMN-+_6yA(Re4I5;CPd(*tc?PYw_{vA&l5^A86|Lj!v>C^a_HAu(g`aB)|Jmx}>oypP zR!`A_vAMTJUtNiNt0GvL+kM*!!cX*f%Q zeLAVC$=bH6)jN-ePfh6bwtX@YYePy43f4h>;T4Cs ztmePrVKYJ~C{Va33kyev)S<zZv$GXV6K8FtNhpJ zbOTyO(Zpjk?ruq^w2L_rQS28CMF`E&(v1f~ zXQ;~HFH&~I6nEu_mzF{2S3~fp%!2t1{qQbhEH)?|kFV_(JM>9^Z z4VB_tD?N}SXRRL|)e$wBh6#_oTe?9DyKP;zlbk9?|GLzQ7rTx&Km<*^w)Be7}&)VqtzeF|Pz$7>WH-q%qzFeQNlo;o`tz5dWvp_>~=} zB4)Uo||Eq1A7`?A#494amH7?tEYP7)6j zNZM!jH}wGe0ic3*eP0DGWAjBl#FJhYft~f2R-5=8OntRperHAG$`8{Nm{oOCM6BgJz^(3P`eHYFugi4Yv?+zC2#Q3!-kn>? zxW2V4B*M^Np+i&+spBhf-u?7N0uft)B}wO1{53fh{~RfMM2PF$t#cE^b{I6 zowUj_2ac5F=}@8uvWRb@^D=FrsUdNIj4-PYOZ9-)*|d9#+bQ!OuL}qSV@mBkx~dfb zEC|Vb{9+HY@H`;Bl%fMP6J8oFer^=VfDwl=1t`5D{XeSS0yvJIi5A^8GqW8t+c7g^ zj4{WKnVBi3n3yW^hN% zLbV2+J)C)dxkn=>o&@+5WP`(7?B-rS2{I}xYbL{jb%RM|{%~-zo8Gr?s0Bb;E;_wF z5G`!)p@7@U+kSrY0)5>Q0<&zLzJDI^&^L?xNK0=2DZKl{M6gR;Ap;9nt@O{Y$Q77n zFSdCth;#_ou5M`6Z30JJmvO1uS@WJ@kF*?<+??p4^#Z-F{eGKJFf7}3;4p^xAP6jR zpM;OBd&hvbbyUwP96?X@ojCnefg4A07}|F-(;ql*llLIFsBc7b1Dr&!YZrt-t#}Ba zd^8X4H;a-`Jz^l^bpOK#9pNKj_3qRRAJO9?K!TH0kBp03dZcYnyY!-1f{EO!W77ic z=iaQmC)(u31+=vJ4;DE1+6MU*mYEmdR9AgLH)_&Ur)E6nI& zk6RO)QQlPbaKBt^6!%3SP6q7Bcb`R|m3Gk6ELS!}Et9Ey!?Fy4bQsL@_2azP9#V&Y zl824BdHyT1&^~4=e!weNS_*}&f*`0j`Re&w>1b0c2Hec~LmA)0v}U@4(|dRz@NV-( zkot@#9g!km77Ep`QPOjXJyB@H3Ixtr&pYW{IAl3EVJS6)3<(ip5=s8TRuhE;iLt-r zX}V+Q-nB`}aBv@hU6PO+b#<*bW_%6$4l6XnVWWYrigMd(9XYK-`e5vCzA_J9GW? z0j{G@r-i5L<#9&zN%uBY@Bvp3U^VJe?gqK81q!GA`WOE3^TS6b#z&<3iLc>W3aZ#A zieHcsxhg>O$jksJIn&iT?OtXl6+f!IDH`=M)}Ur{MDx?umujizBOB^YPCnKgS2M+; zsCj?bQerOuD>Uw&LxuV%u4=!13QMCDgW$XU`)T9_1CM^^y6#WP4ZQY_n!Ak>vo|P& z!Q0&rr^X&7_F82O(Ap67)WG7MW3l z1j|zV@w)Y{F7vNu`ug<*wGt&hFtGfa7CRR7zJ`4=%~qQdHv|8(t3I<$PTJA%N;nUf zoZjuflE3T_2krVd+o?MyF0D zWi{K>i@~x`ND!NiovtIa%2K@@(Mu}8qPKa$t3?j*tD}Z4A>_n@a6!$OZ9!nyW)`giL{PK}O4(@qFqzw*6k z!j!yIq&L~6bU!lv%-7sl?xDPCLBtMU93xt-waq0XJJ#j`2d!I&`yu^oFgp`_C#iQc zMzayp{$5Gy+zE4RI;JW6F6tcZ-xsgnd0`)sbg&fZ!6v@s)t6FM7xlF*B2XM1{AC`t zblX0Tvw{AaoPtWI(e6dP-s!_Vt%{0Ki`;VIsnt18sU?RL1;mW5jjve-} zNM64WKa9x1 zRYr;oC-XuY9AV{lPaNOm=WfbgdSq89JNNJ?8=^9LPov>A=DS?T`LWT*b8%Qw;tlNW z+9YRJ(jR$9Fp}R@!JSX{5`5Og^OI>(=69|&^~pHPjUAL%^X!Q-ifwl&>uQA!XYm-b z0(o@nuHL@lbKh%Rg@uhm37FOr@tnfv7wB8d77e$kaHA9cN-_vq%r#06gcGza2jl#5 zHr3eItkICu|Jt?UdU!mtA^Y=4+686q579)kgnM2DpW`n2SF4sVj!uP9uP8&D7JmmRc-1k1L(}OD5gaIi^`Tc70Aq+o|lPpK^V)Ny+pb`%C^CoAFS;$aM+Hmkl<4fZw&lMT@H#U_3$K`XW77k8Wqhn zQ-Z%2F$435D!xWUAe_UH*UjBI7|cFkE7E1nl;F0q-c%a5*D1WU~9+7SQO=IfE|9ht6T&?J7D;@0d$Q zL`dE(*W_m9^G(R;FOiHSFDyN{Eb^Xg6B}BV@|X(E`q9hk>W>Ts|cloctKtZWj zLi)v@l|p9nshW-_YWl1x$cXV{Afk~$mP$Wy*99RAwd((ohGcU8E)3tC7iTggU~~0? zPTB-q)A6aZuey|ES)d75@yxh(o}cinSaQV0u_q?{gi<8fkoiN_SPXF^cRcdsnUTuH zAlC&JgYAEk|sl z^|}meomEyA4d~qK7#-s%XCaf<{R+$8)Ay-!Agf6xN}eM2%H5Q0`oTfY3<-sJW+?)egEudp0r zO$7Op>)Q`a!T8Qsj`WT-abJ@@&A_d54%4hmnZ}m171yp;oBHj2e$mwq-k!kKFS$u% zZp^y9dXP>%ytkEu*(3AR_=df@w69kQhTJOge4w)Kk3dMdSF&w3By>|?}(s+1@L%gcVYu#_Ec!Y0WZgtDGq&XPjhyc@O z42julpmc%gv$gW{)5OW1D_ida?Ep-n!at_}fY60s_$S=Yfi^MI*1>GN!{3d2*UZ${I1{5?Drk>2JXAc@7@Rzf7ttpC9#&YkI{GWUbc0Nar}Zx ztl4z`YNmuGBW~$1R!&13bi@aqA(QJzYQNSHyYzg0vq(2AHa=~aaM5}0Zb)PeCIWy& zp4j6lFs3kb^$~&~6~>9?N7W)AiGe{;qpX2|0pARL*FAmIrMu>P+KY$9q>%)qc4u0) zzh_=dxvc&GGmB-XPqdRJmbLC9%u^mb=^8tHZho_&EW`<=-KGT-A2&Syn9JI))b{k4 z_7g=^s`lsq)SbI`c=F70oGDq{H6jMkKfW~$4D!6st*�g#xl^7j+nUCSU6`ea&Jq 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≧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

    &{Y^Q<%qZ`7a8zU{mlp7)JR%B9coV3*YHEL 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%0DD4wq-b9k~DcE-z2So{X~WP-*NuTV?Y*3 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

    oByN^QQ(28h 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 00ba + DB %00100000 ;buttons 0010 else -> 01te (t=start, e=select) + DB %00110000 ;buttons 0011 + DB %01010000 ;buttons 0100 if final result=0 set it to be + DB %00010000 ;buttons 0101 %01000000 (same diff) to avoid + DB %00100000 ;buttons 0110 sending the byte $00 which takes + DB %00110000 ;buttons 0111 two cycles instead of 1 + DB %01100000 ;buttons 1000 + DB %00010000 ;buttons 1001 + DB %00100000 ;buttons 1010 + DB %00110000 ;buttons 1011 + DB %01110000 ;buttons 1100 + DB %00010000 ;buttons 1101 + DB %00100000 ;buttons 1110 + DB %00110000 ;buttons 1111 + +;$180 +decodeControlByteTable:: + DB %00000000 ;coded 0000 + DB %00010000 ;coded 0001 + DB %00100000 ;coded 0010 + DB %00110000 ;coded 0011 + DB %00000000 ;coded 0100 + DB %01000000 ;coded 0101 + DB %10000000 ;coded 0110 + DB %11000000 ;coded 0111 + DB %00000000 ;coded 1000 N/A + DB %00000000 ;coded 1001 N/A + DB %00000000 ;coded 1010 N/A + DB %00000000 ;coded 1011 N/A + DB %00000000 ;coded 1100 N/A + DB %00000000 ;coded 1101 N/A + DB %00000000 ;coded 1110 N/A + DB %00000000 ;coded 1111 N/A + +;$190 + +; -- +; -- Variables +; -- + + SECTION "StartupVars",WRAM0[$CF00] + +Stack: DS $100 +StackTop: diff --git a/Source/USER.ASM b/Source/USER.ASM new file mode 100644 index 0000000..55cb4b5 --- /dev/null +++ b/Source/USER.ASM @@ -0,0 +1,4715 @@ +;class.asm +;gfx.asm +;map.asm +;object.asm +;music.asm +;--------------------------------------------------------------------- +; user.asm +; 12.18.99 by Abe Pralle +;--------------------------------------------------------------------- + +INCLUDE "Source/defs.inc" +INCLUDE "Source/start.inc" +INCLUDE "Source/items.inc" + +MIN_VBLANKS EQU 2 + +INTCLK EQU $83 +EXTCLK EQU $82 + + + + + SECTION "User",ROM0 + +;--------------------------------------------------------------------- +; Subroutine: UserMain +; Description: Sets up game then goes into main loop +;--------------------------------------------------------------------- +UserMain:: + call InitGfx + + ;set up initial location + hero + ;initial level 0009 (demo intro) + ld a,LEVELSTATEBANK + ld [$ff70],a + xor a + ld [curLevelStateIndex],a + + xor a + ldio [mapState],a + ldio [mapState+1],a + + ;initial level index + ld a,((INITIALMAP>>8) & $ff) + ld [curLevelIndex+1],a + ld a,(INITIALMAP & $ff) + ld [curLevelIndex],a + + ld hl,$1102 + call SetJoinMap + call SetRespawnMap + + ld a,[heroesUsed] + or INITTYPE0 + ld [heroesUsed],a + + ;hero 0 initial setup + ld a,(INITHERO0 & $ff) + ld [hero0_class],a + ld a,((INITHERO0>>8)&$ff) + ld [hero0_class+1],a + ld a,(INITLOC0 & $ff) + ld [hero0_enterLevelLocation],a + ld a,((INITLOC0>>8) & $ff) + ld [hero0_enterLevelLocation+1],a + ld a,INITEXIT0 + ld [hero0_enterLevelFacing],a + ld a,INITTYPE0 + ld [hero0_type],a + xor a + ld [hero0_health],a + + ;hero 1 initial setup + ld a,(INITHERO1 & $ff) + ld [hero1_class],a + ld a,((INITHERO1>>8)&$ff) + ld [hero1_class+1],a + ld a,(INITLOC1 & $ff) + ld [hero1_enterLevelLocation],a + ld a,((INITLOC1>>8) & $ff) + ld [hero1_enterLevelLocation+1],a + ld a,INITEXIT1 + ld [hero1_enterLevelFacing],a + ld a,INITTYPE1 + ld [hero1_type],a + xor a + ld [hero1_health],a + + ld a,1 + ld [timeToChangeLevel],a + + jr .loadNextLevel + +.game ld a,[timeToChangeLevel] + or a + jr z,.continue + + ;switch levels + ld b,METHOD_DIE + call IterateAllLists + ld a,15 + call SetupFadeToBlack + call WaitFade + +.loadNextLevel + call LoadNextLevel + call UpdateObjects + call GentleCameraAdjust + call levelCheckRAM + call RedrawMap + ld a,15 + call SetupFadeFromBlack + call WaitFade + ;call LighteningIn + +.continue + call MainLoopUpdateObjects + call GentleCameraAdjust + + call levelCheckRAM +.afterLevelCheck + call RedrawMap + jr .game + +;--------------------------------------------------------------------- +; Routine: SetActiveROM +; Argument: a - desired ROM bank +; Returns: Nothing. +; Alters: af +; Description: Switches to a new ROM bank by writing the new bank +; number to [$2100]. Also saves the bank in +; [curROMBank]. +;--------------------------------------------------------------------- +SetActiveROM:: + ldio [curROMBank],a + ld [$2100],a + ret + +;--------------------------------------------------------------------- +; Routine: LongCall +; Arguments: stack: +; +0: parameter de +; +2: parameter af +; +4: empty (for addr of routine) +; +6: empty (return addr from routine) +; +8: af - old ROM bank +; +10: return addr from LongCall +; a - bank of routine +; de - address of routine +; Returns: Whatever routine normally returns (excluding F). +; Alters: af, hl +; Description: +;--------------------------------------------------------------------- +LongCall:: + ldio [curROMBank],a ;switch to ROM containing routine + ld [$2100],a + + push hl + ld hl,[sp+6] ;point hl to empty spot in stack + ld [hl],e + inc hl + ld [hl],d ;save addr of method + inc hl + ld de,.returnAddress + ld [hl],e ;save return addr of method + inc hl + ld [hl],d + pop hl + pop de + pop af + ret ;call method + +.returnAddress + ld [longCallTempA],a + pop af ;get old ROM bank + ldio [curROMBank],a + ld [$2100],a + ld a,[longCallTempA] + + ret ;return from this routine + +;--------------------------------------------------------------------- +; Routine: LongCallNoArgs +; Arguments: a - RAM bank of routine +; hl - address of routine +; Returns: Nothing. +; Alters: af +; Description: Quick & dirty long call (handles bank swapping) +; for routines that don't require arguments or return +; values. +;--------------------------------------------------------------------- +LongCallNoArgs:: + push bc + + ld b,a + ld a,[curROMBank] + push af ;save old bank + + ld a,b + ld [curROMBank],a ;swap in new bank + ld [$2100],a + + ld bc,.returnAddress + push bc + + jp hl +.returnAddress + + pop af ;retrieve old bank & swap it in + ld [curROMBank],a + ld [$2100],a + + pop bc + ret + +WaitFade:: + call FadeStep + + ;took out distorts synchronization + ;send a null control byte + ;ld a,LNULL + ;call ExchangeByte + ;call HandleRemoteInput + + call CheckSkip + ld a,[specialFX] + and FX_FADE + jr nz,WaitFade + + ;allow last palette to install +.waitInstall + ldio a,[paletteBufferReady] ;wait for vblank + or a + jr nz,.waitInstall + + ret + +;--------------------------------------------------------------------- +; Routine: CheckSpecialFX +; Alters: af +; Description: Performs any special effects upkeep +;--------------------------------------------------------------------- +CheckSpecialFX: + ld a,[specialFX] + and FX_FADE + jr z,.done + + call FadeStep + ret + +.done + ret + +;--------------------------------------------------------------------- +; Subroutine: UpdateObjTimers +; Alters: af +; Description: Updates timers used for object movement +;--------------------------------------------------------------------- +UpdateObjTimers:: + ld a,[objTimerBase] + inc a + ld [objTimerBase],a + + ;put 2 LSB bits in 4:3 + rlca + rlca + rlca + and %00011000 + ld [objTimer60ths],a + + ret + +;--------------------------------------------------------------------- +; Subroutine: UpdateHeroTimers +; Alters: af +; Description: Updates timers used for hero/hero bullet movement +;--------------------------------------------------------------------- +UpdateHeroTimers: + ld a,[heroTimerBase] + inc a + ld [heroTimerBase],a + + ;put 2 LSB bits in 4:3 + rlca + rlca + rlca + and %00011000 + ld [heroTimer60ths],a + + ret + + +;--------------------------------------------------------------------- +; Subroutine: VWait +; Description: Waits until a vertical blank occurs and then returns +;--------------------------------------------------------------------- +VWait:: +.vwait halt ;stop processor until interrupt + nop ;pad to prevent weird stuff after halt + + ;interrupt happened, let's look at our flag + ldio a,[vblankFlag] + or a ;a=a|a; tells us if vblankFlag is 1 or 0 + jr z,.vwait ;not the vblank flag after all + + ;If we're here then a vblank has occurred. Get on with our lives. + xor a ;clear vblank flag + ldio [vblankFlag],a + ret + +;--------------------------------------------------------------------- +; Subroutine: OnVBlank +; Description: Called every vertical blank. Sets "vblankFlag" to +; 1 to indicate a vertical blank has occurred +;--------------------------------------------------------------------- +OnVBlank:: + push af ;save all registers on stack + push bc + push de + push hl + + ld a,1 ;set "vblankFlag" to 1 + ldio [vblankFlag],a + + ;store current VRAM bank in use + ld a,[$ff00+$4f] + push af + + ;update timers + ld hl,vblankTimer + inc [hl] + + ;is the backBuffer ready for DMA blit to screen? + ldio a,[backBufferReady] + or a + jr z,.checkDMALoad ;wasn't ready + + ld a,[displayType] + or a + jr nz,.afterVblankCheck ;cinema type + + ldio a,[vblankTimer] + ld hl,vblankTemp + sub [hl] + ldio [vblanksPerUpdate],a + + ;update no faster than 1-frame-every-so-many-blanks clocks + cp MIN_VBLANKS + jr c,.checkDMALoad ;too soon to update + +;MUST SYNCHRONIZE WITH REMOTE TO DYNAMICALLY CHANGE THIS + ;jr z,.rightOn ;exactly right + ;updating too many objects; decrease iterateNumObjects + ;ld hl,iterateNumObjects + ;ld a,[hl] + ;cp 17 + ;jr c,.rightOn ;don't risk going below 16 per update + + ;dec [hl] + +.rightOn + ldio a,[vblankTimer] ;save time of this screen update + ldio [vblankTemp],a + +.afterVblankCheck + ld hl,updateTimer + inc [hl] + + xor a + ldio [backBufferReady],a ;signal we've blitted backbuffer + + ;set VRAM bank to 0 + xor a + ld [$ff00+$4f],a + + ;use DMA to transfer sprite OAM buffer to VRAM + call SpriteDMAHandler + + ;Initiate DMA transfer of backbuffer to VRAM + + ld hl,backBuffer + ld a,h + ld [$ff00+$51],a ;high byte of source + ld a,l + ld [$ff00+$52],a ;low byte of source + ldio a,[backBufferDestHighByte] + ld [$ff00+$53],a ;high byte of dest + xor a + ld [$ff00+$54],a ;low byte of dest + ld a,37 ;copy (37+1)*16 = 608 bytes + ld [$ff00+$55],a ;store length to start DMA + + ;set VRAM bank to 1 (tile attributes) + ld a,1 + ld [$ff00+$4f],a + + ;Initiate DMA transfer of tile attributes to VRAM + ld hl,attributeBuffer + ld a,h + ld [$ff00+$51],a ;high byte of source + ld a,l + ld [$ff00+$52],a ;low byte of source + ldio a,[backBufferDestHighByte] + ld [$ff00+$53],a ;high byte of dest + xor a + ld [$ff00+$54],a ;low byte of dest + ld a,37 ;copy (37+1)*16 = 608 bytes + ld [$ff00+$55],a ;store length to start DMA + + ld a,[desiredPixelOffset_x] + ld [curPixelOffset_x],a + ld a,[desiredPixelOffset_y] + ld [curPixelOffset_y],a + jr .scroll + +.checkDMALoad + ldio a,[dmaLoad] + or a + jr z,.scroll + +.checkLoadBank0 + bit 0,a + jr z,.checkLoadBank1 + +.loadBank0 + res 0,a + ldio [dmaLoad],a ;indicate we've loaded it + xor a + ld [$ff4f],a + + ;Initiate DMA transfer to bank 0 VRAM + ld a,[dmaLoadSrc0+1] + ld [$ff00+$51],a ;high byte of source + ld a,[dmaLoadSrc0] + ld [$ff00+$52],a ;low byte of source + ld a,[dmaLoadDest0+1] + ld [$ff00+$53],a ;high byte of dest + ld a,[dmaLoadDest0] + ld [$ff00+$54],a ;low byte of dest + ld a,[dmaLoadLen0] ;copy (N+1)*16 bytes + ld [$ff00+$55],a ;store length to start DMA + +.checkLoadBank1 + ldio a,[dmaLoad] + bit 1,a + jr z,.scroll + +.loadBank1 + res 1,a + ldio [dmaLoad],a ;indicate we've loaded it + ld a,1 + ld [$ff4f],a + + ;Initiate DMA transfer to bank 1 VRAM + ld a,[dmaLoadSrc1+1] + ld [$ff00+$51],a ;high byte of source + ld a,[dmaLoadSrc1] + ld [$ff00+$52],a ;low byte of source + ld a,[dmaLoadDest1+1] + ld [$ff00+$53],a ;high byte of dest + ld a,[dmaLoadDest1] + ld [$ff00+$54],a ;low byte of dest + ld a,[dmaLoadLen1] ;copy (N+1)*16 bytes + ld [$ff00+$55],a ;store length to start DMA + +.scroll ;Adjust scroll coordinates + ld hl,lineZeroHorizontalOffset + ldio a,[jiggleDuration] + or a + jr z,.useNormalScreenOffsets + + ;jiggle the screen! + dec a + ldio [jiggleDuration],a + + ;determine jiggle type + ld a,[jiggleType] + or a + jr nz,.takeoffJiggle + +.normalJiggle + ;pick a "random value" + ld a,[jiggleLoc] + add 17 + ld [jiggleLoc],a + ld b,a ;store random value in b + and %00000111 ;random x offset + ldio [baseHorizontalOffset],a + add [hl] ;add lineZeroHorizontalOffset + ldio [$ff43],a + swap b + ld a,%00000111 ;random y offset + and b + ldio [$ff42],a + jr .done + +.takeoffJiggle + ld a,[jiggleLoc] + add 17 + ld [jiggleLoc],a + ld b,a ;store random value in b + and %11 ;x offset + ldio [$ff43],a + swap b + ld a,%11 + and b + ld b,a + ld a,[curPixelOffset_y] + add b + cp 8 + jr c,.takeoffVOkay + + ld a,7 + +.takeoffVOkay + ldio [$ff42],a + jr .done + +.useNormalScreenOffsets + ld a,[curPixelOffset_x] + ldio [baseHorizontalOffset],a + add [hl] ;add lineZeroHorizontalOffset + ldio [$ff43],a + ld a,[curPixelOffset_y] + ldio [$ff42],a + + ;new palette to copy? + ldio a,[paletteBufferReady] + or a + jr z,.afterPaletteCopy + + ld c,16 ;c is count + ld hl,fadeCurPalette + ld a,%10000000 + ld [$ff68],a + ld [$ff6a],a +.paletteCopyBG + ld a,[hl+] ;copy sets of 4 bytes to avoid minute but + ld [$ff69],a ;killer delays decrementing the counter + ld a,[hl+] + ld [$ff69],a + ld a,[hl+] + ld [$ff69],a + ld a,[hl+] + ld [$ff69],a + dec c + jr nz,.paletteCopyBG + + ld c,16 ;c is count +.paletteCopyFG + ld a,[hl+] + ld [$ff6b],a + ld a,[hl+] + ld [$ff6b],a + ld a,[hl+] + ld [$ff6b],a + ld a,[hl+] + ld [$ff6b],a + dec c + jr nz,.paletteCopyFG + + xor a + ldio [paletteBufferReady],a + +.afterPaletteCopy + +.done + ;update music + ldio a,[musicEnabled] + and %10000 + jr z,.doneMusic + + ld hl,musicNoteCountdown + dec [hl] + call z,PlayMusic + +.doneMusic + ;restore VRAM bank that was in use + pop af + ld [$ff00+$4f],a + + pop hl ;restore all regs from stack + pop de + pop bc + pop af + reti ;return from interrupt + + +;--------------------------------------------------------------------- +; Subroutine: OnHBlank +; Description: Called after every line is drawn. +;--------------------------------------------------------------------- +OnHBlank:: + push af + push bc + push hl + +OnHBlank_afterPush: + ldio a,[$ff41] ;get stat register + bit 2,a ;equal to lyc? + jp z,FinishHBlankPlayingSample + +.continue + ld hl,hblankFlag + bit 0,[hl] ;turning window on or off? + jr nz,OnHBlank_turnOffWindow + + ;turn on window + bit 1,[hl] ;allowed to? + jr nz,.turnOn + jp z,FinishHBlankPlayingSample +.turnOn + set 0,[hl] + ldio a,[hblankWinOff] + ld [$ff45],a ;reset lyc to win off pos + ld hl,$ff40 ;turn window on + set 5,[hl] + +OnHBlank_SetBGColorBlack: + ;set background palette 0, color zero to black + ld b,0 + ld c,$68 + ld hl,$ff69 + ld a,%10000000 ;specification 0 + ld [c],a + ld [hl],b + ld [hl],b + + ;ld a,%10000110 ;white + ;ld [c],a + ;ld [hl],h + ;ld [hl],h + + ld a,%10001000 ;palette 1 + ld [c],a + ld [hl],b + ld [hl],b + + ld a,%10010000 ;palette 2 + ld [c],a + ld [hl],b + ld [hl],b + + ld a,%10011000 ;palette 3 + ld [c],a + ld [hl],b + ld [hl],b + + ld a,%10100000 ;palette 4 + ld [c],a + ld [hl],b + ld [hl],b + + ld a,%10101000 ;palette 5 + ld [c],a + ld [hl],b + ld [hl],b + + ld a,%10110000 ;palette 6 + ld [c],a + ld [hl],b + ld [hl],b + + ld a,%10111000 ;palette 7 + ld [c],a + ld [hl],b + ld [hl],b + + jp FinishHBlankPlayingSample + +OnHBlank_turnOffWindow: + res 0,[hl] + ldio a,[hblankWinOn] + ld [$ff45],a ;reset lyc to win on pos + ld hl,$ff40 ;turn window off + res 5,[hl] + + ;restore background palette 0, color zero + push de + ld c,$68 + ld hl,mapColor + ld a,[hl+] + ld d,[hl] + ld e,a + ld hl,$ff69 + +HBlankSetBGColorCDEHL_DEPushed: + ld a,%10000000 ;specification 0 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10001000 ;specification 1 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10010000 ;specification 2 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10011000 ;specification 3 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10100000 ;specification 4 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10101000 ;specification 5 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10110000 ;specification 6 + ld [c],a + ld [hl],e + ld [hl],d + + ld a,%10111000 ;specification 7 + ld [c],a + ld [hl],e + ld [hl],d + + ;ld a,%10000110 ;white + ;ld [c],a + ;ld a,[fadeCurPalette+6] + ;ld [hl],a + ;ld a,[fadeCurPalette+7] + ;ld [hl],a + + pop de + +.done + jp FinishHBlankPlayingSample + +;--------------------------------------------------------------------- +; Subroutine: CinemaOnHBlank +; Description: Called after every line is drawn. +;--------------------------------------------------------------------- +CinemaOnHBlank:: + push af + push bc + push hl + + ldio a,[$ff41] ;get stat register + bit 2,a ;equal to lyc? + jp z,FinishHBlankPlayingSample + +.continue + ld hl,hblankFlag + bit 0,[hl] ;turning window on or off? + jr nz,.turnOff + + ;turn on window + bit 1,[hl] ;allowed to? + jr nz,.turnOn + jp z,FinishHBlankPlayingSample +.turnOn + set 0,[hl] + ldio a,[hblankWinOff] + ld [$ff45],a ;reset lyc to win off pos + ld hl,$ff40 ;turn window on + set 5,[hl] + jp FinishHBlankPlayingSample + +.turnOff + res 0,[hl] + ldio a,[hblankWinOn] + ld [$ff45],a ;reset lyc to win on pos + ld hl,$ff40 ;turn window off + res 5,[hl] + +.done + jp FinishHBlankPlayingSample + +;--------------------------------------------------------------------- +; Subroutine: HOffsetOnHBlank +; Description: Called after every line is drawn. Sets each line's +; horizontal offset from horizontalOffset[144] +;--------------------------------------------------------------------- +HOffsetOnHBlank:: + push af + push bc + push hl + + ;save current RAM bank + ldio a,[$ff70] + push af + + ld a,TILEINDEXBANK + ldio [$ff70],a + ;add to the horizontal offset for next line + ld c,$44 ;get $ff44 + ld a,[c] ;ypos of refresh (index to array) + dec c ;c=$43 ($ff43) + inc a + ld l,a + ld h,((horizontalOffset>>8)&$ff) + ldio a,[baseHorizontalOffset] + add [hl] + ld [c],a ;xpos of screen + +.afterAdjustOffsets + pop af + ldio [$ff70],a + jp OnHBlank_afterPush + +;--------------------------------------------------------------------- +; Subroutine: SeasonsOnHBlank +; Description: Called after every line is drawn. Sets color 0 (all +; bg palettes) to white on line 143 and to brown ($888) +; on line 39. +;--------------------------------------------------------------------- +SeasonsOnHBlank:: + push af + push bc + push hl + + ld a,[amShowingDialog] + or a + jr nz,.seasonsWindow + + ;jr z,.normal + ;ld a,[hblankFlag] + ;and %11 + ;jr nz,.seasonsWindow + +.normal + ldio a,[$ff44] ;ypos + cp 143 + jr z,.toWhite + cp 39 + jp nz,.seasonsWindow + +.toBrown + push de + ld c,$68 + ld hl,fadeCurPalette+62 + ld a,[hl+] + ld d,[hl] + ld e,a + ld hl,$ff69 + jp HBlankSetBGColorCDEHL_DEPushed + +.toWhite + push de + ld c,$68 + ld hl,mapColor + ld a,[hl+] + ld d,[hl] + ld e,a + ld hl,$ff69 + jp HBlankSetBGColorCDEHL_DEPushed + +.seasonsWindow + ldio a,[$ff41] ;get stat register + bit 2,a ;equal to lyc? + jp z,FinishHBlankPlayingSample + +.continue + ld hl,hblankFlag + bit 0,[hl] ;turning window on or off? + jr nz,.turnOff + + ;turn on window + bit 1,[hl] ;allowed to? + jr z,.toBrown + ;jr nz,.turnOn + ;jp FinishHBlankPlayingSample +.turnOn + set 0,[hl] + ldio a,[hblankWinOff] + ld [$ff45],a ;reset lyc to win off pos + ld hl,$ff40 ;turn window on + set 5,[hl] + jp OnHBlank_SetBGColorBlack + +.turnOff + res 0,[hl] + ldio a,[hblankWinOn] + ld [$ff45],a ;reset lyc to win on pos + ld hl,$ff40 ;turn window off + res 5,[hl] + + jr .toBrown + +;--------------------------------------------------------------------- +; Routine: GetInput +; Description: Swaps in the link code bank, passes the work along to +; HandleInput, and swaps in the object bank before +; ending. +;--------------------------------------------------------------------- +GetInput:: + LONGCALLNOARGS HandleInput + + ;if the heroes are idle then set both inputs to zero + ld a,[heroesIdle] + or a + ret z + + xor a + ld [curJoy0],a + ld [curJoy1],a + + ret + +;--------------------------------------------------------------------- +; Routine: CheckPause +; Description: Checks for pause button being pressed +;--------------------------------------------------------------------- +CheckPause: + ld hl,dialogJoyIndex + ld a,[hl] + push af + + ld a,[heroesPresent] + cp %11 + jr z,.checkBoth + + dec a + ld [hl],a + ld a,[myJoy] + bit JOY_START_BIT,a + jr z,.done + jr .checkModes + +.checkBoth + ld [hl],0 + ld a,[curInput0] + bit JOY_START_BIT,a + jr nz,.checkModes + + ld [hl],1 + ld a,[curInput1] + bit JOY_START_BIT,a + jr z,.done + +.checkModes + ld a,[amShowingDialog] + or a + jr nz,.done + + ld a,[displayType] + or a + jr nz,.done + + ld a,[amChangingMap] + or a + jr nz,.done + + ld a,[heroesIdle] + or a + jr nz,.done + + ;(show as dialog) + ld a,[dialogSettings] + push af + call SetPressBDialog + call SaveIdle + + ld de,.afterPause + call SetDialogSkip + + ld a,BANK(GeneratePauseMessage) + ld hl,GeneratePauseMessage + call LongCallNoArgs + + ld a,1 + ld [amShowingDialog],a + ld de,backBuffer+63 + + call ShowDialogAtTopCommon + call DialogWaitInputZero + +.wait + call UpdateObjects + call RedrawMap + call SetDialogJoy + bit JOY_SELECT_BIT,[hl] + jr nz,.selectPressed + call CheckDialogContinue + or a + jr z,.wait + +.afterPause + call ClearDialog + + call RestoreIdle + pop af + ld [dialogSettings],a +.done + pop af + ld [dialogJoyIndex],a + ret + +.selectPressed + call ClearDialog + call RestoreIdle + pop af + ld [dialogSettings],a + pop af + ld [dialogJoyIndex],a + + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,respawnMap + ld a,[hl+] + ld [curLevelIndex],a + ld a,[hl+] + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + ret + + +;--------------------------------------------------------------------- +; Routine: UpdateObjects +; Description: Waits for a vertical blank and then updates the +; objects +;--------------------------------------------------------------------- +MainLoopUpdateObjects: + call VWait ;wait for a vertical blank + ld a,1 + ld [checkInputInMainLoop],a + call GetInput + call CheckPause + xor a + ld [checkInputInMainLoop],a + jr .doneWithInput + +.vwait call VWait ;wait for a vertical blank + +.doneWithInput + call CheckSpecialFX + + ;wait for previous frame to be drawn + ldio a,[backBufferReady] + or a + jp nz,.vwait + jr UpdateObjectsCommon + +UpdateObjects:: + call VWait ;wait for a vertical blank + call GetInput + +.vwait call VWait ;wait for a vertical blank + +.doneWithInput + call CheckSpecialFX + + ;wait for previous frame to be drawn + ldio a,[backBufferReady] + or a + jp nz,.vwait + +UpdateObjectsCommon: + ld a,[displayType] + or a + ret nz ;done if cinema type + + ;check each object + ld b,METHOD_CHECK + ld a,[iterateNumObjects] + ld c,a + call IterateMaxObjects + + ;update the timers that hero/hero bullets base moves off of + call UpdateHeroTimers + + ;make sure we check the hero & hero's bullets each time + ld hl,hero0_index + call .checkHeroObjects + ld hl,hero1_index + call .checkHeroObjects + + ret + +.checkHeroObjects + ld a,[hl+] ;heroX_index + or a + ret z ;this hero doesn't exist + + ld c,a + call GetFirst + ld b,METHOD_CHECK + ;ld e,[hl] ;heroX_objectL + ;inc hl + ;ld d,[hl] ;heroX_objectH + ;inc hl + call CallMethod + + inc hl + inc hl + + ld a,[hl] ;heroX_bulletIndex + ld c,a + call GetFirst + call IterateList + ret + +;--------------------------------------------------------------------- +; Routine: RedrawMap +; Description: Redraws the map for the next vblank +;--------------------------------------------------------------------- +RedrawMap:: + call RestrictCameraToBounds + call ScrollToCamera + + call DrawMapToBackBuffer + call UpdateEnvEffect + + ld a,1 + ldio [backBufferReady],a ;signal we're ready for DMA + + ret + + + +;--------------------------------------------------------------------- +; Routine: HandleRemoteInput +; Arguments: a - remoteInput +; Returns: a - remoteInput +; zflag - set if must repeat +; Alters: af +;--------------------------------------------------------------------- +HandleRemoteInput:: + bit 7,a ;test bit 7 + ret z ;got the BCB + + ;handle the link command code we received. + call HandleLCC + + ;indicate we need to try exchanging our control bytes again + ld a,1 + or a ;don't set zero flag + ret + +;--------------------------------------------------------------------- +; Routine: HandleLCC +; Arguments: a - value of the Link Command Code. +; Returns: nothing. +; Alters: af +;--------------------------------------------------------------------- +HandleLCC: +.checkLGETGAMESTATE + cp LGETGAMESTATE + jr nz,.checkLGETMAPINDEX + + ;LGETGAMESTATE + LONGCALLNOARGS TransmitGameState + ret + +.checkLGETMAPINDEX + cp LGETMAPINDEX + jr nz,.checkLUPDATESTATE + + ;LGETMAPINDEX + ld a,[displayType] + or a + jr nz,.returnDifferentMapCode ;cinema type + ld a,[amChangingMap] + or a + jr nz,.returnWaitCode + ld a,[canJoinMap] + ;or a + ;jr z,.returnWaitCode + cp 2 + jr z,.returnDifferentMapCode ;do this map independently + + ld a,[curLevelStateIndex] + jr .returnMapIndex +.returnWaitCode + ld a,$ff + jr .returnMapIndex +.returnDifferentMapCode + ld a,$fe +.returnMapIndex + call TransmitByte + ret + +.checkLUPDATESTATE + cp LUPDATESTATE + jr nz,.checkLUPDATEHERO + + ;LUPDATESTATE + push hl + ld a,LEVELSTATEBANK + ld [$ff70],a + call ReceiveByte + ld h,((levelState>>8) & $ff) + ld l,a + call ReceiveByte + ld [hl],a + pop hl + + ret + +.checkLUPDATEHERO + cp LUPDATEHERO + jr nz,.checkLYANKPLAYER + + ;LUPDATEHERO + call ReceiveByte + ld [heroesUsed],a + ret + +.checkLYANKPLAYER + cp LYANKPLAYER + jr nz,.checkLRESYNCHRONIZE + + ;LYANKPLAYER + ;get exit direction + call ReceiveByte + ld [hero0_enterLevelFacing],a + + ;get new map coordinates + push bc + push af + call ReceiveByte + ld c,a + call ReceiveByte + ld b,a + ld a,[hero0_enterLevelFacing] + and 7 + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + pop af + cp 8 + jr nc,.changeMap + + ld a,[curLevelIndex] + cp c + jr nz,.changeMap + ld a,[curLevelIndex+1] + cp b + jr z,.noChangeMap + +.changeMap + ld a,c + ld [curLevelIndex],a ;map index lobyte + ld a,b + ld [curLevelIndex+1],a ;map index lobyte + ld a,1 + ld [timeToChangeLevel],a + +.noChangeMap ;already on this map + pop bc + ret + +.checkLRESYNCHRONIZE + cp LRESYNCHRONIZE + jr nz,.checkLGETRANDOMSEED + + LONGCALLNOARGS GuestContinueSynchronization + ret + +.checkLGETRANDOMSEED + cp LGETRANDOMSEED + jr nz,.checkLTERMINATE + + ldio a,[randomLoc] + call TransmitByte + ret + +.checkLTERMINATE + cp LTERMINATE + jr nz,.checkLSYNCHRONIZE + + ld a,[amLinkMaster] + cp 1 + jr z,.terminateMaster + + ;terminate slave + rst $00 +.terminateMaster + ld a,$fe + ld [amLinkMaster],a + ret + +.checkLSYNCHRONIZE + cp LSYNCHRONIZE + jr nz,.checkLLOCKHEROES + + ;LSYNCHRONIZE + ;am I ready to synchronize? + ld a,[checkInputInMainLoop] + or a + jr z,.notReadyToSync + ld a,[amShowingDialog] + or a + jr nz,.readyIfCinema + ld a,[canJoinMap] + or a + jr z,.notReadyToSync + jr .readyToSynchronize + +.readyIfCinema + ld a,[displayType] + or a + jr nz,.readyToSynchronize + + ;not ready +.notReadyToSync + ld a,LSYNCHWAIT + call TransmitByte + ret + +.readyToSynchronize + ld a,LSYNCHREADY + call TransmitByte + LONGCALLNOARGS HostSynchronize + ret + +.checkLLOCKHEROES + cp LLOCKHEROES + jr nz,.checkLNOLINK + + call ReceiveByte ;receive lock or unlock from remote + ld [heroesLocked],a + ret + +.checkLNOLINK + cp LNOLINK + jr nz,.checkLLINKTEST + ret + +.checkLLINKTEST + cp LLINKTEST + jr nz,.checkLCHANGEAPPXMAP + + LONGCALLNOARGS LinkTest + ret + +.checkLCHANGEAPPXMAP + cp LCHANGEAPPXMAP + jr nz,.checkLADDINVITEM + + LONGCALLNOARGS NewAppxLocation + ret + +.checkLADDINVITEM + cp LADDINVITEM + jr nz,.checkLREMINVITEM + + push bc + call ReceiveByte ;get bc (inventory item) + ld c,a + call ReceiveByte + ld b,a + + ;duplicate code also in map.asm + push hl + call PointHLToInventory + or c + ld [hl],a + pop hl + pop bc + ret + +.checkLREMINVITEM + cp LREMINVITEM + jr nz,.checkLUPDATEMEMORY + + ;duplicate code also in map.asm + push bc + call ReceiveByte ;get bc (inventory item) + ld c,a + call ReceiveByte + ld b,a + + ;duplicate code also in map.asm + push hl + call PointHLToInventory + xor $ff + or c + xor $ff + ld [hl],a + pop hl + pop bc + ret + +.checkLUPDATEMEMORY + cp LUPDATEMEMORY + jr nz,.unknown + + push hl + call ReceiveByte ;memory bank of data + ldio [$ff70],a + call ReceiveByte ;address + ld l,a + call ReceiveByte + ld h,a + call ReceiveByte ;new value + ld [hl],a + pop hl + ret + +.unknown + ret + +;--------------------------------------------------------------------- +; Routines: LLTransmitByte +; Arguments: a - byte to send +; [amLinkMaster] - should be set to 1 or 0 +; Returns: Nothing. +; Alters: af +; Note: DON'T CALL THIS DIRECTLY. It should only be called +; via TransmitByte and ReceiveByte. +; Description: Low-level routine to transmit a byte via the link +; cable. +;--------------------------------------------------------------------- +LLTransmitByte: + di ;be sure we're not interrupted + ldio [$ff01],a ;store the data to transfer + ld a,INTCLK + ldio [$ff02],a ;let's do it +.waitForCompletion + ldio a,[$ff02] ;12 + and $80 ; 8 + jr nz,.waitForCompletion ; 8 + + ;go into slave mode to await next byte + ld a,EXTCLK ; 8 + ldio [$ff02],a ;12 TOTAL = 48 + + ;clear pending interrupts + xor a + ei + ld [$ff0f],a + + ret + +;--------------------------------------------------------------------- +; Routines: LLReceiveByte +; Arguments: [amLinkMaster] - should be set to 1 or 0 +; Returns: a - byte received from linked GameBoy. +; Alters: af +; Note: DON'T CALL THIS DIRECTLY. It should only be called +; via TransmitByte and ReceiveByte. +; Description: Low-level routine to receive a byte via the link +; cable. If no signal within nine seconds aborts link +; connection and: +; Master - continues game as slaveless master ($fe). +; Slave - restarts game. +;--------------------------------------------------------------------- +LLReceiveByte: + push bc + push de + + ld de,$0C00 ;abort timer counts down $C00 * 256 times + ld c,0 ;(about 1.25 sec per $100) +.waitForCompletion + ldio a,[$ff02] + and $80 + jr z,.gotValue + + ;update our abort timer + dec c + jr nz,.waitForCompletion + + dec de + xor a + cp d + jr nz,.waitForCompletion + cp e + jr nz,.waitForCompletion + jr .linkLost + +.gotValue + ldio a,[$ff01] ;return the value we received + + ;kill some time before we let ourselves change to master + ;to give the current master time to change to slave + push af +.killOuter + ld a,6 +.killTime + dec a ; 4 + jr nz,.killTime ; 4/8 TOTAL = 8, *6=48 + pop af + jr .done + +.linkLost + ld a,[amLinkMaster] + or a + jr z,.amSlave + + cp 1 + jr z,.amMaster + + ;link already lost, restore stack & jump to bail-out address + ;if not 0 + ld a,[linkBailOut] ;get bail-out address + ld e,a + ld a,[linkBailOut+1] + ld d,a + xor a + cp d + jr nz,.bail + cp e + jr nz,.bail + + ;null bail address; just quit + jr .done + +.bail + ;restore the stack before jumping to the bail address + ld a,[linkBailOut+2] + ld l,a + ld a,[linkBailOut+3] + ld h,a + ld sp,hl + push de + ret + +.amMaster + ld a,$fe + ld [amLinkMaster],a + + call RemoveRemoteHero + jr .done + +.amSlave + rst $00 ;restart the game + +.done + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: TransmitByte +; Argument: a - byte to send +; Returns: Nothing. +; Alters: af +; Description: Transmits a byte via the link cable to a remote GBC. +;--------------------------------------------------------------------- +TransmitByte:: + push bc + ld b,a + + ;If I was the last one to transmit, receive a byte as an + ;acknowledgement. + ld a,[lastLinkAction] + or a + jr z,.afterOrientStream + + call LLReceiveByte + +.afterOrientStream + ld a,1 ;our action this time is to transmit + ld [lastLinkAction],a + + ld a,b + call LLTransmitByte + +.done + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: ReceiveByte +; Arguments: None. +; Returns: a - byte received. +; Alters: af +; Description: Receives a byte from a remote machine. +;--------------------------------------------------------------------- +ReceiveByte:: + ;If necessary we'll transmit a value to avoid receiving twice + ;in a row. + ld a,[lastLinkAction] + or a + jr nz,.afterOrientStream + + ld a,1 + call LLTransmitByte + +.afterOrientStream + xor a ;our action this time is to receive + ld [lastLinkAction],a + + call LLReceiveByte + ret + + +;--------------------------------------------------------------------- +; Routine: ExchangeByte +; Argument: a - byte to send +; Returns: a - byte received in return +; Alters: af +; Description: Uses value of [amLinkMaster] (Master should be $01 and +; Slave should be $00) to determine sequencing of +; TransmitByte and ReceiveByte. +;--------------------------------------------------------------------- +ExchangeByte:: + push bc + ld b,a + + ld a,[amLinkMaster] + or a + jr z,.slaveExchange + + ;masterExchange + ld a,b + call TransmitByte + call ReceiveByte + jr .done + +.slaveExchange + call ReceiveByte + ld c,a + ld a,b + call TransmitByte + ld a,c + +.done + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: TransmitData +; Arguments: a - RAM bank to switch to (may/may not make a diff) +; bc - number of bytes to transmit +; hl - starting address of data to transmit +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +TransmitData:: + push bc + push hl + + ldio [$ff70],a + +.loop ld a,[hl+] + call TransmitByte + dec bc + xor a + cp b + jr nz,.loop + cp c + jr nz,.loop + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ReceiveData +; Arguments: a - RAM bank to switch to (may/may not make a diff) +; bc - number of bytes to receive +; hl - starting address to store data +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +ReceiveData:: + push bc + push hl + + ldio [$ff70],a ;change RAM bank + +.loop call ReceiveByte + ld [hl+],a + dec bc + xor a + cp b + jr nz,.loop + cp c + jr nz,.loop + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: TransmitCompressedData +; Arguments: a - RAM bank to switch to (may/may not make a diff) +; bc - number of bytes to transmit +; hl - starting address of data to transmit +; Returns: Nothing. +; Alters: af +; Description: Packs bytes 8:1 into the backBuffer by combining +; bit[0] from every eight bytes into one byte. The +; left-most bit will be from byte[0] and the right-most +; from byte[7]. +;--------------------------------------------------------------------- +TransmitCompressedData:: + push bc + push de + push hl + + ldio [$ff70],a + + ;divide len by 8 (>>3) + srl b + rr c + srl b + rr c + srl b + rr c + + push bc ;save length + + ;----Compress the data into backBuffer------------------------ + ld de,backBuffer ;compression buffer +.nextByte + push de ;push destination + ld de,8 ;d is compressed (0), e is times to loop + +.nextBit + ld a,[hl+] ;get the next byte + rrca ;shift out bit[0] into the carry flag + rl d ;rotate onto right side of result + dec e + jr nz,.nextBit + + ld a,d ;a has compressed byte + pop de ;pop destination + ld [de],a ;store the compressed byte + inc de + + dec bc + xor a + cp b + jr nz,.nextByte + cp c + jr nz,.nextByte + + pop bc ;done with compression, retrieve len + + ld hl,backBuffer ;transmit the compressed data + xor a + call TransmitData + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ReceiveCompressedData +; Arguments: a - RAM bank to switch to (may/may not make a diff) +; bc - number of bytes to receive +; hl - starting address of data to receive +; Returns: Nothing. +; Alters: af +; Description: Receives numBytes/8 into the backBuffer, then unpacks +; each byte 1:8 to the data address. +;--------------------------------------------------------------------- +ReceiveCompressedData:: + push bc + push de + push hl + + push af ;save original RAM bank + push hl ;save original dest + + ;----Calculate numBytes/8 (>>3)------------------------------- + srl b + rr c + srl b + rr c + srl b + rr c + + ld hl,backBuffer ;receive the compressed data + xor a + call ReceiveData + + pop hl ;retrieve original dest + pop af ;retrieve original RAM bank + ldio [$ff70],a + + ;----Decompress the data into the destination buffer---------- + ld de,backBuffer ;decompression buffer +.nextByte + ld a,[de] ;get a byte from the buffer + inc de + push de ;push source + ld d,a ;store compressed byte in d + ld e,8 ;e is times to loop + +.nextBit + xor a + rl d ;get a bit off left side of compressed + rla ;shift onto right side of uncompressed + ld [hl+],a ;store in final destination + dec e + jr nz,.nextBit + + pop de ;pop source + + dec bc + xor a + cp b + jr nz,.nextByte + cp c + jr nz,.nextByte + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CheckSimultaneousLCC +; Argument: a - byte received from link exchange +; Returns: not z flag - this machine must repeat its command +; z flag set - everything is okay +; Alters: af +; Description: Called after one machine has sent the first byte of +; a Link Command Code. If the remote machine +; coincidentally sent its own LCC at the same time then +; the Slave must delay its own LCC until the Master's +; LCC has been handled. +;--------------------------------------------------------------------- +CheckSimultaneousLCC:: + bit 7,a ;see if we got a LCC or a BCB. + ret z ;Got a BCB, everything's cool. + + ;Got a LCC. If I'm the Master then the other machine must + ;yield to me so everything's still cool. + push af + ld a,[amLinkMaster] + or a + jr z,.amSlave + pop af + xor a + ret + +.amSlave + ;I must yield to the Master. Handle his request and then + ;return a value indicating I must repeat my own request. + pop af + call HandleLCC + ld a,1 + or a + ret + +;--------------------------------------------------------------------- +; Routine: YankRemotePlayer +; Arguments: a - exit to set to (>7 means &7 and don't check +; to see if you're on the map) +; +; hl - map to set to in BCD (e.g. $0205) +; Returns: Nothing. +; Alters: af +; Description: Interrupts whatever the other player is doing and +; sets him to come to the specified map. Also sets +; the join/respawn map to the map to set to. +;--------------------------------------------------------------------- +YankRemotePlayer:: + push af + call UpdateState + call SetJoinMap + call SetRespawnMap + pop af + + ;verify link established + push hl + ld hl,amLinkMaster + bit 7,[hl] + pop hl + ret nz + + push af + push hl + ld a,2 ;two additional things on stack + ld hl,.linkBailAddress + call SetLinkBailOutAddress + + pop hl + +.sendYank + ld a,LYANKPLAYER + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.sendYank + pop af + + ;remote machine is listening; send map coords + call TransmitByte ;exit dir + ld a,l + call TransmitByte + ld a,h + call TransmitByte +.linkBailAddress + push hl + ld hl,0 + xor a + call SetLinkBailOutAddress + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: RemoveRemoteHero +; Arguments: None. +; Returns: Nothing. +; Alters: af +; Description: Deletes the remote hero and removes traces of its +; presence. +;--------------------------------------------------------------------- +RemoveRemoteHero:: + push bc + push de + push hl + + ;determine which is the remote hero + ld a,[amLinkMaster] + or a + jr z,.amSlave + +.amMaster + ld hl,hero1_index + jr .determinedRemoteHero + +.amSlave + ld hl,hero0_index + +.determinedRemoteHero + ;remove remote hero from map if present + ld a,[hl] ;heroX_index + or a + jr z,.done ;not here + + ;save the current ROM & switch in the object ROM + ldio a,[curROMBank] + push af + ld a,CLASSROM + call SetActiveROM + + ;----remove this one's heroesPresent flag---- + ld a,[hl] ;heroX_index + push af + + ld a,l + and 16 +IF HERODATASIZE!=16 +fix this +ENDC + swap a ;a is now 1 or 0 + add 1 ;now 2 or 1 + xor $ff ;now ~2 or ~1 + ld b,a + ld a,[heroesPresent] + and b + ld [heroesPresent],a + + ;push hl + ;ld de,(HERODATA_TYPE - HERODATA_INDEX) + ;add hl,de + ;ld a,[hl] ;heroX_type + ;xor $ff + ;ld b,a + ;ld a,[heroesPresent] + ;and b + ;ld [heroesPresent],a + ;pop hl + xor a + ld [hl],a ;heroX_index + pop af + + ld c,a + call GetFirst + ld b,METHOD_DIE + call CallMethod + + ;restore the old ROM + pop af + call SetActiveROM + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: DebugMesg +; Argument: hl - pointer to a gtx structure +; Returns: Nothing. +; Alters: af +; Description: Displays the given gtx string in a window for a +; brief period. +;--------------------------------------------------------------------- +DebugMesg:: + push bc + push de + push hl + + ldio a,[$ff40] + and %10000000 + jr z,.done + + ld d,h + ld e,l + xor a + + ;-------Show Dialog At Top------------------- + push af + push bc + push de + push hl + + ld b,0 ;lines to skip at top + ld a,[curROMBank] + call ShowDialogCommon + + xor a + ldh [$ff4a], a ;set window y position + + ld a,[de] ;number of lines + rlca ;times 8 = pixels for window + rlca + rlca + add 7 + ld [hblankWinOff],a + + ld a,143 + ld [hblankWinOn],a + + ld a,[hblankFlag] + bit 1,a + jr nz,.afterSetLYC + + ld a,143 + ld [$ff45],a ;lyc + ld a,[hblankFlag] + +.afterSetLYC + or %10 ;allow window to show + ld [hblankFlag],a + + pop hl + pop de + pop bc + pop af + ;-------Show Dialog At Top------------------- + + ld bc,16384 + call TimerDelay + call ClearDialog + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: DebugVal +; Argument: a - byte to show as a hex value +; Returns: Nothing. +; Alters: Nothing. +; Description: Displays the given value in hex using a Dialog +; window for a brief period. Game must be on. +;--------------------------------------------------------------------- +DebugVal:: + push af + push bc + push de + push hl + + ld b,a ;save byte + + ldio a,[$ff40] + and %10000000 + jr z,.done + + ld hl,$c200 + ld [hl],1 + inc hl + ld [hl],1 + inc hl + ld [hl],2 + inc hl + ld a,b + ld c,0 + swap a + and $0f + add 200 + ld [hl+],a + ld a,b + and $0f + add 200 + ld [hl+],a + ld de,$c200 + xor a + + ;-------Show Dialog At Top------------------- + push af + push bc + push de + push hl + + ld b,0 ;lines to skip at top + ld a,[curROMBank] + call ShowDialogCommon + + xor a + ldh [$ff4a], a ;set window y position + + ld a,[de] ;number of lines + rlca ;times 8 = pixels for window + rlca + rlca + add 7 + ld [hblankWinOff],a + + ld a,143 + ld [hblankWinOn],a + + ld a,[hblankFlag] + bit 1,a + jr nz,.afterSetLYC + + ld a,143 + ld [$ff45],a ;lyc + ld a,[hblankFlag] + +.afterSetLYC + or %10 ;allow window to show + ld [hblankFlag],a + + pop hl + pop de + pop bc + pop af + ;-------Show Dialog At Top------------------- + + ld bc,8192 ;16384 + call TimerDelay + call ClearDialog + +.done + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: TimerDelay +; Argument: bc - number of 16384's of a second to delay +; Alters: af +;--------------------------------------------------------------------- +TimerDelay:: + push bc + push de + push hl + + ld hl,$ff04 + ld d,0 ;prev value of time + ld [hl],0 +.wait + ld a,[hl] + ld e,a + xor d ;equal to prev value? + jr z,.wait + + ld d,e + dec bc + xor a + cp b + jr nz,.wait + cp c + jr nz,.wait + + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: SetDialogSkip +; SetDialogForward +; Arguments: de - position to skip or fast forward to +; Alters: af +; Description: Saves the stack pointer (minus the space that this +; function call is taking up) and sets the go-to +; address for fast forwarding (any button pressed) +; or skipping (start button pressed). +;--------------------------------------------------------------------- +SetDialogSkip:: + push hl + ld hl,[sp+4] ;stack ptr pos once returned from this fn + ld a,e + ld [levelCheckSkip+2],a ;set skip forward addr + ld a,d + ld [levelCheckSkip+3],a + jr SetDialogCommon + +SetDialogForward:: + push hl + ld hl,[sp+4] ;stack ptr pos once returned from this fn + ld a,e ;set fast forward addr + ld [levelCheckSkip],a + ld a,d + ld [levelCheckSkip+1],a + jr SetDialogCommon + +SetSkipStackPos:: + push hl + ld hl,[sp+4] ;stack ptr pos once returned from this fn + +SetDialogCommon: + ld a,l + ld [levelCheckStackPos],a + ld a,h + ld [levelCheckStackPos+1],a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: ClearDialogSkipForward +; Arguments: None. +; Alters: af,hl +;--------------------------------------------------------------------- +ClearDialogSkipForward:: + call ClearDialog + call ClearSkipForward + ret + +;--------------------------------------------------------------------- +; Routine: ClearSkipForward +; Arguments: None. +; Alters: af,hl +;--------------------------------------------------------------------- +ClearSkipForward:: + ld de,0 + call SetDialogSkip + call SetDialogForward + ret + +;--------------------------------------------------------------------- +; Routine: SetRespawnMap +; Arguments: hl - map to go to after hero dies +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +SetRespawnMap:: + ld a,l + ld [respawnMap],a + ld a,h + ld [respawnMap+1],a + ret + +;--------------------------------------------------------------------- +; Routine: SetJoinMap +; Arguments: hl - map to join from 2nd player title screen +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +SetJoinMap:: + ld a,l + ld [joinMap],a + ld a,h + ld [joinMap+1],a + ret + +;--------------------------------------------------------------------- +; Routine: SetLinkBailOutAddress +; Arguments: a - number of additional words to add to stack +; pointer +; hl - saves stack pointer and bailout address into +; [linkBailOut0...3]. +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +SetLinkBailOutAddress:: + push hl + push af + ;save bail out address + ld a,l + ld [linkBailOut],a + ld a,h + ld [linkBailOut+1],a + + ;save stack pointer (plus a*2 + 6 for things pushed on stack) + ld hl,[sp+6] + pop af + or a + jr z,.afterAdjustStackPointer + +.adjustStackPointer + inc hl + inc hl + dec a + jr nz,.adjustStackPointer + +.afterAdjustStackPointer + ld a,l + ld [linkBailOut+2],a + ld a,h + ld [linkBailOut+3],a + + pop hl + ret + + +;--------------------------------------------------------------------- +; Routine: RemoveSpriteObjectsFromMap +;--------------------------------------------------------------------- +RemoveSpriteObjectsFromMap: + ;----remove all objects from the map-------------------------- + ld a,OBJLISTBANK + ldio [$ff70],a + ld hl,objExists+1 +.removeObjectsLoop + push hl + ld a,[hl] + or a + jr z,.removeObjects_continue + ld a,l + call IndexToPointerDE + ld a,[numClasses] + ld b,a + inc b + ld h,((objClassLookup>>8) & $ff) + ld a,[hl] + cp b ;this obj a regular creature? + jr nc,.removeObjects_continue + + call GetFacing + bit 7,a ;sprite? + jr z,.restoreObjListBank ;no + ld c,a + call RemoveFromMap +.restoreObjListBank + ld a,OBJLISTBANK + ldio [$ff70],a +.removeObjects_continue + pop hl + inc hl + ld a,h + cp ((objExists>>8) & $ff) + 1 + jr nz,.removeObjectsLoop + ret + +;--------------------------------------------------------------------- +; Routine: GetMethodAddrFromPointer +; Arguments: hl - pointer to method address +; Returns: hl - pointer to method +; Alters: af +;--------------------------------------------------------------------- +GetMethodAddrFromPointer:: + PUSHROM + ld a,BANK(classTable) + call SetActiveROM + + ld a,[hl+] + ld h,[hl] + ld l,a + + POPROM + ret + +;--------------------------------------------------------------------- +; Routine: InstallHBlankHandler +; Arguments: hl - pointer to hblank handler +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +InstallHBlankHandler:: + di + ld a,l + ld [hblankVector+1],a ;+0 is opcode "jp" + ld a,h + ld [hblankVector+2],a + ei + ret + +;--------------------------------------------------------------------- +; Routine: LockRemoteHeroesUsed +; Arguments: None. +; Returns: z - lock attempt unsuccessful +; nz - success +; Alters: af +; Description: Informs the remote machine that this machine is +; messing with the heroes to prevent collisions +;--------------------------------------------------------------------- +LockRemoteHeroesUsed:: + ld a,[amLinkMaster] + bit 7,a + jr nz,.lockOkay + +.sendLock + ld a,[heroesLocked] + or a + jr nz,.returnFailure + ld a,LLOCKHEROES + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.sendLock + + ld a,1 ;send "locked" to remote + call TransmitByte + +.lockOkay + ld a,1 + ld [heroesLocked],a + or a + ret + +.returnFailure + xor a + ret + +;--------------------------------------------------------------------- +; Routine: UpdateRemoteHeroesUsed +; Arguments: None. +; Returns: Nothing. +; Alters: af +; Description: Sends current [heroesUsed] to the remote machine +; if present. Also unlocks heroesUsed if locked. +;--------------------------------------------------------------------- +UpdateRemoteHeroesUsed:: + ld a,[amLinkMaster] + bit 7,a + jr z,.updateHeroesUsed + + ;no link, free lock + xor a + ld [heroesLocked],a + ret + +.updateHeroesUsed + ld a,LUPDATEHERO + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.updateHeroesUsed ;must repeat + + ld a,[heroesUsed] + call TransmitByte + + ld a,[heroesLocked] + or a + ret z ;not locked don't bother + +.sendLock + ld a,LLOCKHEROES + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.sendLock + + xor a ;send "unlocked" to remote + ld [heroesLocked],a + call TransmitByte + + ret + +;--------------------------------------------------------------------- +; Routine: PlaySample +; Arguments: a - bank of sample +; hl - start address of sample +; Alters: af,hl +; Description: +;--------------------------------------------------------------------- +PlaySample:: + ;start sample playing + di + ldio [sampleBank],a + xor a + ldio [samplePlaying],a + ei + + ld a,l + ldio [sampleAddress],a + ld a,h + ldio [sampleAddress+1],a + ld a,$0f + ldio [sampleMask],a + ld a,$86 + ldio [$ff1a],a ;sound 3 enable + ld hl,$ff26 + set 2,[hl] + ld a,1 + ldio [samplePlaying],a + ret + +;--------------------------------------------------------------------- +; FinishHBlankPlayingSample +;--------------------------------------------------------------------- +FinishHBlankPlayingSample:: + ldio a,[samplePlaying] + or a + jr z,.done + +.nextSample + ld hl,sampleAddress + ld a,[hl+] + ld h,[hl] + ld l,a +.loadNextSample + ldio a,[sampleBank] + ld [$2100],a + ldio a,[sampleMask] + xor $ff + ldio [sampleMask],a + cp $0f + jr nz,.getLeftNibble + +.getRightNibble + and a,[hl] + inc hl + jr .normalData ;will never be special code + +.getLeftNibble + and a,[hl] ;next sample byte + +.checkForSpecialCodes + cp $80 + jr nz,.normalData + + ;code indicating termination or link follows + inc hl + ld a,[hl+] + or a + jr nz,.link + + ld [samplePlaying],a + ld a,$ff + ld [$ff24],a ;full volume both channels + jr .restoreBank + +.link ld a,[hl+] + ld [sampleBank],a + ld a,[hl+] + ld h,[hl] + ld l,a + jr .loadNextSample + +.normalData + ld b,a + swap a + or b + or $88 + ldio [$ff24],a ;sound enabled/volume + +.saveNewAddress + ld a,l + ldio [sampleAddress],a + ld a,h + ldio [sampleAddress+1],a + +.restoreBank + ldio a,[curROMBank] + ld [$2100],a + +.done + pop hl + pop bc + pop af + reti + +;--------------------------------------------------------------------- +; Routine: Lookup8 +; Arguments: a - index +; hl - start lookup table +; Alters: af,hl +; Returns: a - table[a] +;--------------------------------------------------------------------- +Lookup8:: + add l + ld l,a + ld a,h + adc 0 + ld h,a + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routine: Lookup16 +; Arguments: a - index +; hl - start lookup table +; Alters: af,hl +; Returns: hl - table[a*2] +;--------------------------------------------------------------------- +Lookup16:: + push de + ld e,a + ld d,0 + sla e + rl d + add hl,de + ld a,[hl+] + ld h,[hl] + ld l,a + pop de + ret + +;--------------------------------------------------------------------- +; Routine: LookupIndexOfData8 +; Arguments: a - data +; hl - start of lookup table +; Alters: af,hl +; Returns: a - where table[a] is original data a. +; Data must exist! +;--------------------------------------------------------------------- +LookupIndexOfData8:: + push bc + + ld c,0 +.findLoop + cp [hl] + jr z,.done + + inc c + inc hl + jr .findLoop + +.done + ld a,c + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FindFirstBGLoc +; Arguments: hl - bg class to find (e.g. classClearanceBG) +; Returns: hl - first location of class +; a - 0 on failure +; zflag - or a +; Alters: af +;--------------------------------------------------------------------- +FindFirstBGLoc:: + push bc + push de + + push hl + pop bc + call FindClassIndex + ld b,a + + ld a,MAPBANK + ld [$ff70],a + + ;setup de with first out-of-bounds index + ld a,[mapTotalSize] + ld e,a + ld a,[mapTotalSize+1] + ld d,a + + ld hl,map +.lookForFirst + ld a,[hl+] + cp b + jr z,.foundIt + + ;hl < de? + ld a,h + cp d + jr c,.lookForFirst + + ld a,l + cp e + jr c,.lookForFirst + + ;not found + xor a + jr .done + +.foundIt + dec hl + ld a,1 + or a + +.done + pop de + pop bc + + ret + +;--------------------------------------------------------------------- +; Routine: LinkTransmitMemoryLocation +; Arguments: a - RAM bank +; hl - memory location to transmit to the remote +; GameBoy +; Alters: af +;--------------------------------------------------------------------- +LinkTransmitMemoryLocation:: + push bc + ld b,a + + ld a,[amLinkMaster] + bit 7,a + jr nz,.done ;not linked + +.requestTransmit + ld a,LUPDATEMEMORY + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.requestTransmit + + ld a,b + ldio [$ff70],a + call TransmitByte + ld a,l + call TransmitByte + ld a,h + call TransmitByte + ld a,[hl] + call TransmitByte + +.done + pop bc + ret + + +;--------------------------------------------------------------------- +; Link Code +;--------------------------------------------------------------------- +SECTION "LinkCodeSection",ROMX +linkCode: + + +;--------------------------------------------------------------------- +; Routine: HandleInput +; Description: Polls the buttons and stores the input in [curInput0]. +; Then performs some network code and sets up [curJoy0], +; [curJoy1], [curInput0], and [curInput1]. curJoyX may +; be set to zero elsewhere to prevent the heroes from +; moving but curInput0 and curInput1 will always be the +; original values. +; +; $80 - 7:Start +; $40 - 6:Select +; $20 - 5:B +; $10 - 4:A +; $08 - 3:Down +; $04 - 2:Up +; $02 - 1:Left +; $01 - 0:Right +; +; A linked Master should read its input from [curJoy0]. +; A linked Slave should read its input from [curJoy1]. +; To make this easier [myJoy] is set up to be the +; appropriate one. +; +; If no link connection established, attempt a link +; connection. +; +; If no link: +; Convert curInput0->Joy1 (result will be same as +; encoding then decoding curInput). +; +; If link connection established: +; Exchange Control Byte with linked machine. If +; Command Code gotten in return, perform requested +; action and then repeat attempt to exchange control +; byte. +; +; If Master: curInput0->Joy1, remoteInput->Joy2 +; If Slave: curInput0->Joy2, remoteInput->Joy1 +;--------------------------------------------------------------------- +HandleInput: + ld a,$20 + ldio [$ff00],a ;select P14 + ldio a,[$ff00] + ldio a,[$ff00] ;wait a few cycles + cpl + and $0f + ld b,a ;b has direction info + ld a,$10 ;select P15 + ld [$ff00],a + ldio a,[$ff00] ;wait mo + ldio a,[$ff00] ;wait mo + ldio a,[$ff00] ;wait mo + ldio a,[$ff00] ;wait mo + ldio a,[$ff00] ;wait mo + ldio a,[$ff00] ;wait mo + cpl + and $0f + swap a + or b ;a has all buttons + ld [curInput0],a + ld a,$30 ;deselect P14 and P15 + ldio [$ff00],a + + ;--if no link, attempt link connection ---------------------- + ld a,[amLinkMaster] + cp $ff + jr z,.afterLinkAttempt ;l1101 attempts link as slave + cp $fe ;attempt link as master? + jr nz,.afterLinkAttempt + +.attemptLinkAsMaster + ld a,$55 + ldio [$ff01],a ;exchange data = $55 + ld a,INTCLK ;ready to xchg, use my clock + ldio [$ff02],a + +.waitMasterLinkAttempt + ldio a,[$ff02] + and $80 + jr nz,.waitMasterLinkAttempt + + ;see what we got + ldio a,[$ff01] + cp $aa + jr nz,.afterLinkAttempt + + ;found a Slave! That means I'm the Master! + ld a,EXTCLK ;switch to receive mode + ldio [$ff02],a + ld a,1 + ld [amLinkMaster],a + ld [lastLinkAction],a + +.afterLinkAttempt + ld a,[amLinkMaster] + bit 7,a + jr z,.amLinked + + ;no link, convert curInput->curJoy0. + ld a,[curInput0] + call ConvertInput + ld [curInput0],a + ld [curJoy0],a + ld [myJoy],a + xor a + ld [curJoy1],a + ld [curInput1],a + ret + +.amLinked + +IF 0 + ;----every second or so, get the remote machine's + ;----random seed and make sure it matches ours. + ;----Resynchronize the machines if not + ld a,[amLinkMaster] + cp 1 + jr nz,.exchangeBCB ;only master can initiate + + ld a,[updateTimer] ;not time yet + and 31 + cp 31 + jr nz,.exchangeBCB + + ;don't do it if can't join map + ld a,[canJoinMap] + or a + jr z,.exchangeBCB + +.getRandomSeed + ld a,LGETRANDOMSEED ;send the request + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.getRandomSeed ;must repeat + + ;get the actual seed + call ReceiveByte + ld b,a + ld a,[randomLoc] + cp b ;got same in return? + jr z,.exchangeBCB ;continue if yes + + ;on same map? + ld a,[heroesPresent] + cp %11 + jr nz,.exchangeBCB ;not on same map + +.resynchronize + ;resynchronize machines + ld a,LRESYNCHRONIZE + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.resynchronize + LONGCALLNOARGS HostResynchronize +ENDC + +.exchangeBCB + ;----exchange Button Control Bytes with remote machine-------- + ld a,[curInput0] + call EncodeInput + call ExchangeByte + call HandleRemoteInput + jr nz,.exchangeBCB ;must repeat + + ;--Decode Button Control Bytes-------------------------------- + push af ;save remoteInput + ld a,[amLinkMaster] + or a + jr z,.amLinkSlave + + ;I am the master. curInput0->curJoy0, remoteInput->curJoy1 + pop af ;retrieve remoteInput + call DecodeInput + ld [curInput1],a + ld [curJoy1],a + ld a,[curInput0] + call ConvertInput + ld [curInput0],a + ld [curJoy0],a + ld [myJoy],a + ret + +.amLinkSlave + ld a,[curInput0] + call ConvertInput + ld [curInput1],a + ld [curJoy1],a + ld [myJoy],a + + pop af ;retrieve remoteInput + call DecodeInput + ld [curInput0],a + ld [curJoy0],a + ret + +;--------------------------------------------------------------------- +; Routine: ConvertInput +; Argument: a - uncoded button control byte +; Returns: a - converted BCB, same as calling Encode then +; Decode but quicker +; Description: To simulate uncoded->encoded->decoded, forces buttons +; 7:4 to have A/B or Start/Select info but not both +; (A/B has priority). +; Alters: af +;--------------------------------------------------------------------- +ConvertInput: + push bc + + ld b,a ;save original + and %00110000 ;has A/B info? + ld a,b ;restore original + jr z,.done ;if no AB info then conv. complete + and %00111111 ;has AB info; clear out start/sel + +.done + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: EncodeInput +; Argument: a - uncoded button control byte +; 7:st 6:se 5:b 4:a 3:0=DULR +; Returns: a - coded button control byte +; 7=0 +; 6=0 - 5:4 = ba +; =1 - 5:4 = te (start, select) +; 3:0 = DULR +; Alters: af +;--------------------------------------------------------------------- +EncodeInput: + push bc + push hl + + ld b,a ;save original + and %00001111 + ld c,a ;save D-PAD + + ld h,((encodeControlByteTable>>8) & $ff) + ld a,b + swap a + and %00001111 + add (encodeControlByteTable & $ff) + ld l,a + + ld a,[hl] ;get encoded buttons + or c ;combine with D-PAD + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: DecodeInput +; Argument: a - coded Control Byte +; Returns: a - uncoded button Control Byte +; Alters: af +;--------------------------------------------------------------------- +DecodeInput: + push bc + push hl + + ld b,a ;save original + and %00001111 + ld c,a ;save D-PAD + + ld h,((decodeControlByteTable>>8) & $ff) + ld a,b + swap a + and %00000111 + add (decodeControlByteTable & $ff) + ld l,a + + ld a,[hl] ;get decoded buttons + or c ;combine with D-PAD + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: TransmitGameState +; Arguments: none +; Returns: none +; Alters: af +; Description: Transmits relevant game state data to Slave +; Includes hero data so slave's classes will be set +; appropriately +;--------------------------------------------------------------------- +TransmitGameState: + push bc + push hl + + ld hl,.linkBailAddress + xor a + call SetLinkBailOutAddress + + ld hl,gameState + ld bc,5 + xor a ;RAM bank doesn't matter + call TransmitData + + ld hl,levelState + ld bc,256 + ld a,LEVELSTATEBANK + call TransmitData + + ld hl,inventory + ld bc,16 + xor a + call TransmitData + + ld hl,flightCode + ld bc,256 + ld a,FLIGHTCODEBANK + call TransmitData + + ld hl,hero0_data + ld bc,HERODATASIZE * 2 + xor a + call TransmitData + + ld a,[appomattoxMapIndex] + call TransmitByte + + ;send the joinMap + ld a,[joinMap] + call TransmitByte + ld a,[joinMap+1] + call TransmitByte + +.linkBailAddress + ld hl,0 + xor a + call SetLinkBailOutAddress + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: HostSynchronize +; Arguments: none +; Returns: none +; Alters: af +; Description: Transmits relevant map data to Guest +;--------------------------------------------------------------------- +HostResynchronize: + push bc + push hl + jr HostSynchronizeCommon + +HostSynchronize: + push bc + push hl + + ld hl,.nogo + xor a + call SetLinkBailOutAddress + + ld a,1 ;make sure it's looking at 1x1 + ldio [curObjWidthHeight],a + call ReceiveByte ;guest's requested exit direction + ld hl,$0101 ;start looking at (1,1) + call FindExitLocation + xor a ;didn't find it if $0000 + cp h + jr nz,.goAhead + cp l + jr nz,.goAhead + + ;nogo + xor a + call TransmitByte +.nogo + ld hl,0 + xor a + call SetLinkBailOutAddress + + pop hl + pop bc + ret + +.goAhead + call ConvertLocHLToXY + ld a,1 + call TransmitByte + + ldio a,[mapState] ;level state + call TransmitByte + ldio a,[mapState+1] + call TransmitByte + + ;make sure backbuffer doesn't redraw during hero loading + xor a + ldio [backBufferReady],a + + ;activate heroes 0 and 1 + ld a,[hero0_index] + or a + jr nz,.hero0_active + + ld a,1 + ld [hero0_index],a + +.hero0_active + ld a,[hero1_index] + or a + jr nz,.hero1_active + + ld a,1 + ld [hero1_index],a +.hero1_active + call HostExchangeHeroData + + ;set hero 1 to joystick 1 + push hl + ld a,[hero1_type] + ld hl,heroJoyIndex + or [hl] + ld [hl],a + pop hl + + inc hl + ld b,h + ld c,l + PREPLONGCALL .afterSetupHero + LONGCALL PrepSetupHeroBC ;bc is correct hero data +.afterSetupHero + +HostSynchronizeCommon: + xor a + ld [backBufferReady],a + + ;wait on ready signal from guest +.waitReady + call ReceiveByte + cp LSYNCHREADY + jr nz,.waitReady + + ;send all my hero data ;re-send all my hero data + ld hl,hero0_data + ld bc,HERODATASIZE*2 + xor a + call TransmitData + + ld a,[randomLoc] ;current random value/seed + call TransmitByte + + ld a,[heroesIdle] + call TransmitByte + + LONGCALLNOARGS RemoveSpriteObjectsFromMap + + ;----transmit map--------------------------------------------- + ld hl,map + ld bc,4096 + ld a,MAPBANK + call TransmitData + + ;fadeCurPalette + ld hl,fadeCurPalette + ld bc,128 + xor a + call TransmitData + + ;gamePalette + ld hl,gamePalette + ld bc,128 + ld a,FADEBANK + call TransmitData + + ;first 16 bytes of level check RAM + ld hl,levelCheckRAM + ld bc,16 + xor a + call TransmitData + + ;spriteOAMdata + ld hl,spriteOAMBuffer + ld bc,160 + xor a + call TransmitData + + ld hl,headTable ;headTable - linked list head + ld bc,256 + ld a,OBJLISTBANK + call TransmitData + + ld hl,objExists ;objExists, FOF table + ld bc,512 + ld a,OBJLISTBANK + call TransmitCompressedData + + ld a,[numClasses] + call TransmitByte + + ;bc = numClasses times two + 2 + ld a,[numClasses] + ld b,0 + ld c,a + sla c + rl b + inc bc + inc bc + + ld hl,classLookup ;objExists, FOF table + ;ld bc,512 numClasses * 2 + ld a,OBJLISTBANK + call TransmitData + + ld hl,fgTileMap + ld a,[numClasses] + ld b,0 + ld c,a + ld a,OBJLISTBANK + call TransmitData + + ld hl,objClassLookup ;class indices for each obj + ld bc,256 + ld a,OBJLISTBANK + call TransmitData + + ld hl,associatedIndex + ld bc,256 + ld a,OBJLISTBANK + call TransmitData + + ld hl,spritesUsed + ld bc,40 + ld a,OBJLISTBANK + call TransmitCompressedData + + ;---------------transmit used objects------------------------- + ld a,OBJLISTBANK + ld [$ff70],a + ld de,objExists+1 +.transmitUsedObject + ld a,[de] ;is this object used? + or a + jr z,.afterTransmitUsedObject ;not used + + PREPLONGCALL .afterCvtToPtr + ld a,e ;get object index + LONGCALL IndexToPointerHL ;cvt to ptr +.afterCvtToPtr + ld bc,16 + ld a,OBJBANK + call TransmitData + ld a,OBJLISTBANK + ld [$ff70],a + +.afterTransmitUsedObject + inc de + ld a,e + or a + jr nz,.transmitUsedObject + + ld a,[numFreeSprites] + call TransmitByte + + ld a,[firstFreeObj] + call TransmitByte + + ld a,[randomLoc] + call TransmitByte + + ld a,[guardAlarm] + call TransmitByte + + ;ld a,[dialogBank] + ;call TransmitByte + + ld a,[respawnMap] + call TransmitByte + ld a,[respawnMap+1] + call TransmitByte + + ldio a,[mapState] ;level state + call TransmitByte + ldio a,[mapState+1] + call TransmitByte + + ld hl,levelVars + ld bc,64 + xor a ;RAM bank doesn't matter + call TransmitData + + ld hl,musicBank + ld bc,64 + xor a ;RAM bank doesn't matter + call TransmitData + + ld hl,musicStack + ld bc,128 + ld a,MUSICBANK + call TransmitData + + ldio a,[musicEnabled] + call TransmitByte + + LONGCALLNOARGS LinkRemakeLists + +.done + pop hl + pop bc + ret + +HostExchangeHeroData: + ;send out my hero data + ld a,[amLinkMaster] + or a + jr z,.slave_sendHero1_recvHero0 + +.master_sendHero0_recvHero1 + ld hl,hero1_data + push hl + ld hl,hero0_data + jr .setHeroSequence + +.slave_sendHero1_recvHero0 + ld hl,hero0_data + push hl + ld hl,hero1_data + +.setHeroSequence + ;send my hero data + ld bc,HERODATASIZE + xor a + call TransmitData + + ;get remote hero data + pop hl + xor a + call ReceiveData + + ret + + +;--------------------------------------------------------------------- +; Routine: LinkTest +; Arguments: none +; Returns: none +; Alters: af +; Description: Fills 4k of memory with repeating pattern $00-$ff, +; transmits that data to Slave, receives that data +; back, compares it to the original pattern, and +; finally prints out a Debug message of 1 for equal +; or 0 for not equal. +;--------------------------------------------------------------------- +LinkTest: + push bc + push de + push hl + + di + ;fill $d000-$cfff with repeating pattern $00-$ff + ld a,1 + ld [$ff70],a + + ld hl,$d000 + xor a +.fill + ld [hl+],a + inc a + jr nz,.fill + ld a,h + cp $e0 + ld a,0 ;avoid setting z flag here + jr nz,.fill + + ld a,4 +.transfer32k + push af + ld a,1 + ld bc,$1000 + ld hl,$d000 + call TransmitData + + ld a,1 + call ReceiveData + pop af + dec a + jr nz,.transfer32k + + ;compare received data to original pattern + ld b,0 ;comparing to $00 + ld hl,$d000 +.compare + ld a,[hl+] + cp b + jr nz,.notEqual + inc b + ld a,h + cp $e0 + jr nz,.compare + +.equal + xor a + ldio [$ff0f],a + ei + ld a,1 + call DebugVal + jr .infi + +.notEqual + xor a + ldio [$ff0f],a + ei + xor a + call DebugVal + + dec hl + ld a,h + call DebugVal + ld a,l + call DebugVal +di +.infi jr .infi + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GeneratePauseMessage +; Arguments: none +; Returns: none +; Alters: all +; Description: Creates appropriate Pause Message +;--------------------------------------------------------------------- +GeneratePauseMessage: + ld a,[dialogBank] + push af + + ;wait until the backbuffer is blitted +.waitBackBuffer + ldio a,[backBufferReady] + or a + jr z,.canMessWithBackBuffer + + call VWait + jr .waitBackBuffer + +.canMessWithBackBuffer + ;generate gtx at backbuffer+$800 + + ;de = level name index + ld a,[curLevelStateIndex] + ld d,0 + ld e,a ;level index * 2 + sla e + rl d + ld hl,levelNames + add hl,de + ld a,[hl+] + ld e,a + ld a,[hl+] + ld d,a + ld hl,backBuffer + ld a,BANK(levelNames) + ld [dialogBank],a + call ClearGTXLine + call WriteGTXLine + + ;write char name + push hl + push hl + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + ld c,$ff +.findCharIndex + inc c + rrca + bit 7,a + jr z,.findCharIndex + ld a,c + ld hl,heroNames + call .lookupIndexAToHLToDE + pop hl + call ClearGTXLine + call WriteGTXLine + pop hl + + ;write map coordinates + add sp,-24 ;create temporary buffer on stack + push hl + ld hl,[sp+2] + ld d,h + ld e,l + ld [hl],16 ;spaces to center + inc hl + ld [hl],4 ;number of chars + inc hl + ld a,[curLevelStateIndex] + push af + and $f + add 210 ;'A' character + ld [hl+],a + pop af + ld [hl],$f9 ;hyphen + inc hl + swap a + and $f + cp 10 + jr c,.oneDigit + ld [hl],201 ;'1' + inc hl + sub 10 +.oneDigit + add 200 ;get digit '0'-'9' + ld [hl+],a + ld [hl],0 ;blank space may or may not be used + pop hl + push de + call WriteGTXLine ;de is line to write + pop de + + ;write map coordinates if landing zone------------------------ + ld c,2 ;# of items in inventory screen + + push bc ;see if we're at an LZ + ld a,[curLevelStateIndex] + call .getFlightCodeBCFromMapA + pop bc + jr z,.afterWriteCoords + + push hl + ld h,d + ld l,e + ld [hl],8 ;spaces to center + inc hl + ld [hl],4 ;number of chars + inc hl + push bc + ld a,[curLevelStateIndex] + call .getFlightCodeBCFromMapA + call .writeCoordsBC + pop bc + pop hl + call ClearGTXLine + call WriteGTXLine ;de is line to write + inc c +.afterWriteCoords + add sp,24 ;free up temporary stack space + + ;write inventory + call GetFirstInventoryIndex + cp $ff + jr z,.afterWriteInventory + + ;blank line + push af + ld de,blankLine + call ClearGTXLine + call WriteGTXLine + inc c + pop af + + ;remaining inventory +.nextInventoryItem + ld b,a ;obj index in b + push af + push hl + ld hl,itemNames + call .lookupIndexAToHLToDE + pop hl + + inc de + ld a,[de] + dec de + or a + jr z,.skipItem ;an upgrade or something + + call ClearGTXLine + push hl + call WriteGTXLine + + ;write object color + ld a,b + add (itemColors&$ff) + ld e,a + ld a,((itemColors>>8)&$ff) + adc 0 + ld d,a + ld a,[de] + or 8 + pop de + push hl + ld hl,$300 + add hl,de + ld [hl],a + pop hl + inc c +.skipItem + pop af + call GetNextInventoryIndex + cp $ff + jr nz,.nextInventoryItem + +.afterWriteInventory + inc c + ld de,restart_message + call ClearGTXLine + call WriteGTXLine + + ld a,c + ld [backBuffer+63],a ;#lines + + pop af + ld [dialogBank],a + ret + +.getFlightCodeBCFromMapA + ;returns flight code in bc, zflag + push de + push hl + ld de,3 + + ld b,a + ld a,FLIGHTCODEBANK + ldio [$ff70],a + ld hl,flightCode + ld c,[hl] ;number of flight codes + add hl,de ;start at byte 2/3 (map index) +.findFlightCode + ld a,[hl] + cp b + jr z,.getFlightCodeMatch + add hl,de + dec c + jr nz,.findFlightCode + + xor a ;not found + pop hl + pop de + ret + +.getFlightCodeMatch + dec hl + ld b,[hl] + dec hl + ld c,[hl] + pop hl + pop de + ld a,1 + or a + ret + +.lookupIndexAToHLToDE + rlca + add l + ld l,a + ld a,h + adc 0 + ld h,a + ld a,[hl+] + ld d,[hl] + ld e,a + ret + +.writeCoordsBC + ld a,b + swap a + call .writeCoordA + ld a,b + call .writeCoordA + ld a,c + swap a + call .writeCoordA + ld a,c + call .writeCoordA + ret + +.writeCoordA + and $f + add $c0 ;first of 8 coordinate symbols + ld [hl+],a + ret + +restart_message: + GTXSTRINGC "SELECTgoRESTART" +blankLine: + DB 0,0 + +;--------------------------------------------------------------------- +; Routine: CopyMessageDEToHL +; Arguments: de - pointer to message +; hl - pointer to dest +; Returns: none +; Alters: all +; Description: First byte at [de] is number of bytes to copy from +; [de] to [hl]. Must be >= 1! +;--------------------------------------------------------------------- +CopyMessageDEToHL: + ld a,[de] + inc de + ld c,a +.loop ld a,[de] + inc de + ld [hl+],a + dec c + jr nz,.loop + ret + +levelNames: + DW L0000_Name,L0100_Name,L0200_Name,L0300_Name + DW L0400_Name,L0500_Name,L0600_Name,L0700_Name + DW L0800_Name,L0900_Name,L1000_Name,L1100_Name + DW L1200_Name,L1300_Name,L1400_Name,L1500_Name + + DW L0001_Name,L0101_Name,L0201_Name,L0301_Name + DW L0401_Name,L0501_Name,L0601_Name,L0701_Name + DW L0801_Name,L0901_Name,L1001_Name,L1101_Name + DW L1201_Name,L1301_Name,L1401_Name,L1501_Name + + DW L0002_Name,L0102_Name,L0202_Name,L0302_Name + DW L0402_Name,L0502_Name,L0602_Name,L0702_Name + DW L0802_Name,L0902_Name,L1002_Name,L1102_Name + DW L1202_Name,L1302_Name,L1402_Name,L1502_Name + + DW L0003_Name,L0103_Name,L0203_Name,L0303_Name + DW L0403_Name,L0503_Name,L0603_Name,L0703_Name + DW L0803_Name,L0903_Name,L1003_Name,L1103_Name + DW L1203_Name,L1303_Name,L1403_Name,L1503_Name + + DW L0004_Name,L0104_Name,L0204_Name,L0304_Name + DW L0404_Name,L0504_Name,L0604_Name,L0704_Name + DW L0804_Name,L0904_Name,L1004_Name,L1104_Name + DW L1204_Name,L1304_Name,L1404_Name,L1504_Name + + DW L0005_Name,L0105_Name,L0205_Name,L0305_Name + DW L0405_Name,L0505_Name,L0605_Name,L0705_Name + DW L0805_Name,L0905_Name,L1005_Name,L1105_Name + DW L1205_Name,L1305_Name,L1405_Name,L1505_Name + + DW L0006_Name,L0106_Name,L0206_Name,L0306_Name + DW L0406_Name,L0506_Name,L0606_Name,L0706_Name + DW L0806_Name,L0906_Name,L1006_Name,L1106_Name + DW L1206_Name,L1306_Name,L1406_Name,L1506_Name + + DW L0007_Name,L0107_Name,L0207_Name,L0307_Name + DW L0407_Name,L0507_Name,L0607_Name,L0707_Name + DW L0807_Name,L0907_Name,L1007_Name,L1107_Name + DW L1207_Name,L1307_Name,L1407_Name,L1507_Name + + DW L0008_Name,L0108_Name,L0208_Name,L0308_Name + DW L0408_Name,L0508_Name,L0608_Name,L0708_Name + DW L0808_Name,L0908_Name,L1008_Name,L1108_Name + DW L1208_Name,L1308_Name,L1408_Name,L1508_Name + + DW L0009_Name,L0109_Name,L0209_Name,L0309_Name + DW L0409_Name,L0509_Name,L0609_Name,L0709_Name + DW L0809_Name,L0909_Name,L1009_Name,L1109_Name + DW L1209_Name,L1309_Name,L1409_Name,L1509_Name + + DW L0010_Name,L0110_Name,L0210_Name,L0310_Name + DW L0410_Name,L0510_Name,L0610_Name,L0710_Name + DW L0810_Name,L0910_Name,L1010_Name,L1110_Name + DW L1210_Name,L1310_Name,L1410_Name,L1510_Name + + DW L0011_Name,L0111_Name,L0211_Name,L0311_Name + DW L0411_Name,L0511_Name,L0611_Name,L0711_Name + DW L0811_Name,L0911_Name,L1011_Name,L1111_Name + DW L1211_Name,L1311_Name,L1411_Name,L1511_Name + + DW L0012_Name,L0112_Name,L0212_Name,L0312_Name + DW L0412_Name,L0512_Name,L0612_Name,L0712_Name + DW L0812_Name,L0912_Name,L1012_Name,L1112_Name + DW L1212_Name,L1312_Name,L1412_Name,L1512_Name + + DW L0013_Name,L0113_Name,L0213_Name,L0313_Name + DW L0413_Name,L0513_Name,L0613_Name,L0713_Name + DW L0813_Name,L0913_Name,L1013_Name,L1113_Name + DW L1213_Name,L1313_Name,L1413_Name,L1513_Name + + DW L0014_Name,L0114_Name,L0214_Name,L0314_Name + DW L0414_Name,L0514_Name,L0614_Name,L0714_Name + DW L0814_Name,L0914_Name,L1014_Name,L1114_Name + DW L1214_Name,L1314_Name,L1414_Name,L1514_Name + + DW L0015_Name,L0115_Name,L0215_Name,L0315_Name + DW L0415_Name,L0515_Name,L0615_Name,L0715_Name + DW L0815_Name,L0915_Name,L1015_Name,L1115_Name + DW L1215_Name,L1315_Name,L1415_Name,L1515_Name + +L0000_Name: + GTXSTRINGC "THEoHIVE" +L0001_Name: + GTXSTRINGC "MADoBEEoPASS" +L0002_Name: + GTXSTRINGC "BEEoCOUNTRY" +L0003_Name: + GTXSTRINGC "BIGoEDaSoSHEEPoFARM" +L0004_Name: + GTXSTRINGC "HILLoBROTHERSoRANCH" +L0005_Name: + GTXSTRINGC "TRAKKTORoCOUNTRY" +L0006_Name: + GTXSTRINGC "SUNSEToVILLAGE" +L0007_Name: + GTXSTRINGC "CRAZYoCROWoGULCH" +L0008_Name: + GTXSTRINGC "SNEAKYoTREEoVALLEY" +L0009_Name: + GTXSTRINGC "PROVOLONE" +L0010_Name: + GTXSTRINGC "MUENSTER" +L0011_Name: + GTXSTRINGC "HOUSEoOFoSEASONS" +L0012_Name: + GTXSTRINGC "COMMANDoCORE" +L0013_Name: + GTXSTRINGC "ITCHYoTRIGGER" +L0014_Name: + GTXSTRINGC "THEoFAULT" +L0015_Name: + GTXSTRINGC "LOOSEoJARGON" + +L0100_Name: +L0101_Name: +L0102_Name: + GTXSTRINGC "RIVER" +L0103_Name: + GTXSTRINGC "LILoEDaSoSHEEPoFARM" +L0104_Name: + GTXSTRINGC "SPRING" +L0105_Name: + GTXSTRINGC "DARKERoFOREST" +L0106_Name: + GTXSTRINGC "DARKISHoFOREST" +L0107_Name: + GTXSTRINGC "KIDNAPoCORNERoeLZf" +L0108_Name: + GTXSTRINGC "SNAKEoPIToeLZf" +L0109_Name: + GTXSTRINGC "CHEDDAR" +L0110_Name: + GTXSTRINGC "HAVARTI" +L0111_Name: + GTXSTRINGC "GOBLINoPIT" +L0112_Name: + GTXSTRINGC "HIVEoENTRANCE" +L0113_Name: + GTXSTRINGC "FRIENDLYoFIRE" +L0114_Name: + GTXSTRINGC "PATHoOFoSHADOWS" +L0115_Name: + GTXSTRINGC "DOUBLEoENTENDRE" + +L0200_Name: + GTXSTRINGC "FORBIDDENoVILLAGE" +L0201_Name: + GTXSTRINGC "STRANGEoMIST" +L0202_Name: +L0203_Name: +L0204_Name: + GTXSTRINGC "RIVER" +L0205_Name: + GTXSTRINGC "JACOBaSoBRIDGE" +L0206_Name: +L0207_Name: +L0208_Name: +L0209_Name: +L0210_Name: + GTXSTRINGC "RIVER" +L0211_Name: + GTXSTRINGC "THEoBLOWERS" +L0212_Name: + GTXSTRINGC "THEoBELFRY" +L0213_Name: + GTXSTRINGC "CLOSEoQUARTERS" +L0214_Name: + GTXSTRINGC "JAILoBREAK" +L0215_Name: + GTXSTRINGC "BRAINIAC" + +L0300_Name: + GTXSTRINGC "WEIRDoMIST" +L0301_Name: + GTXSTRINGC "ODDoMIST" +L0302_Name: + GTXSTRINGC "BIZARREoMISToeLZf" +L0303_Name: + GTXSTRINGC "MISToGATE" +L0304_Name: + GTXSTRINGC "MUNGAoFUNGA" +L0305_Name: + GTXSTRINGC "TRILINGoBURROW" +L0306_Name: + GTXSTRINGC "TWOoGUNS" +L0307_Name: + GTXSTRINGC "OUTPOSTgoDESOLATION" +L0308_Name: + GTXSTRINGC "DRYoGULCH" +L0309_Name: + GTXSTRINGC "SHOOToOUT" +L0310_Name: + GTXSTRINGC "REDoBENDoeLZf" +L0311_Name: + GTXSTRINGC "HIGHoGROUND" +L0312_Name: + GTXSTRINGC "THEoSTING" +L0313_Name: + GTXSTRINGC "INSOMNIAC" +L0314_Name: + GTXSTRINGC "RUNAWAY" +L0315_Name: + GTXSTRINGC "INSOMNIAC" + +L0400_Name: + GTXSTRINGC "OUTPOSTgoDARKFROST" +L0401_Name: + GTXSTRINGC "PITCHoBLACK" +L0402_Name: + GTXSTRINGC "WYRMoDUSK" +L0403_Name: + GTXSTRINGC "GROMMOLD" +L0404_Name: + GTXSTRINGC "MILDEWoSTIRRING" +L0405_Name: + GTXSTRINGC "WESTGATE" +L0406_Name: + GTXSTRINGC "PIGSoINoAoBLANKET" +L0407_Name: + GTXSTRINGC "BIOS" +L0408_Name: + GTXSTRINGC "HOToVALLEYoOFoDEATH" +L0409_Name: + GTXSTRINGC "TUMBLEWEED" +L0410_Name: + GTXSTRINGC "OUTPOSTgoDRAGON" +L0411_Name: + GTXSTRINGC "THEoCELL" +L0412_Name: + GTXSTRINGC "STONEHEADoHOUSE" +L0413_Name: +L0414_Name: +L0415_Name: + GTXSTRINGC "FGB" + +L0500_Name: + GTXSTRINGC "PENGUINoSMACKDOWN" +L0501_Name: + GTXSTRINGC "WINTER" +L0502_Name: + GTXSTRINGC "CHILLVILLE" +L0503_Name: + GTXSTRINGC "OLDoHOSS" +L0504_Name: + GTXSTRINGC "NORTHGATE" +L0505_Name: + GTXSTRINGC "FLOWERoTOWER" +L0506_Name: + GTXSTRINGC "SOUTHGATE" +L0507_Name: + GTXSTRINGC "WETLANDS" +L0508_Name: + GTXSTRINGC "LAaSHANDAaS" +L0509_Name: + GTXSTRINGC "OUTBACK" +L0510_Name: + GTXSTRINGC "SUMMER" +L0511_Name: +L0512_Name: + GTXSTRINGC "LAaSHANDA" +L0513_Name: +L0514_Name: +L0515_Name: + GTXSTRINGC "FGB" + +L0600_Name: + GTXSTRINGC "ICEoPLAINSoeLZf" +L0601_Name: + GTXSTRINGC "ICEWOLFoRUN" +L0602_Name: + GTXSTRINGC "KINGoCHUBBAaSoHALL" +L0603_Name: + GTXSTRINGC "IGNORANToHILLoPEOPLE" +L0604_Name: + GTXSTRINGC "TOWERoOFoPAIN" +L0605_Name: + GTXSTRINGC "EASTGATE" +L0606_Name: + GTXSTRINGC "ROCKoBOTTOMoBENDeLZf" +L0607_Name: + GTXSTRINGC "SWAMPYaSoLAIR" +L0608_Name: + GTXSTRINGC "GOONoHILL" +L0609_Name: + GTXSTRINGC "LASToRESORT" +L0610_Name: + GTXSTRINGC "BITTERoROCKoPARK" +L0611_Name: +L0612_Name: + GTXSTRINGC "TELEPORToCHAMBER" +L0613_Name: +L0614_Name: +L0615_Name: + GTXSTRINGC "FGB" + +L0700_Name: + GTXSTRINGC "THEoPLANEoOFoNOTHING" +L0701_Name: + GTXSTRINGC "KIWIoKEEP" +L0702_Name: + GTXSTRINGC "BAToCAVE" +L0703_Name: + GTXSTRINGC "UNDERLAKEoCAVERNS" +L0704_Name: + GTXSTRINGC "STONEHEADoCANYONeLZf" +L0705_Name: + GTXSTRINGC "MONKEYoHOLLER" +L0706_Name: + GTXSTRINGC "SWAMPLACE" +L0707_Name: + GTXSTRINGC "THEoBARROWS" +L0708_Name: + GTXSTRINGC "BLACKoSWAMPoPASSAGE" +L0709_Name: + GTXSTRINGC "HERDoLANDS" +L0710_Name: + GTXSTRINGC "DONaToSHOOToTHEoCROC" +L0711_Name: + GTXSTRINGC "SPACEoSTNoAPOCALYPSE" +L0712_Name: + GTXSTRINGC "HICKoLANDINGoeLZf" +L0713_Name: +L0714_Name: +L0715_Name: + GTXSTRINGC "FGB" + +L0800_Name: + GTXSTRINGC "JACOBaSoOTHERoBRIDGE" +L0801_Name: + GTXSTRINGC "KIWIoROAD" +L0802_Name: + GTXSTRINGC "WINDYoPASS" +L0803_Name: + GTXSTRINGC "DJINNoLAKE" +L0804_Name: + GTXSTRINGC "ELDERoROCKoCANYON" +L0805_Name: + GTXSTRINGC "MONKEYoSURPRISE" +L0806_Name: + GTXSTRINGC "SCAREDIEoRUN" +L0807_Name: + GTXSTRINGC "SPIDERoMOORE" +L0808_Name: + GTXSTRINGC "CROUTONoWARoCAMP" +L0809_Name: + GTXSTRINGC "GRAPESHOT" +L0810_Name: + GTXSTRINGC "CROUTONoGRAVESoeLZf" +L0811_Name: + GTXSTRINGC "GOBLINoMODULE" +L0812_Name: + GTXSTRINGC "WARPoZONE" +L0813_Name: +L0814_Name: +L0815_Name: + GTXSTRINGC "FGB" + +L0900_Name: + GTXSTRINGC "OUTPOSTgoDELTA" +L0901_Name: + GTXSTRINGC "CROUTONoSLAVEoCAMP" +L0902_Name: + GTXSTRINGC "WIZARDaSoPASSoeLZf" +L0903_Name: + GTXSTRINGC "CORNVILLE" +L0904_Name: + GTXSTRINGC "SPIDERWEEDoCANYON" +L0905_Name: + GTXSTRINGC "MONKEYoLANDINGoeLZf" +L0906_Name: + GTXSTRINGC "MOOREoGATE" +L0907_Name: + GTXSTRINGC "ARROWHEADoCITY" +L0908_Name: + GTXSTRINGC "CANNONBALL" +L0909_Name: + GTXSTRINGC "CROSSROADS" +L0910_Name: + GTXSTRINGC "WARZONE" +L0911_Name: + GTXSTRINGC "ARTILLERYoMODULE" +L0912_Name: + GTXSTRINGC "MONKEYoHOMEWORLD" +L0913_Name: +L0914_Name: +L0915_Name: + GTXSTRINGC "FGB" + +L1000_Name: + GTXSTRINGC "GYROaSoBASEoCAMPeLZf" +L1001_Name: + GTXSTRINGC "CACTUSoPETE" +L1002_Name: + GTXSTRINGC "OUTPOSTgoDINGLE" +L1003_Name: + GTXSTRINGC "THEoBEACHoeLZf" +L1004_Name: + GTXSTRINGC "PUMPKINoPATCH" +L1005_Name: + GTXSTRINGC "AUTUMN" +L1006_Name: + GTXSTRINGC "OUTPOSTgoDESPAIR" +L1007_Name: + GTXSTRINGC "BUBoANDoJEB" +L1008_Name: + GTXSTRINGC "GRENADIERoGRAVEYARD" +L1009_Name: + GTXSTRINGC "BLACKoMAGIC" +L1010_Name: + GTXSTRINGC "GRENADIERoCASTLE" +L1011_Name: + GTXSTRINGC "DOCKINGoBAY" +L1012_Name: + GTXSTRINGC "MONKEYoLIBRARY" +L1013_Name: +L1014_Name: +L1015_Name: + GTXSTRINGC "FGB" + +L1100_Name: +L1101_Name: +L1102_Name: +L1103_Name: +L1104_Name: +L1105_Name: +L1106_Name: +L1107_Name: +L1108_Name: +L1109_Name: +L1110_Name: + GTXSTRINGC "FGB" +L1111_Name: + GTXSTRINGC "HULKoMODULE" +L1112_Name: + GTXSTRINGC "DUKEaSoDISCO" +L1113_Name: +L1114_Name: +L1115_Name: + +L1200_Name: +L1201_Name: +L1202_Name: +L1203_Name: +L1204_Name: +L1205_Name: +L1206_Name: +L1207_Name: +L1208_Name: +L1209_Name: +L1210_Name: +L1211_Name: + GTXSTRINGC "FGB" +L1212_Name: + GTXSTRINGC "THEoBESToLAIDoPLANS`" +L1213_Name: +L1214_Name: +L1215_Name: + +L1300_Name: + GTXSTRINGC "BCSoAPPOMATTOX" +L1301_Name: + GTXSTRINGC "FGB" +L1302_Name: +L1303_Name: +L1304_Name: +L1305_Name: +L1306_Name: +L1307_Name: +L1308_Name: +L1309_Name: +L1310_Name: +L1311_Name: + GTXSTRINGC "FGB" +L1312_Name: + GTXSTRINGC "GOBLINoCOUNTRY" +L1313_Name: +L1314_Name: +L1315_Name: + +L1400_Name: +L1401_Name: +L1402_Name: +L1403_Name: +L1404_Name: +L1405_Name: +L1406_Name: +L1407_Name: +L1408_Name: +L1409_Name: +L1410_Name: +L1411_Name: + GTXSTRINGC "FGB" +L1412_Name: + GTXSTRINGC "HIGHoNOON" +L1413_Name: +L1414_Name: +L1415_Name: + +L1500_Name: +L1501_Name: +L1502_Name: +L1503_Name: +L1504_Name: + ;THE KIDNAPPING! + DB ((20-STRLEN("THEoKIDNAPPING "))/2),STRLEN("THEoKIDNAPPING ") +COUNTER SET 1 +REPT STRLEN("THEoKIDNAPPING") + DB ((STRSUB("THEoKIDNAPPING",COUNTER,1)+145) & $ff) +COUNTER SET COUNTER+1 +ENDR + DB 237 ;! +L1505_Name: + GTXSTRINGC "FGB" +L1506_Name: +L1507_Name: +L1508_Name: +L1509_Name: +L1510_Name: +L1511_Name: + GTXSTRINGC "FGB" +L1512_Name: + GTXSTRINGC "GENERATORoCORE" +L1513_Name: +L1514_Name: +L1515_Name: + GTXSTRINGC "FGB" + +heroNames: + DW ba_name,bs_name,haiku_name,flour_name,flower_name,grenade_name + +ba_name: + GTXSTRING "BA" +bs_name: + GTXSTRING "BS" +haiku_name: + GTXSTRING "HAIKU" +flour_name: + GTXSTRING "CAPTAINoFLOUR" +flower_name: + GTXSTRING "LADYoFLOWER" +grenade_name: + GTXSTRING "KINGoGRENADE" + +itemNames: + DW item000_Name,item001_Name,item002_Name,item003_Name,item004_Name + DW item005_Name,item006_Name,item007_Name,item008_Name,item009_Name + DW item010_Name,item011_Name,item012_Name,item013_Name,item014_Name + DW item015_Name,item016_Name,item017_Name,item018_Name,item019_Name + DW item020_Name,item021_Name,item022_Name + +itemColors: + DB 1,1,0,0,0,0,0,1,3,1 ; 0- 9 + DB 5,0,0,5,0,0,1,6,5,3 ;10-19 + DB 2,4,5,0,0,0,0,0,0,0 ;20-29 +;0=Grey, 1=Red, 2=Blue, 3=Green, 4=Purple, 5=Yellow, 6=Brown/Orange, 7=Fuscia + +item000_Name: + ITEMSTRING 246,"SNAKEoBITEoKIT" +item001_Name: + ITEMSTRING 254,"SPOREoMASK" +item002_Name: + ;ITEMSTRING 250,"CODE0400" + DB 0,0 +item003_Name: + ;ITEMSTRING 250,"CODE0900" + DB 0,0 +item004_Name: + ;ITEMSTRING 250,"CODE1002" + DB 0,0 +item005_Name: + ;ITEMSTRING 250,"CODE1006" + DB 0,0 +item006_Name: + ;ITEMSTRING 250,"CODE0410" + DB 0,0 +item007_Name: + ITEMSTRING 249,"BAToJUICE" +item008_Name: + ITEMSTRING 248,"SPACEoMONEY" +item009_Name: + ITEMSTRING 247,"SPACEoSODA" +item010_Name: + ITEMSTRING 247,"HONEY" +item011_Name: + ITEMSTRING 254,"WRANGLINGoIRON" +item012_Name: + DB 0,0 ;BS Shoot Fast +item013_Name: + ITEMSTRING 253,"BUGoSPRAY" +item014_Name: + DB 0,0 ;BA High Impact Bullets +item015_Name: + ;ITEMSTRING 250,"CODE0307" + DB 0,0 +item016_Name: + ITEMSTRING 250,"ALPHAoCLEARANCE" +item017_Name: + ITEMSTRING 250,"BETAoCLEARANCE" +item018_Name: + ITEMSTRING 250,"GAMMAoCLEARANCE" +item019_Name: + ITEMSTRING 250,"DELTAoCLEARANCE" +item020_Name: + ITEMSTRING 250,"EPSILONoCLEARANCE" +item021_Name: + ITEMSTRING 250,"ZETAoCLEARANCE" +item022_Name: + ITEMSTRING 251,"APPOMATTOXoKEY" + + +SECTION "MiscSection",ROMX +;--------------------------------------------------------------------- +; Routine: NewAppxLocation +; Arguments: None. +; Returns: none +; Alters: af +; Description: +;--------------------------------------------------------------------- +NewAppxLocation: + push bc + push de + push hl + + ld a,[curLevelStateIndex] + ld b,a + ld a,[appomattoxMapIndex] + cp b + jr nz,.checkAppear + + ;remove appomattox from current map + call ReceiveByte ;new map location + ld [appomattoxMapIndex],a + ld a,190 + ldio [jiggleDuration],a + + call FindFirstLight ;remove appx + ld c,a ;invisible wall index + ld d,0 + ld a,[mapPitch] + ld e,a + ld a,b ;light index + call .drawLightRowTop + call .drawLightRowMiddle + call .drawLightRowMiddle + call .drawLightRowMiddle + call .drawLightRowMiddle + call .drawLightRowBottom + + ld hl,EngineSound + call PlaySound + + ;link up exit to $4040 (+0 +0) + ld hl,mapExitLinks+EXIT_U*2 + ld a,$40 + ld [hl+],a + ld [hl],a + + jr .done + +.checkAppear + call ReceiveByte ;new map location + ld [appomattoxMapIndex],a + cp b ;appearing on my map + jr nz,.checkInAppx + + ;place appomattox on current map + ld a,190 + ldio [jiggleDuration],a + + call AddAppomattox + ld hl,EngineSound + call PlaySound + + jr .done + +.checkInAppx + ld a,b + cp $0d + jr nz,.checkAtAppxControls + + ;I'm inside the Appomattox! + ld a,190 + ldio [jiggleDuration],a + + ld hl,EngineSound + call PlaySound + + ld a,[appomattoxMapIndex] + or a + jr nz,.landing + +.takingOff + ;link down exit to $4040 (+0 +0) + ld hl,mapExitLinks+EXIT_D*2 + ld a,$40 + ld [hl+],a + ld [hl],a + jr .done + +.landing + ;convert map index to 16-bit BCD index + ld b,a + and %1111 + call NumberToBCD + ld d,a + ld a,b + swap a + and %1111 + call NumberToBCD + ld e,a + + ld hl,mapExitLinks+EXIT_D*2 + ld [hl],e + inc hl + ld [hl],d + jr .done + +.checkAtAppxControls + ;if I was at the controls when my buddy took off, kick me off + cp $1e + jr nz,.done + + ld hl,EngineSound + call PlaySound + + ld a,$ff + ld [levelVars+6],a ;VAR_SELSTAGE in $1401 + +.done + pop hl + pop de + pop bc + ret + +.drawLightRowTop + push hl + ld [hl+],a + inc a + ld [hl+],a + inc a + ld [hl+],a + inc a + ld [hl+],a + sub 3 + pop hl + add hl,de + ret + +.drawLightRowMiddle + push hl + push af + sub b + add 3 + and 3 + add b + ld [hl+],a + ;xor a + ld a,c + ld [hl+],a + ld [hl+],a + pop af + ld [hl+],a + sub b + add 3 + and 3 + add b + pop hl + add hl,de + ret + +.drawLightRowBottom + push hl + add 3 + ld [hl+],a + dec a + ld [hl+],a + dec a + ld [hl+],a + dec a + ld [hl+],a + dec a + pop hl + add hl,de + ret + +FindFirstLight: + ;leaves hl at mem location of first landing light + ;b = first light index, c=first appx index + ;a = invisible wall index + ;must exist or infinite loop! + ld bc,classInvisibleWallBG + call FindClassIndex + + push af + ld bc,classLandingLightsBG + call FindClassIndex + ld b,a ;index to look for + + push bc + ld bc,classAppomattoxBG + call FindClassIndex + pop bc + ld c,a + + ld a,MAPBANK + ld [$ff70],a + + ;setup de with first out-of-bounds index + ;ld a,[mapTotalSize] + ;ld e,a + ;ld a,[mapTotalSize+1] + ;ld d,a + + ld hl,map +.lookForFirstLight + ld a,[hl+] + cp b + jr nz,.lookForFirstLight + + dec hl + pop af + + ret + +AddAppomattoxIfPresent:: + push bc + ld a,[curLevelStateIndex] + ld b,a + ld a,[appomattoxMapIndex] + cp b + jr nz,.done + + call AddAppomattox + +.done + pop bc + ret + +EngineSound: + DB 4,$00,$d7,$a9,$80 + +AddAppomattox: + push bc + push de + push hl + + call FindFirstLight ;draw appx + ld d,0 + ld a,[mapPitch] + ld e,a + ld a,c ;appx index + call .drawAppxMiddle + call .drawAppxMiddle + call .drawAppxMiddle + call .drawAppxRow + call .drawAppxRow + call .drawAppxRow + + ;link exit up to $1300 (appomattox interior) + ld hl,mapExitLinks+EXIT_U*2 + xor a + ld [hl+],a + ld [hl],$13 + + pop hl + pop de + pop bc + ret + +.drawAppxMiddle + push hl + inc hl + inc a + ld [hl+],a + inc a + ld [hl],a + add 2 + pop hl + add hl,de + ret + +.drawAppxRow + push hl + ld [hl+],a + inc a + ld [hl+],a + inc a + ld [hl+],a + inc a + ld [hl],a + inc a + pop hl + add hl,de + + ret + +;WARNING not in HOME section + +;--------------------------------------------------------------------- +; Variables +;--------------------------------------------------------------------- +SECTION "UserVarsHRAM",HRAM +vblankFlag: DS 1 ;0=no interrupt, 1=vblank +vblankTemp: DS 1 +vblankTimer:: DS 1 +vblanksPerUpdate: DS 1 +backBufferReady:: DS 1 +backBufferDestHighByte:: DS 1 +paletteBufferReady:: DS 1 +dmaLoad:: DS 1 ;1=load bank 0, 2=load bank 1 +randomLoc:: DS 1 ;ff92 +jiggleDuration:: DS 1 ;ff93 +temp:: DS 1 ;ff94 +drawMapTemp:: DS 2 ;ff95 +hblankFlag:: DS 1 ;ff97 :0 top/bottom, :1 show, :2 wave +hblankWinOn:: DS 1 ;ff98 +hblankWinOff:: DS 1 ;ff99 +firstMonster:: DS 1 ;ff9a +curROMBank:: DS 1 ;ff9b +updateTimer:: DS 1 ;ff9c +curObjWidthHeight:: DS 1 ;7:4 width, 3:0 height +scrollSpeed:: DS 1 ;7:4 fast speed (0,2,4,8) 3:0 slow speed +mapState:: DS 2 ;ff9f +transmitACK:: DS 1 ;ffa1 +musicEnabled:: DS 1 ;ffa2 +baseHorizontalOffset: DS 1 ;ffa3 + +samplePlaying: DS 1 ;ffa4 +sampleBank: DS 1 ;ffa5 +sampleAddress: DS 2 ;ffa6 +sampleMask: DS 1 ;ffa8 +jiggleType:: DS 1 ;ffa9 +asyncRandLoc:: DS 1 ;ffaa + + +IF 0 +;clear memory to ff +ld hl,$c000 +ld bc,$0f00 +;ld d,$ff +ld d,0 +xor a +call MemSet + +ld hl,$d000 +ld bc,$1000 +ld a,1 +call MemSet + +ld hl,$d000 +ld bc,$1000 +ld a,2 +call MemSet + +ld hl,$d000 +ld bc,$1000 +ld a,3 +call MemSet + +ld hl,$d000 +ld bc,$1000 +ld a,4 +call MemSet + +ld hl,$d000 +ld bc,$1000 +ld a,5 +call MemSet + +ld hl,$d000 +ld bc,$1000 +ld a,6 +call MemSet + +ld hl,$d000 +ld bc,$0020 +ld a,7 +call MemSet + +ld d,0 +ld hl,$d020 +ld bc,$0fe0 +ld a,7 +call MemSet +ENDC + diff --git a/Source/cinema.asm b/Source/cinema.asm new file mode 100644 index 0000000..5a647be --- /dev/null +++ b/Source/cinema.asm @@ -0,0 +1,1693 @@ +;------------------------------------------------------------------------ +; cinema.asm +; 1-5-2000 by Martin Casado +; 4.27.2000 by Abe Pralle +; +; Description: Routines to handle drawing and minipulating cinema +; tiles and sprites +; +; Contents: +; LoadCinemaBG +; LoadCinemaSprite +; LoadCinemaTextBox +;------------------------------------------------------------------------ + +INCLUDE "Source/defs.inc" + +FIRST_TEXTBOX_TILE EQU 136 + +SECTION "Cinema",ROM0 + +;--------------------------------------------------------------------- +; Routine: LoadCinemaBG +; Arguments: a - bank containing data +; hl - addr of .bg data to load +; Alters: af +; Description: Uses DMA to load in new tile patterns, then loads +; in tile layout data into tileShadowBuffer and +; attributeShadowBuffer +;--------------------------------------------------------------------- +LoadCinemaBG:: + push bc + push de + push hl + + ld de,$9000 + call LoadTileDefs + + ld a,[hl+] + ld [mapWidth],a + + ld b,a + ld a,1 +.findPitch + rlca + cp b + jr c,.findPitch + ld [mapPitch],a + + ld a,[hl+] + ld [mapHeight],a + + call SetupMapVarsFromWidthPitchAndHeight + push hl + ld hl,mapMaxLeft + inc [hl] + ld hl,mapMaxTop + inc [hl] + pop hl + + ;load tile indices + ld a,TILESHADOWBANK + ld [$ff70],a + + call CinemaCommonClearBank + + ld de,tileShadowBuffer + + ld a,[mapHeight] + ld b,a + +.tileIndexOuter + ld a,[mapWidth] + ld c,a + +.tileIndexInner + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.tileIndexInner + + ;skip remaining pitch + call CinemaCommonSkipPitch + + dec b + jr nz,.tileIndexOuter + + + ;load tile attributes (packed 2:1 per byte) + ld a,ATTRSHADOWBANK + ld [$ff70],a + + call CinemaCommonClearBank + + ld de,attributeShadowBuffer + + ld a,[mapHeight] + ld b,a + +.tileAttrOuter + ld a,[mapWidth] + srl a + ld c,a + +.tileAttrInner + ld a,[hl+] + push af + swap a + and %00001111 + ld [de],a + inc de + pop af + and %00001111 + ld [de],a + inc de + dec c + jr nz,.tileAttrInner + + ;skip remaining pitch + call CinemaCommonSkipPitch + + dec b + jr nz,.tileAttrOuter + + ld a,0 + call LoadCinemaPalette + +.done + ld a,OBJROM + call SetActiveROM + + call PrepareForInitialMapDraw + + ;call VWait + ld a,1 ;necessary though I'm not sure why!! + call Delay + + pop hl + pop de + pop bc + ret + +CinemaCommonClearBank: + push hl + ld hl,map +.clearBankLoop + xor a + ld [hl+],a + ld a,h + cp $e0 + jr c,.clearBankLoop + + pop hl + ret + +CinemaCommonSkipPitch: + push hl + ld a,[mapSkip] + ld l,a + ld h,0 + add hl,de + ld d,h + ld e,l + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: LoadCinemaSprite +; Arguments: a - bank containing data +; hl - addr of .sp data to load +; Alters: af +; Description: Uses DMA to load in new sprite patterns, then loads +; in metasprite layout data into spriteOAMBuffer +;--------------------------------------------------------------------- +LoadCinemaSprite:: + push bc + push de + push hl + + ld de,$8000 + call LoadTileDefs + + ;switch to 8x16 sprites + ld a,[$ff40] + or %00000100 + ld [$ff40],a + + ;load oam definitions + inc hl ;discard width, pitch, and height + inc hl + inc hl + + ld a,[hl+] ;num sprites + ld c,a + +.loadSprite + call AllocateSprite + cp $ff + jr z,.noSpritesLeft + + ld d,((spriteOAMBuffer>>8) & $ff) + ld e,a + ld a,[hl+] ;y position + ld [de],a + inc de + ld a,[hl+] ;x position + ld [de],a + inc de + ld a,[hl+] ;tile index + ld [de],a + inc de + ld a,[hl+] ;attributes + ld [de],a + + dec c + jr nz,.loadSprite + jr .loadPalette + + +.noSpritesLeft + inc hl + inc hl + inc hl + inc hl + dec c + jr nz,.noSpritesLeft + +.loadPalette + ld a,64 + call LoadCinemaPalette + +.done + ld a,OBJROM + call SetActiveROM + + ;necessary (for loadbg) though I'm not sure why!! + call VWait + ;ld a,1 + ;call Delay + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: LoadTileDefs +; Arguments: a - bank containing data +; de - starting location to load tile patterns into, +; e.g. $9000 for backgrounds or $8000 for sprites. +; hl - addr of .bg or .sp data to load +; Alters: af, hl +; Description: Does some setup work for either Cinema backgrounds OR +; Cinema sprites then uses DMA to load in new tile or +; sprite patterns +;--------------------------------------------------------------------- +LoadTileDefs: + push bc + push de + + call SetActiveROM + ld a,1 + ld [displayType],a + + ;replace HBlank handler if default one + ld a,[hblankVector+1] + cp (OnHBlank & $ff) + jr nz,.afterInstallHandler + ld a,[hblankVector+2] + cp ((OnHBlank>>8) & $ff) + jr nz,.afterInstallHandler + +.replaceHandler + push hl + ld hl,CinemaOnHBlank + call InstallHBlankHandler + pop hl +.afterInstallHandler + + ;xor a + ;ld [levelCheckSkip],a + ;ld [levelCheckSkip+1],a + + ;ensure VBlank interrupt is enabled and interrupts are enabled + ldio a,[$ffff] + or %11 + ldio [$ffff],a + ei + + ;turn LCD on + ld a,[$ff40] + or a,%11000011 + ld [$ff40], a ;lcdc control + + ;indicate we've settled in + xor a + ld [amChangingMap],a + + ld a,[hl+] ;bank zero tiles exist? + or a + jr z,.checkBank1Tiles + + ld a,[hl+] ;number of bank zero tiles + ld b,a + call .copyTilesToMapRAM ;copy to buffer to ensure alignment + xor a + call .loadTiles + +.checkBank1Tiles + ld a,[hl+] ;bank one tiles exist? + or a + jr z,.loadLayout + ld a,[hl+] ;number of bank one tiles + ld b,a + call .copyTilesToMapRAM ;copy to buffer to ensure alignment + ld a,1 + call .loadTiles + +.loadLayout + ;switch back to VRAM bank 0 + xor a + ld [$ff4f],a + + pop de + pop bc + ret + +.copyTilesToMapRAM + push de + push bc + + ld a,MAPBANK + ld [$ff70],a + ld de,map + +.copyTilesOuter + ld c,16 + +.copyTilesInner + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.copyTilesInner + + dec b + jr nz,.copyTilesOuter + + pop bc + pop de + ret + +.loadTiles + ;load sets of 64 tiles and then leftover + push bc + push de + push hl + push af ;save bank + + ld hl,map + +.continueLoadTiles + ld a,b + or a ;zero equivalent to 256 in this case + jr z,.gt_64_bank + cp 65 ;<=64 tiles left? + jr nc,.gt_64_bank + + ld c,b ;# of tiles IS # of sets of 16 + jr .got_loadsize + +.gt_64_bank + ld c,64 ;load 64 tiles + +.got_loadsize + pop af ;retrieve bank + push af ;save bank again + call DMALoad + + ;push bc + ;push de + ;push hl + ;call GetInput + ;pop hl + ;pop de + ;pop bc + + ;subtract from count tiles we took care of + ld a,b + sub c + jr z,.loadTilesDone + ld b,a + + ;advance source + push de + ld de,1024 + add hl,de + pop de + + ;advance destination + push hl + ld hl,1024 + add hl,de + ld d,h + ld e,l + pop hl + + ;if >= $9800 then wrap to $8800 + ld a,d + cp $98 + jr c,.continueLoadTiles + + sub $10 + ld d,a + + jr .continueLoadTiles + +.loadTilesDone + pop af + pop hl + pop de + pop bc + + ret + +;--------------------------------------------------------------------- +; Routine: LoadCinemaPalette +; Arguments: a - byte offset to load into (e.g. 0 for tile +; palette, 64 for sprite palette, 56 for text box +; palette) +; (32-63) +; hl - addr of palette data to load (expecting +; spec, lobyte, hibyte triplets) +; Alters: af, hl +; Description: Loads the specified palette into GamePalette using +; the spec byte to calculate where to store +;--------------------------------------------------------------------- +LoadCinemaPalette: + push bc + push de + + ld b,a ;b is offset for bg or sprite palette + ld a,FADEBANK + ld [$ff70],a + + ;load palette into [gamePalette] + ld a,[hl+] ;num colors + ld c,a + +.loadPalette + ld d,((gamePalette>>8) & $ff) + ld a,[hl+] ;read spec & determine correct pos + and 63 + add b + add (gamePalette & $ff) + ld e,a + + ld a,[hl+] ;low byte of color + ld [de],a + inc de + ld a,[hl+] ;high byte of color + ld [de],a + inc de + dec c + jr nz,.loadPalette + + pop de + pop hl + ret + + +;--------------------------------------------------------------------- +; Routine: LoadCinemaTextBox +; Arguments: a - bank containing data +; hl - addr of .bg data to load +; Alters: af +; Description: Loads in normal BG file with the following +; alterations: +; - tile map size should be 20x6 +; - loads tile defs to $8880 e.g. 136-255 (overwriting +; font) +; - adds 136 to each tile index +; - loads the tile map to $9c00 +; - palette is loaded to gamePalette colors 28-31 +; regardless +; - of original index values +;--------------------------------------------------------------------- +LoadCinemaTextBox:: + push bc + push de + push hl + + ld de,$8880 + call LoadTileDefs + + ld a,[hl+] ;discard tile width (should be 20) + ld a,[hl+] ;discard tile height (should be 6) + + ;load tile indices + ld de,backBuffer + + ld b,6 ;height loop + +.tileIndexOuter + ld c,20 ;width loop + +.tileIndexInner + ld a,[hl+] + add a,FIRST_TEXTBOX_TILE + ld [de],a + inc de + dec c + jr nz,.tileIndexInner + + ;skip remaining pitch (32-20 = 12) + push hl + ld hl,12 + add hl,de + ld d,h + ld e,l + pop hl + + dec b + jr nz,.tileIndexOuter + + + ;load tile attributes (packed 2:1 per byte) + ld de,attributeBuffer + + ld b,6 ;height loop + +.tileAttrOuter + ld c,10 ;width loop (20 tiles / 2 attr per tile) + +.tileAttrInner + ld a,[hl+] + push af + swap a + and %00001111 + or %00000111 ;make palette 7 + ld [de],a + inc de + pop af + and %00001111 + or %00000111 ;make palette 7 + ld [de],a + inc de + dec c + jr nz,.tileAttrInner + + ;skip remaining pitch (32-20 = 12) + push hl + ld hl,12 + add hl,de + ld d,h + ld e,l + pop hl + + dec b + jr nz,.tileAttrOuter + + ld a,56 ;load palette 0 as palette 7 (colors 0-3 to 28-31) + call LoadCinemaPalette + +.done + ld a,OBJROM + call SetActiveROM + + call GfxBlitBackBufferToWindow + + ;necessary (for loadbg) though I'm not sure why!! + call VWait + ;ld a,1 ;necessary (for loadbg) though I'm not sure why!! + ;call Delay + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CinemaBlitRect +; Arguments: bc - tile width, height to copy +; de - dest tile (i,j) to blit to +; hl - source tile (i,j) to blit from +; Alters: af +; Description: Copies tiles from the tileShadowBuffer and the +; attributeShadowBuffer from one place to another +;--------------------------------------------------------------------- +CinemaBlitRect:: + push bc + push de + push hl + + ;get destination address (tileShadowBuffer + j*pitch + i) + push hl + ld h,d + ld l,e + call ConvertXYToLocHL + ld d,h + ld e,l + pop hl + + ;get start address + call ConvertXYToLocHL + + ;blit the tile indices + ld a,TILESHADOWBANK + ld [$ff70],a + call .blitSubroutine + + ;switch to attributes and copy those too + ld a,ATTRSHADOWBANK + ld [$ff70],a + call .blitSubroutine + + pop hl + pop de + pop bc + ret + +.blitSubroutine + ;hl source, de dest, bc width & height + push bc + push de + push hl + +.outer ;copy a row + push bc ;save width & height + push hl ;save source start + push de ;save dest start + +.inner ;copy a byte + ld a,[hl+] + ld [de],a + inc de + dec b + jr nz,.inner + + pop de ;retrieve dest start & add pitch to it + ld h,0 + ld a,[mapPitch] + ld l,a + add hl,de + ld d,h + ld e,l + + pop hl ;retrieve source start & add pitch to it + push de + ld d,0 + ld e,a ;a set above + add hl,de + pop de + + pop bc ;retrieve width & height + dec c ;one more row taken care of + jr nz,.outer + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CinemaSpotAnimationRandomHorizontalFrames +; Arguments: a - number of possible frames +; bc - metatile width, height to copy +; de - dest metatile (i,j) to blit to +; hl - corner of first source metatile (i,j) blit from +; Alters: af +; Description: Picks a new random frame and blits it to the image. +;--------------------------------------------------------------------- +CinemaSpotAnimationRandomHorizontalFrames:: + push bc + push hl + + ;pick a random frame + dec a + call GetRandomNumZeroToN + + ;scoot source over by (numframe * width of one frame) + push bc + ld c,a + xor a +.timesWidth + add b + dec c + jr nz,.timesWidth + add h + ld h,a + pop bc + + call CinemaBlitRect + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CinemaSpotAnimationRandomVerticalFrames +; Arguments: a - number of possible frames +; bc - metatile width, height to copy +; de - dest metatile (i,j) to blit to +; hl - corner of first source metatile (i,j) blit from +; Alters: af +; Description: Picks a new random frame and blits it to the image. +;--------------------------------------------------------------------- +CinemaSpotAnimationRandomVerticalFrames:: + push bc + push hl + + ;pick a random frame + dec a + call GetRandomNumZeroToN + + ;scoot source down by (numframe * height of one frame) + push bc + ld b,a + xor a +.timesWidth + add c + dec b + jr nz,.timesWidth + add l + ld l,a + pop bc + + call CinemaBlitRect + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routines: StdWaitDialog +; StdWaitDialogNoClear +; Arguments: a - desired next state after dialog +; Alters: af,hl +;--------------------------------------------------------------------- +StdWaitDialogNoClear:: + push hl + ld hl,dialogSettings + set DLG_NOCLEAR_BIT,[hl] + pop hl +StdWaitDialog:: + ld a,h + ldio [mapState+1],a + ld a,l + ldio [mapState],a + call SaveIdle + ret + +;--------------------------------------------------------------------- +SECTION "CharacterAnimationCode",ROMX +;--------------------------------------------------------------------- + +;--------------------------------------------------------------------- +; Routines: AnimateSkippy +; AnimateFlour +; AnimateFlourDriving +; AnimateBA +; AnimateBS +; AnimateHaiku +; AnimateBRAINIAC +; Arguments: d - duration (roughly d*100 60ths or d*1.6 sec) +;--------------------------------------------------------------------- +AnimateSkippy:: + ld b,d +.skippyEyes + ld c,10 + +.skippyTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 3 + ld a,3 + jr nc,.animateSkippyMouth + ld a,1 + +.animateSkippyMouth + ;animate mouth + ld bc,$0402 + ld de,$0609 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec c + jr nz,.skippyTalk + + ;animate eyes + push bc + ld a,5 + ld bc,$0403 + ld de,$0606 + ld hl,$1402 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.skippyEyes + + ;open eyes at end + ld a,1 + ld bc,$0403 + ld de,$0606 + ld hl,$1402 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +AnimateFlour:: + ld b,d +.flourEyes + ld c,10 + +.flourTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 1 + ld a,4 + jr nz,.animateFlourMouth + ld a,1 + +.animateFlourMouth + ;animate mouth + ld bc,$0502 + ld de,$0906 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.flourTalk + + ;animate eyes + push bc + ld a,3 + ld bc,$0603 + ld de,$0903 + ld hl,$1900 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.flourEyes + + ;open eyes at end + ld a,1 + ld bc,$0603 + ld de,$0903 + ld hl,$1900 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +AnimateFlourDriving:: + ld b,1 +.flourEyes + ld a,d ;c=d*10 + rlca + rlca + rlca + add d + add d + ld c,a + +.flourTalk + push bc + ld a,5 + call Delay + + ld a,c + cp 1 + ld a,6 + jr nz,.animateFlourMouth + ld a,1 + +.animateFlourMouth + ;animate mouth + ld bc,$0604 + ld de,$0703 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec c + jr nz,.flourTalk + + dec b + jr nz,.flourEyes + + ;open eyes at end + ld a,1 + ld bc,$0604 + ld de,$0703 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + ld a,10 + call Delay + ret + +AnimateBA:: + ld b,1 + + ld a,d ;c=d*10 + rlca + rlca + rlca + add d + add d + ld c,a + +.baEyes + push bc + ld a,5 + call Delay + + ld a,c + cp 1 + ld a,3 + jr nz,.animateFrames + ld a,1 + +.animateFrames + ;animate mouth + ld bc,$0702 + ld de,$0604 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.baEyes + + ;open eyes at end + ld a,1 + ld bc,$0702 + ld de,$0604 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +AnimateBS:: + ld b,1 + + ld a,d ;c=d*10 + rlca + rlca + rlca + add d + add d + ld c,a + +.bsEyes + push bc + ld a,5 + call Delay + + ld a,c + cp 1 + ld a,3 + jr nz,.animateFrames + ld a,1 + +.animateFrames + ;animate mouth + ld bc,$0401 + ld de,$0604 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.bsEyes + + ;open eyes at end + ld a,1 + ld bc,$0401 + ld de,$0604 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +AnimateHaiku:: + ld b,21 +.haikuHand + ld c,2 + +.haikuTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 1 + ld a,4 + jr nz,.animateHaikuMouth + ld a,1 + +.animateHaikuMouth + ;animate mouth + ld bc,$0404 + ld de,$0605 + ld hl,$1408 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec c + jr nz,.haikuTalk + + ;animate hand + push bc + ld a,21 + sub b ;frame of hand (1-21) + cp 6 + jr c,.handFrameSet ;1st line 0-5 + sub 6 + cp 6 + jr c,.handFrameSet ;2nd line 0-5 + sub 5 + cp 3 + jr c,.handFrameSet ;2nd line 1-2 + sub 3 + cp 6 + jr c,.handFrameSet ;3rd line 0-5 + xor a ;final, done +.handFrameSet + ;times six + rlca ;times 2 + ld b,a ;b = a*2 + rlca ;times 2 again (a0 * 4) + add b ;a*6 = a*2 + a*4 + add 20 + ld h,a + ld l,0 + ld bc,$0608 + ld de,$0e04 + call CinemaBlitRect + pop bc + dec b + jr nz,.haikuHand + + ld a,40 + call Delay + + ret + +AnimateBRAINIAC:: + ld b,d +.brainiacEyes + ld c,10 + +.brainiacTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 1 + ld a,2 + jr nz,.animate + ld a,1 + +.animate + ;animate mouth + ld bc,$0402 + ld de,$0908 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec c + jr nz,.brainiacTalk + + ;animate eyes + push bc + ld a,4 + ld bc,$0702 + ld de,$0604 + ld hl,$1402 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.brainiacEyes + ret + +AnimateLadyFlower:: + ld b,d +.eyes + ld c,10 + +.talk + push bc + ld a,5 +.animateBeeLoop + call .animateBee + dec a + jr nz,.animateBeeLoop + + ld a,b + cp 1 + ld a,2 + jr nz,.animate + ld a,1 + +.animate + ;animate mouth + ld bc,$0101 + ld de,$0a06 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.talk + + ;animate eyes + push bc + ld a,3 + ld bc,$0302 + ld de,$0904 + ld hl,$1500 + call CinemaSpotAnimationRandomVerticalFrames + + ;animate bg flowers + ld a,2 + ld bc,$0302 + ld de,$0008 + ld hl,$1406 + call CinemaSpotAnimationRandomVerticalFrames + + ld a,2 + ld bc,$0202 + ld de,$0508 + ld hl,$140a + call CinemaSpotAnimationRandomHorizontalFrames + + ld a,2 + ld bc,$0201 + ld de,$020a + ld hl,$140c + call CinemaSpotAnimationRandomHorizontalFrames + + ld a,2 + ld bc,$0202 + ld de,$0f0a + ld hl,$140d + call CinemaSpotAnimationRandomHorizontalFrames + + ld a,2 + ld bc,$0202 + ld de,$1208 + ld hl,$140f + call CinemaSpotAnimationRandomHorizontalFrames + + pop bc + dec b + jr nz,.eyes + ret + +VAR_BEEPOS EQU 0 +.animateBee + push af + push bc + push hl + + ld a,1 + call Delay + + ;bee y position + ld a,[levelVars + VAR_BEEPOS] + add 2 + ld [levelVars + VAR_BEEPOS],a + cp 128 + jr c,.beeDirectionChosen + ld b,a ;a = 255 - a + ld a,255 + sub b +.beeDirectionChosen + sub 64 + rlca ;get sign bit in bit 7 + sra a + sra a + sra a + sra a + + ;adjust y coord + ld hl,spriteOAMBuffer + add 40 + ld [hl],a + ld hl,spriteOAMBuffer+4 + ld [hl],a + + ;adjust animation frame + ldio a,[updateTimer] + rlca + rlca + and %100 + ld hl,spriteOAMBuffer + 2 + ld [hl],a + inc a + inc a + ld hl,spriteOAMBuffer + 6 + ld [hl],a + + pop hl + pop bc + pop af + + ret + +AnimateLadyFlowerDistress:: + ld a,d + and %10000000 + ld b,a + + ld a,d ;c=d*8 + and %01111111 + rlca + rlca + rlca + ld c,a + +.ladyFace + push bc + + bit 7,b + jr z,.afterJiggle + ld a,%111 + call GetRandomNumMask + or a + jr nz,.afterJiggle + + ld a,15 + ldio [jiggleDuration],a + +.afterJiggle + ld a,8 + call Delay + + ld a,c + cp 1 + ld a,4 + jr nz,.animateFrames + ld a,1 + +.animateFrames + ;animate mouth + ld bc,$0506 + ld de,$0702 + ld hl,$1500 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.ladyFace + + ;open eyes at end + ld a,1 + ld bc,$0506 + ld de,$0702 + ld hl,$1500 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +AnimateLadyFlowerRamp:: + ld b,d +.ladyEyes + ld c,10 + +.ladyTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 2 + ld a,2 + jr nc,.animateLadyMouth + ld a,1 + +.animateLadyMouth + ;animate mouth + ld bc,$0202 + ld de,$0806 + ld hl,$250c + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.ladyTalk + + ;animate eyes + push bc + ld a,4 + ld bc,$0403 + ld de,$0703 + ld hl,$2500 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.ladyEyes + + ;open eyes at end + ld a,1 + ld bc,$0403 + ld de,$0703 + ld hl,$2500 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +AnimateCaptainRamp:: + ld b,d +.flourEyes + ld c,10 + +.flourTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 2 + ld a,4 + jr nc,.animateFlour + ld a,1 + +.animateFlour + ;animate mouth + ld bc,$0402 + ld de,$1312 + ld hl,$2009 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.flourTalk + + ;animate eyes + push bc + ld a,3 + ld bc,$0503 + ld de,$130f + ld hl,$2000 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.flourEyes + + ;open eyes at end + ld a,1 + ld bc,$0503 + ld de,$130f + ld hl,$2000 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +AnimateCaptainGunpoint:: + ld a,d + rlca ;frames *8 + rlca + ld b,a +.flourEyes + ld c,3 + +.flourTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 8 + ld a,2 + jr nc,.animateFlour + ld a,1 + +.animateFlour + ;animate mouth + ld bc,$0402 + ld de,$0c06 + ld hl,$1402 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec c + jr nz,.flourTalk + + ;animate eyes + push bc + ld a,2 + ld bc,$0602 + ld de,$0b04 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec b + jr nz,.flourEyes + + ;open eyes at end + ld a,1 + ld bc,$0602 + ld de,$0b04 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + ld a,10 + call Delay + + ret + +AnimatePreacher:: + ld b,1 + + ld a,d ;c=d*10 + rlca + rlca + rlca + add d + add d + ld c,a + +.preacherEyes + push bc + ld a,5 + call Delay + + ld a,c + cp 1 + ld a,2 + jr nz,.animateFrames + ld a,1 + +.animateFrames + ;animate mouth + ld bc,$0302 + ld de,$0906 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.preacherEyes + + ;open eyes at end + ld a,1 + ld bc,$0302 + ld de,$0906 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +AnimateCaptainAtWedding:: + ld b,1 + + ld a,d ;c=d*10 + rlca + rlca + rlca + add d + add d + ld c,a + +.captainEyes + push bc + ld a,5 + call Delay + + ld a,c + cp 1 + ld a,4 + jr nz,.animateFrames + ld a,1 + +.animateFrames + ;animate mouth + ld bc,$0404 + ld de,$0505 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.captainEyes + + ;open eyes at end + ld a,1 + ld bc,$0404 + ld de,$0505 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +AnimateLadyAtWedding:: + ld b,d +.ladyEyes + ld c,10 + +.ladyTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 2 + ld a,2 + jr nc,.animateLadyMouth + ld a,1 + +.animateLadyMouth + ;animate mouth + ld bc,$0202 + ld de,$0b05 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.ladyTalk + + ;animate eyes + push bc + ld a,2 + ld bc,$0402 + ld de,$0a03 + ld hl,$1404 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.ladyEyes + + ;open eyes at end + ld a,1 + ld bc,$0402 + ld de,$0a03 + ld hl,$1404 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +AnimateGyroAtWedding:: + ld b,d + sla b ;b*=4 + sla b +.gyroEyes + ld c,4 + +.gyroTalk + push bc + ld a,3 + call Delay + + ld a,b + cp 8 + ld a,2 + jr nc,.animateGyroMouth + ld a,1 + +.animateGyroMouth + ;animate mouth + ld bc,$0a05 + ld de,$0606 + ld hl,$1800 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.gyroTalk + + ;animate eyes + push bc + ld a,4 + ld bc,$0402 + ld de,$0604 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.gyroEyes + + ;open eyes at end + ld a,1 + ld bc,$0402 + ld de,$0604 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +AnimateGyroOnScreen:: + ld b,d + sla b ;b*=4 + sla b +.gyroEyes + ld c,4 + +.gyroTalk + push bc + ld a,3 + call Delay + + ld a,b + cp 8 + ld a,2 + jr nc,.animateGyroMouth + ld a,1 + +.animateGyroMouth + ;animate mouth + ld bc,$0903 + ld de,$0607 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.gyroTalk + + ;animate eyes + push bc + ld a,3 + ld bc,$0301 + ld de,$0705 + ld hl,$1406 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.gyroEyes + + ;open eyes at end + ld a,1 + ld bc,$0301 + ld de,$0705 + ld hl,$1406 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +AnimateBSDriving:: + ld b,1 + + ld a,d ;c=d*10 + rlca + rlca + rlca + add d + add d + ld c,a + +.bsEyes + push bc + ld a,5 + call Delay + + ld a,c + cp 1 + ld a,3 + jr nz,.animateFrames + ld a,1 + +.animateFrames + ;animate mouth + ld bc,$0402 + ld de,$0803 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.bsEyes + + ;open eyes at end + ld a,1 + ld bc,$0402 + ld de,$0803 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +;***WARNING*** Not HOME Section + diff --git a/Source/class.asm b/Source/class.asm new file mode 100644 index 0000000..65cd1d3 --- /dev/null +++ b/Source/class.asm @@ -0,0 +1,14437 @@ +;1.2.2000 by Abe Pralle +;functions that compose the 'classes' of FGB. +;Each class begins a vector table of jump instructions. + +;Each method call takes the following inputs: +; c - class index +; de - pointer to object + +;The various methods behave as follows: +; redraw - Draws itself and its tile attributes into the shadowbuffers +; update - performs any required AI +; adjusts its own position within the map + +INCLUDE "Source/defs.inc" +INCLUDE "Source/start.inc" +INCLUDE "Source/items.inc" + + +GRENADE_CINDEX EQU 2048+ 12 +WALLCREATURE_CINDEX EQU 2048+ 19 +BEE_CINDEX EQU 2048+ 22 +RECIPROCATOR_POWERUP_CINDEX EQU 2048+ 35 +TRI_CINDEX EQU 2048+ 37 +TRILING_CINDEX EQU 2048+ 39 +BAT_CINDEX EQU 2048+ 45 +BURROWER_CINDEX EQU 2048+ 47 +BURROWER_DIRT_CINDEX EQU 2048+ 49 +DANDELION_CINDEX EQU 2048+ 51 +DANDELIONPUFF_CINDEX EQU 2048+ 52 +SHEEP_CINDEX EQU 2048+ 96 +CHICKEN_CINDEX EQU 2048+ 98 +WOLF_CINDEX EQU 2048+104 +NEANDERTHAL_CINDEX EQU 2048+108 +BOW_CINDEX EQU 2048+146 +CROUTONBULLET_CINDEX EQU 2048+154 +WIZARDBULLET_CINDEX EQU 2048+158 +ARROWBULLET_CINDEX EQU 2048+162 +CROUTONROCKET_CINDEX EQU 2048+164 +COWBOYBULLET_CINDEX EQU 2048+166 +BIGSPIDER_CINDEX EQU 2048+210 +LITTLESPIDER_CINDEX EQU 2048+218 +TCUBE_CINDEX EQU 2048+220 +TCUBE2_CINDEX EQU 2048+224 +B12SOLDIERBULLET_CINDEX EQU 2048+246 +TREEBULLET_CINDEX EQU 2048+253 +STUNNEDWALL_CINDEX EQU 2048+256 +INVISIBLEBAT_CINDEX EQU 2048+258 +SLIME_CINDEX EQU 2048+260 +MONKEY_CINDEX EQU 2048+267 +BANANABULLET_CINDEX EQU 2048+269 +DUKE_CINDEX EQU 2048+271 +PIG_CINDEX EQU 2048+281 +EGG_CINDEX EQU 2048+283 +BLOWER_CINDEX EQU 2048+284 +SLEEPINGMONKEY_CINDEX EQU 2048+286 +BELL_CINDEX EQU 2048+287 +RINGINGBELL_CINDEX EQU 2048+291 +BANANATREE_CINDEX EQU 2048+295 +HERMITINSHELL_CINDEX EQU 2048+301 +CRAB_CINDEX EQU 2048+311 +CRABBURROWING_CINDEX EQU 2048+313 +UBERMOUSE_CINDEX EQU 2048+314 +TURRET_CINDEX EQU 2048+322 +TURRETBULLET_CINDEX EQU 2048+334 +FAKEBA_CINDEX EQU 2048+336 +FAKEBS_CINDEX EQU 2048+338 +FAKEHAIKU_CINDEX EQU 2048+340 +HEROLADY_CINDEX EQU 2048+350 +HEROFLOUR_CINDEX EQU 2048+352 +FLOUR_BULLET_CINDEX EQU 2048+406 +LADY_BULLET_CINDEX EQU 2048+408 + +BA_MAX_HEALTH EQU 20 +BS_MAX_HEALTH EQU 10 +HAIKU_MAX_HEALTH EQU 20 +FLOUR_MAX_HEALTH EQU 40 +LADY_MAX_HEALTH EQU 40 +GRENADE_MAX_HEALTH EQU 30 + +SECTION "ClassTableSection",ROMX +classTable:: ;starts with ptr to FIRSTOBJTILE + ;BG classes + REPT 27 ;0-26 + DW classGenericBG + ENDR + + DW classAppomattoxBG ;27 + + REPT 78 ;28-105 + DW classGenericBG + ENDR + + DW classShiftPlusOneBG ;106 destructable pumpkin + DW classShiftPlusOneBG ;107 destructable pumpkin + DW classShiftPlusOneBG ;108 destructable pumpkin + DW classDestructableBG ;109 destructable pumpkin + + DW classGenericBG ;110 blue thingy + + REPT 9 ;111-119 purple destructable + DW classChangeTo120BG + ENDR + + DW classShiftPlusOneBG ;120 purple destroy stage 1 + DW classShiftPlusOneBG ;121 purple destroy stage 2 + DW classDestructableBG ;122 purple destroy stage 3 + DW classSplitterBG ;123 four-way shot splitter + + REPT 133 ;124-256 + DW classGenericBG + ENDR + + REPT 46 ;257-302 + DW classHiveBG + ENDR + + REPT 588 ;303-890 + DW classGenericBG + ENDR + + DW classNoExplosionBG ;891 grey door + + REPT 181 ;892-1072 + DW classGenericBG + ENDR + + DW classLandingLightsBG ;1073 + + REPT 328 ;1074-1401 + DW classGenericBG + ENDR + + DW classChangeToBigSpiderBG ;TL corner big spider weed + DW classAdjoinWestBG ;big spider weed + DW classAdjoinNorthBG ;big spider weed + DW classAdjoinNorthBG ;big spider weed + DW classChangeToLittleSpiderBG ;small spider weed + + REPT 57 ;1407-1463 + DW classGenericBG + ENDR + + ;1464-1475 destructable shrooms + REPT 12 + DW classDestructableBG + ENDR + + DW classNoExplosionBG ;wall tile + + ;1477-1493 + REPT 17 + DW classGenericBG + ENDR + + ;1494-1511 Destructable foliage + REPT 18 + DW classDestructableBG + ENDR + + DW classEdibleCheeseBG ;1512 edible cheese + DW classCheeseBG ;1513 cheese + DW classCheeseBG ;1514 cheese + DW classCheeseBG ;1515 cheese + DW classCheeseBG ;1516 cheese + DW classCheeseBG ;1517 cheese + DW classCheeseBG ;1518 cheese + DW classCheeseBG ;1519 cheese + DW classCheeseBG ;1520 cheese + DW classCheeseBG ;1521 cheese + DW classCheeseBG ;1522 cheese + DW classCheeseBG ;1523 cheese + DW classCheeseBG ;1524 cheese + DW classCheeseBG ;1525 cheese + DW classCheeseBG ;1526 cheese + DW classCheeseBG ;1527 cheese + DW classCheeseBG ;1528 cheese + DW classCheeseBG ;1529 cheese + DW classCheeseBG ;1530 cheese + DW classCheeseBG ;1531 cheese + DW classCheeseBG ;1532 cheese + DW classInvisibleWallBG ;1533 Invisible Wall + + DW classPorkBG ;1534 Bacon + DW classPorkBG ;1535 Ham + DW classPorkBG ;1536 Sausage + DW classFriedEggBG ;1537 Fried Egg + DW classDrumstickBG ;1538 Drumstick + + ;1539-1571 + REPT 33 + DW classGenericBG + ENDR + + DW classHermitCrabShellBG ;1572 Hermit Crab Shell + DW classBananaBG ;1573 Banana + + ;1574-1642 + REPT 69 + DW classGenericBG + ENDR + + DW classGeneratorBG ;1643 + DW classGeneratorBG + DW classGeneratorBG + DW classGeneratorBG + DW classGeneratorBG + DW classGeneratorBG + DW classGeneratorBG + DW classGeneratorBG + DW classGeneratorBG ;1651 + + DW classSlugTrailBG ;1652 slug trail + + ;1653-1854 + REPT 202 + DW classGenericBG + ENDR + + ;1855-1874 + DW classDestructableBG + DW classDestructableBG + DW classDestructableBG + DW classDestructableBG + DW classDestructableAdjoinRightBG + DW classDestructableAdjoinLeftBG + DW classDestructableAdjoinRightBG + DW classDestructableAdjoinLeftBG + DW classDestructableAdjoinRightBG + DW classDestructableAdjoinLeftBG + DW classDestructableAdjoinRightBG + DW classDestructableAdjoinLeftBG + DW classDestructableAdjoinBottomBG + DW classDestructableAdjoinTopBG + DW classDestructableAdjoinBottomBG + DW classDestructableAdjoinTopBG + DW classDestructableAdjoinBottomBG + DW classDestructableAdjoinTopBG + DW classDestructableAdjoinBottomBG + DW classDestructableAdjoinTopBG + + ;1875-2042 + REPT 168 + DW classGenericBG + ENDR + + DW classClearanceBG + + ;2044-2047 + REPT 4 + DW classGenericBG + ENDR + + ;FG classes + + ;pansies o+0, +2, +4 + REPT 3 + DW classPansy,0 + ENDR + + DW classBAPlayer,0 ;BA +6 + DW classBSPlayer,0 ;BS +8 + + DW classHaikuPlayer, 0 ;+10 Haiku + + DW classGrenade, 0 ;+12 Grenade + DW classGeneric ;+14 old Stunned Wall Creature (unused) + DW classVacuum, 0 ;+15 vacuum + DW classSlug, 0 ;+17 Slug + DW classWallCreature, 0 ;+19 Wall Creature + DW classSmallBeeHive ;+21 small bee hive + + DW classBee, 0 ;+22 bee + + DW classGeneric ;+24 yinyang + DW classGeneric, 0 ;+25 yin + DW classGeneric, 0 ;+27 yang + DW classScaredie, 0 ;+29 scaredie + DW classChomper, 0 ;+31 big mouth (chomper) + DW classReciprocator, 0 ;+33 purple energy dude lo power + DW classReciprocatorPowerup,0 ;+35 purple dude hi power + DW classTri, 0 ;+37 yellow thing + DW classTriling, 0 ;+39 small yellow thing + DW classTree ;+41 tree + DW classBush ;+42 bush + DW classNeedle,0 ;+43 needle thing + DW classBat, 0 ;+45 bat + DW classBurrower,0 ;+47 burrower + DW classBurrowerDirt,0 ;+49 burrower dirt mound + DW classDandelion ;+51 dandelion + DW classDandelionPuff,0 ;+52 dandelion puff + DW classGeneric,0,0,0,0,0,0,0 ;+54 King Grenade + DW classMouse, 0 ;+62 mouse + DW classPenguin, 0 ;+64 penguin + DW classBIOS,0 ;+66 BIOS soldier + DW classGeneric,0,0,0 ;+68 king snake + DW classCroutonHulk,0,0,0,0,0,0,0 ;+72 crouton hulk + DW classCroutonGrunt, 0 ;+80 crouton grunt + + ;BA Bullet +82 + DW classBABullet, 0 + + ;Pansy Bullet +84 + DW classPansyBullet, 0 + + ;Big Long Laser +86 + DW classBigLongLaser, 0 + + DW classLadyFlower, 0 ;Lady Flower +88 +;DW classBSPlayer,0 ;BS +8 + DW classCaptainFlour, 0 ;Captain Flour +90 + DW classBigBeeHive, 0, 0, 0 ;+92 big bee hive + DW classSheep, 0 ;+96 sheep + DW classChicken, 0 ;+98 chicken + DW classPurpleWisp, 0 ;+100 wisp + DW classQuatrain,0 ;+102 quatrain + DW classWolf, 0 ;+104 ice wolf + DW classSnake, 0 ;+106 snake + DW classNeanderthal, 0 ;+108 neanderthal + DW classGeneric,0,0,0,0,0,0,0 ;+110 genie + DW classCrow,0 ;+118 crow + DW classScarecrow,0,0,0,0,0,0,0 ;+120 scarecrow + DW classTalker, 0 ;+128 hermit + DW classTalker, 0 ;+130 grey hermit + DW classGeneric, 0 ;+132 red villager + DW classGeneric, 0 ;+134 blue villager + DW classAlligator,0,0,0,0,0,0,0 ;+136 alligator + DW classScorpion, 0 ;+144 scorpion + DW classBow,0 ;+146 archer + DW classCowboy, 0 ;+148 blue villager + DW classCowboy, 0 ;+150 brown villager + DW classCroutonDoctor, 0 ;+152 doctor crouton / guard + DW classCroutonBullet, 0 ;+154 crouton bullet + DW classCroutonWizard, 0 ;+156 wizard crouton + DW classWizardBullet, 0 ;+158 spiral wizard bullet + DW classGeneric, 0 ;+160 mud? + DW classArrowBullet, 0 ;+162 arrow bullet + DW classRocketBullet, 0 ;+164 rocket bullet + DW classCowboyBullet, 0 ;+166 yellow bolt bullet + DW classGeneric, 0 ;+168 purple sparkley bullet + DW classBSBullet, 0 ;+170 bs bullet + DW classCroutonGoblin, 0 ;+172 goblin crouton + DW classGeneralGyro,0,0,0,0,0,0,0 ;+174 General Gyro + DW classCroutonArtillery,0,0,0,0,0,0,0 ;+182 artillery tank crouton + DW classGeneric,0,0,0,0,0,0,0 ;+190 stabbing tank crouton + DW classMajorSkippy,0,0,0,0,0,0,0 ;+198 Major Skippy + DW classBAPlayer,0 ;+206 RA + DW classBSPlayer,0 ;+208 CS + DW classBigSpider,0,0,0,0,0,0,0 ;+210 Big Spider + DW classLittleSpider,0 ;+218 Little Spider + DW classTeleportCube,0,0,0 ;+220 Teleport Field + DW classTeleportCube2,0,0,0 ;+224 Teleport Field + DW classDandelionGuard,0 ;+228 Dandelion guard + DW classB12Soldier,0 ;+230 Purple Soldier + DW classB12Soldier,0 ;+232 Grey Soldier + DW classB12Soldier,0 ;+234 Yellow Soldier + DW classGeneric,0 ;+236 Orange Specialist + DW classGeneric,0 ;+238 Grey Specialist + DW classGeneric,0 ;+240 Green Specialist + DW classActor,0 ;+242 Red Ninja (Iambic) + DW classHaikuPlayer,0 ;+244 Purple Ninja (Free Verse) + DW classB12SoldierBullet,0 ;+246 B12 Soldier Bullet + DW classGeneric ;+248 bomb thing + DW classGeneric,0,0,0 ;+249 BRAINIAC + DW classTreeBullet,0 ;+253 Tree and bush bullet + DW 0 ;+255 pad + DW classStunnedWall,0 ;+256 Stunned wall creature + DW classInvisibleBat,0 ;+258 Invisible Bat + DW classSlime,0 ;+260 Small slime + + DW classYellowWisp,0 ;+262 Yellow wisp + DW classGeneric ;+264 Immobile armor + DW classGeneric,0 ;+265 Suit of armor + DW classMonkey,0 ;+267 Brown Monkey + DW classBananaBullet,0 ;+269 Bananna bullet + DW classDuke,0,0,0,0,0,0,0 ;+271 Duke the one-armed orangutan + DW classGeneric,0 ;+279 leprechaun + DW classPig,0 ;+281 pig + DW classEgg ;+283 egg + DW classBlower,0 ;+284 Crouton Blower + DW classSleepingMonkey ;+286 Sleeping Monkey + DW classBell,0,0,0 ;+287 Bell + DW classRingingBell,0,0,0 ;+291 Ringing Bell + DW classBananaTree,0,0,0 ;+295 Banana Tree + DW classHermitNoShell,0 ;+299 Hermit Crab, no shell + DW classHermitInShell,0 ;+301 Hermit Crab inside shell + DW classSwampThang,0,0,0,0,0,0,0 ;+303 Swamp Thang + DW classCrab,0 ;+311 Red Crab + DW classCrabBurrowing ;+313 Red Crab Burrowing + DW classUberMouse,0,0,0,0,0,0,0 ;+314 Uber Mouse + DW classTurret,0,0,0 ;+322 Turret + DW classCroutonKing,0,0,0,0,0,0,0 ;+326 Turret Bullet + DW classTurretBullet,0 ;+334 Turret Bullet + DW classActor,0 ;+336 Fake BA + DW classActor,0 ;+338 Fake BS + DW classActor,0 ;+340 Fake Haiku + DW classGrenadePlayer,0,0,0,0,0,0,0 ;+342 Fake King Grenade + DW classHeroLady,0 ;+350 Hero Lady Flower + DW classHeroFlour,0 ;+352 Hero Captain Flour + DW classGeneric,0 ;+354 Disco Dancer + DW classActor,0,0,0 ;+356 Lying Head single 2x2 frame + DW classActor2x2,0,0,0,0,0,0,0 ;+360 Thaddius Pencilbody + DW classActor,0 ;+368 Blue Skull + DW classActor2x2,0,0,0,0,0,0,0 ;+370 Santa + DW classActor2x2,0,0,0,0,0,0,0 ;+378 Queen Bee + DW classActor2x2,0,0,0,0,0,0,0 ;+386 Rocking Horse + DW classActor,0 ;+394 Candy Cane + DW classActor,0 ;+396 Doll + DW classActor2x2,0,0,0,0,0,0,0 ;+398 Reindeer + DW classFlourBullet,0 ;+406 Captain Flour Bullet + DW classLadyBullet,0 ;+408 Hero Lady Flower Bullet + ;DW classLadyBullet,0 ;+410 Hero Lady Flower Bullet + ;DW classLadyBullet,0 ;+412 Hero Lady Flower Bullet + ;DW classLadyBullet,0 ;+414 Hero Lady Flower Bullet + +classDoNothing:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DoNothingCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classDoNothing2:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DoNothingCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classDoNothing3:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DoNothingCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHeroIdle:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW IdleCantDieCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classGeneric:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW GenericCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classTalker:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TalkerCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classActor:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classActor2:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classGuard:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW GuardCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classActorSpeed1:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorSpeed1Check ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classActor2x2:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classPansy:: + DW PansyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW PansyCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHippiePansy:: + DW PansyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW HippiePansyCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classPansyBullet:: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW StdBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBAPlayer:: + DW BAInit + DW StandardRedraw + DW BAPlayerCheck + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBAPlayerSpace:: + DW BAInit + DW StandardRedraw + DW BAPlayerCheckSpace + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBSPlayer:: + DW BSInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BSPlayerCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBSPlayerSpace:: + DW BSInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BSPlayerCheckSpace ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHaikuPlayer:: + DW HaikuInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW HaikuPlayerCheck ;vector for check method + DW HaikuTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHaikuPlayerSpace:: + DW HaikuInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW HaikuPlayerCheckSpace ;vector for check method + DW HaikuTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHeroLady:: + DW LadyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW LadyPlayerCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHeroFlour:: + DW FlourInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW FlourPlayerCheck ;vector for check method + ;DW HaikuTakeDamage ;vector for take damage method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classFlourBullet:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW FlourBulletCheck ;vector for check method + DW HaikuTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classLadyBullet:: + DW LadyBulletInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW LadyBulletCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classGrenadePlayer:: + DW GrenadePlayerInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW GrenadePlayerCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classBSActor:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBee: + DW BeeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BeeCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classStunnedWall:: + DW StunnedWallInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW StunnedWallCheck ;vector for check method + DW WallTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classGrenade: + DW GrenadeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW GrenadeCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classVacuum: + DW VacuumInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW VacuumCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classSlug: + DW SlugInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW SlugCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classWallCreature:: + DW WallCreatureInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW WallCreatureCheck ;vector for check method + DW WallTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classWallTalker:: + DW WallCreatureInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TalkerCheck ;vector for check method + DW WallTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classSmallBeeHive: + DW SmallBeeHiveInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW SmallBeeHiveCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classScaredie: + DW ScardieInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ScardieCheck ;vector for check method + DW ScardieTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classChomper:: + DW ChomperInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ChomperCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classReciprocator: + DW ReciprocatorInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ReciprocatorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classReciprocatorPowerup: + DW ReciprocatorInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ReciprocatorPowerupCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classTri: + DW TriInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TriCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classTriling: + DW TrilingInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TrilingCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classTree:: + DW TreeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TreeCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classTreeTalker:: + DW TreeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TreeTalkerCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBush: + DW BushInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BushCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classNeedle: + DW NeedleInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW NeedleCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBat: + DW BatInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BatCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBurrower: + DW BurrowerInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BurrowerCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBurrowerDirt: + DW BurrowerDirtInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BurrowerDirtCheck ;vector for check method + DW TakeZeroDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classDandelion:: + DW DandelionInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DandelionCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classDandelionPuff: + DW DandelionPuffInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DandelionPuffCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBABullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW BASuperFastBulletCheck + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBigLongLaser:: + DW StdBulletInit ;vector for init method + DW StreamRedraw ;vector for redraw method + DW StreamCheck ;vector for check method + DW DoNothing ;vector for take damage method + DW StreamDie ;vector for die method + +classExplosion:: + DW ExplosionInit ;vector for init method + DW ExplosionRedraw ;vector for redraw method + DW ExplosionCheck ;vector for check method + DW ExplosionCheck ;vector for take damage method + DW ExplosionDie ;vector for die method + +classLadyFlower:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCaptainFlour:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classMouse:: + DW MouseInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW MouseCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classPenguin:: + DW PenguinInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW PenguinCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBIOS:: + DW BIOSInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BIOSCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonHulk:: + DW CroutonHulkInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CroutonHulkCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonGrunt:: + DW CroutonGruntInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CroutonGruntCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBigBeeHive: + DW BigBeeHiveInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BigBeeHiveCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classSheep: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW SheepCheck ;vector for check method + DW CowboyTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classChicken:: + DW ChickenInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ChickenCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classPurpleWisp:: + DW WispInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW WispCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classQuatrain:: + DW QuatrainInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW QuatrainCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classWolf:: + DW WolfInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW WolfCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classSnake:: + DW SnakeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW SnakeCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classNeanderthal:: + DW NeanderthalInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW NeanderthalCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCrow:: + DW CrowInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CrowCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classScarecrow:: + DW ScarecrowInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ScarecrowCheck ;vector for check method + DW ScarecrowTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classAlligator: + DW AlligatorInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW AlligatorCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classWolfSheep:: + DW WolfSheepInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW WolfSheepCheck ;vector for check method + DW WolfSheepTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classScorpion: + DW ScorpionInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ScorpionCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBow: + DW BowInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BowCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCowboy:: + DW CowboyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CowboyCheck ;vector for check method + DW CowboyTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classAngryCowboy:: + DW CowboyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW AngryCowboyCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCowboyTalker:: + DW CowboyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TalkerCheck ;vector for check method + DW CowboyTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonDoctor:: + DW CroutonDoctorInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CroutonDoctorCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW StdBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonWizard:: + DW CroutonWizardInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CroutonWizardCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classWizardBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW WizardBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBSBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method +IF UPGRADES + DW HeroSuperFastBulletCheck +ELSE + ;DW HeroBulletCheck ;vector for check method + DW HeroSuperFastBulletCheck +ENDC + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classArrowBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW StdBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classRocketBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW ExplodingBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCowboyBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW SuperFastBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonGoblin:: + DW CroutonGoblinInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CroutonGoblinCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classGeneralGyro:: + DW GeneralGyroInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonArtillery:: + DW CroutonArtilleryInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CroutonArtilleryCheck;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classMajorSkippy:: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW ActorCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classTeleportCube:: + DW TeleportCubeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TeleportCubeCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classTeleportCube2:: + DW TeleportCubeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TeleportCubeCheck2 ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classDandelionGuard:: + DW DandelionGuardInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DandelionGuardCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classB12Soldier:: + DW B12SoldierInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW B12SoldierCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classB12SoldierBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW StdBulletCheck ;vector for check method + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBigSpider: + DW BigSpiderInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BigSpiderCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classLittleSpider: + DW LittleSpiderInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW LittleSpiderCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classTreeBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW SuperFastBulletCheck + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBushBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW StdBulletCheck + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classInvisibleBat: + DW BatInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW InvisibleBatCheck ;vector for check method + DW InvisibleBatTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classSlime:: + DW SlimeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW SlimeCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classYellowWisp:: + DW WispInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW WispCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classMonkey:: + DW MonkeyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW MonkeyCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBananaBullet: + DW YellowBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW SuperFastBulletCheck + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classDuke: + DW DukeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DukeCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classPig: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW PigCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classEgg:: + DW EggInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW EggCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBlower: + DW BlowerInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BlowerCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classSleepingMonkey: + DW SleepingMonkeyInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW SleepingMonkeyCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classBell: + DW BellInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DoNothingCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classRingingBell: + DW BellInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW DoNothingCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classBananaTree: + DW BananaTreeInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW BananaTreeCheck ;vector for check method + DW BananaTreeTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHermitNoShell: + DW HermitNoShellInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW HermitNoShellCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classHermitInShell: + DW HermitNoShellInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW HermitInShellCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classSwampThang: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW GenericCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classCrab: + DW CrabInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW CrabCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classCrabBurrowing: + DW CrabBurrowingInit ;vector for init method + DW DoNothing ;vector for redraw method + DW CrabBurrowingCheck ;vector for check method + DW StdTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +classUberMouse: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW UberMouseCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classTurret:: + DW TurretInit ;vector for init method + DW StandardRedraw ;vector for redraw method + DW TurretCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classCroutonKing: + DW InitTwoHealth ;vector for init method + DW StandardRedraw ;vector for redraw method + DW GenericCheck ;vector for check method + DW StdTakeDamage2x2 ;vector for take damage method + DW StandardDie ;vector for die method + +classTurretBullet: + DW StdBulletInit ;vector for init method + DW StdBulletRedraw ;vector for redraw method + DW SuperSuperFastBulletCheck + DW BulletTakeDamage ;vector for take damage method + DW StandardDie ;vector for die method + +SECTION "ClassesSection",ROMX,BANK[CLASSROM] + +;--------------------------------------------------------------------- +;bg methods +;are passed parameters: +; a - method type (BGACTION_HIT,BGACTION_MOVEOVER) +; c - tile index (eg class index 24, not class 1045) +; hl - map location +;--------------------------------------------------------------------- +classGenericBG: + ret + +classAppomattoxBG:: + ret +classLandingLightsBG:: + ret +classInvisibleWallBG:: + ret + +classChangeTo120BG: + cp BGACTION_HIT + ret nz + + ld bc,classShiftPlusOneBG + call FindClassIndex + + push af + ld a,MAPBANK + ldio [$ff70],a + pop af + + ld [hl],a + ret + +classShiftPlusOneBG: + cp BGACTION_HIT + ret nz + + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + inc a + ld [hl],a + ret + +classGeneratorBG: +classDestructableBG: + cp BGACTION_HIT + ret nz + + ;remove myself from the map + ld a,MAPBANK + ldio [$ff70],a + ld [hl],0 + + ld hl,levelVars+15 + inc [hl] + ret + +classDestructableAdjoinRightBG: + cp BGACTION_HIT + ret nz + + ;remove myself & neighbor from the map + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl+],a + ld [hl],a + inc a + + ld hl,levelVars+15 + inc [hl] + ret + +classDestructableAdjoinLeftBG: + cp BGACTION_HIT + ret nz + + ;remove myself & neighbor from the map + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl-],a + ld [hl],a + inc a + + ld hl,levelVars+15 + inc [hl] + ret + +classDestructableAdjoinBottomBG: + cp BGACTION_HIT + ret nz + + ;remove myself & neighbor from the map + ld a,MAPBANK + ldio [$ff70],a + ld [hl],0 + ld a,[mapPitch] + add l + ld l,a + ld a,h + adc 0 + ld h,a + ld [hl],0 + + ld hl,levelVars+15 + inc [hl] + ret + +classDestructableAdjoinTopBG: + cp BGACTION_HIT + ret nz + + ;remove myself & upper neighbor from the map + ld a,MAPBANK + ldio [$ff70],a + ld [hl],0 + ld a,[mapOffsetNorth] + add l + ld l,a + ld a,[mapOffsetNorth+1] + adc h + ld h,a + ld [hl],0 + + ld hl,levelVars+15 + inc [hl] + ret + + +classSplitterBG: + cp BGACTION_HIT + jr nz,.done + + ;get class of bullet + ld a,[bulletClassIndex] + ld c,a + + call GetFGAttributes + and FLAG_ISBULLET + ret z + + ld a,[bulletDirection] + ld b,a + ld [fireBulletDirection],a + + ;create a bullet continuing in the same direction + call CreateBulletOfClass + + ;and 90 CW + ld a,b + inc a + and %11 + ld [fireBulletDirection],a + call CreateBulletOfClass + + ;and 90 CCW + ld a,b + dec a + and %11 + ld [fireBulletDirection],a + call CreateBulletOfClass + +.done + xor a ;no explosion + ret + +classNoExplosionBG: + xor a + ret + +classChangeToBigSpiderBG: + cp BGACTION_HIT + ret nz + + ;I'm corner of 2x2 tile; remove tile + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl+],a + ld [hl-],a + push hl + ld a,[mapPitch] + add l + ld l,a + ld a,h + adc 0 + ld h,a + ld [hl+],a + ld [hl-],a + pop hl + + ;create a big spider here + ld bc,classBigSpider + call FindClassIndex + ret z + ld c,a + jp CreateInitAndDrawObject + +classAdjoinWestBG: + cp BGACTION_HIT + ret nz + + ;pass the buck to the west + ld a,MAPBANK + ldio [$ff70],a + dec hl + ld c,[hl] + ld a,BGACTION_HIT + jp CallBGAction + +classAdjoinNorthBG: + cp BGACTION_HIT + ret nz + + ;pass the buck to the north + ld a,MAPBANK + ldio [$ff70],a + ld a,[mapOffsetNorth] + ld e,a + ld d,$ff + add hl,de + ld c,[hl] + ld a,BGACTION_HIT + jp CallBGAction + +classChangeToLittleSpiderBG: + cp BGACTION_HIT + ret nz + + ;create a little spider right here + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl],a + + ld bc,classLittleSpider + call FindClassIndex + ret z + ld c,a + jp CreateInitAndDrawObject + +classHiveBG: + call FindEmptyLocationAround1x1Loc + or a + ret z + + ;create an adjacent bee when the wall is shot + ld bc,classBee + call FindClassIndex + ret z + ld c,a + jp CreateInitAndDrawObject + +classCheeseBG: + call FindEmptyLocationAround1x1Loc + or a + ret z + + ld bc,classEdibleCheeseBG + call FindClassIndex + push af + ld a,MAPBANK + ldio [$ff70],a + pop af + ld [hl],a + + jp ResetMyBGSpecialFlags + +classHermitCrabShellBG: + ret + +classEdibleCheeseBG: + jr HealthPlusOneBG + +classPorkBG: + jr HealthPlusOneBG + +classFriedEggBG: + jr HealthPlusOneBG + +classDrumstickBG: + jr HealthPlusOneBG + +classBananaBG: + jr HealthPlusOneBG + +HealthPlusOneBG: + cp BGACTION_MOVEOVER + ret nz + + ldio a,[firstMonster] + ld b,a + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call EnsureTileIsHead + cp b + ret c ;not a monster + + ld c,a + call GetFGAttributes + and FLAG_ISBULLET + ret nz ;want monster not bullet + + ;clear out tile shadow bank at this loc + ;(egg->nothing under creature) + call ClearBGUnderSprite + + call GetObjectOnBG + ;ld a,MAPBANK + ;ldio [$ff70],a + ;ld a,[hl] + ;call EnsureTileIsHead + ;ld d,h + ;ld e,l + ;call FindObject ;get that monster + call GetHealth ;increase its health + cp 63 + ret nc + inc a + call SetHealth + ld a,BANK(eat_gbw) + ld hl,eat_gbw + jp PlaySample + +classSlugTrailBG: + cp BGACTION_MOVEOVER + ret nz + + push hl + call GetObjectOnBG + pop hl + call GetFGAttributes + and FLAG_ISBULLET + ret nz + call ClearBGUnderSprite + ld a,30 + jp SetMoveDelay + +GetObjectOnBG: + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call EnsureTileIsHead + ld c,a + ld d,h + ld e,l + jp FindObject ;get that monster + +ClearBGUnderSprite: + ld a,TILESHADOWBANK + ldio [$ff70],a + xor a + ld [hl],a + ret + +classClearanceBG: + cp BGACTION_MOVEOVER + ret nz + + push hl + call GetObjectOnBG + pop hl + call IsHero + ret z + call ClearBGUnderSprite + + ;add appropriate code to inventory + ld hl,mapToCodeIndexTable + ld a,[curLevelStateIndex] + call LookupIndexOfData8 + ld hl,romxIndexToItemTable + call Lookup16 + push hl + pop bc + call AddInventoryItem + + ;increase clearance level + ld bc,ITEM_ALPHACLEAR + call HasInventoryItem + jr nz,.foundCurLevel + ld bc,ITEM_BETACLEAR + call HasInventoryItem + jr nz,.foundCurLevel + ld bc,ITEM_GAMMACLEAR + call HasInventoryItem + jr nz,.foundCurLevel + ld bc,ITEM_DELTACLEAR + call HasInventoryItem + jr nz,.foundCurLevel + ld bc,ITEM_EPSILONCLEAR + call HasInventoryItem + jr nz,.foundCurLevel + ld bc,ITEM_ZETACLEAR + call HasInventoryItem + ret nz ;don't go higher than zeta + + ;start with alpha clearance + ld bc,ITEM_ALPHACLEAR + call AddInventoryItem + ret + +.foundCurLevel + call RemoveInventoryItem + rlc c + call AddInventoryItem + ret + +IsHero: + ld a,[hero0_index] + cp c + jr z,.returnTrue + + ld a,[hero1_index] + cp c + jr z,.returnTrue + +.returnFalse + xor a + ret + +.returnTrue + ld a,1 + or a + ret + +mapToCodeIndexTable: + DB $04,$09,$2a,$6a,$a4,$73 + +codeIndexToItemTable: + DW ITEM_CODE0400,ITEM_CODE0900,ITEM_CODE1002,ITEM_CODE1006 + DW ITEM_CODE0410,ITEM_CODE0307 + +; Arguments: bc - item corresponding to clearance +RemoveClearanceIfTaken:: + call HasInventoryItem + ret z ;not taken yet + + ld hl,classClearanceBG + call FindFirstBGLoc + ret z + + xor a + ld [hl],a + ret + + + +;--------------------------------------------------------------------- +;obj methods +;--------------------------------------------------------------------- + +SuperInit:: + push hl + + ld a,OBJBANK + ldio [$ff70],a + + ld hl,OBJ_FRAME + add hl,de + + xor a + ld [hl+],a ;frame + ld a,1 + ld [hl+],a ;move countdown + xor a + ld [hl+],a ;limit + ld [hl+],a ;health + ld [hl+],a ; + ld [hl+],a ; + ld [hl+],a ;state + ld [hl+],a ;group + ld [hl+],a ;destl + ld [hl+],a ;desth + + ld a,$ff + ld [hl+],a ;spritelo + + xor a + ld [hl+],a ;13 + ld [hl+],a ;14 + ;leave NEXTL alone + + pop hl + ret + +SuperDie:: + push hl + xor a + call SetHealth + jr SuperDieFreeSprite +FreeSpriteLoPtr: + push hl +SuperDieFreeSprite: + call GetSpriteLo + call FreeSprite + ld a,$ff + call SetSpriteLo + pop hl + ret + +InitTwoHealth: + ld hl,.initTwoHealthTable + jp StdInitFromTable + +.initTwoHealthTable + DB 4 ;initial facing + DB 2 ;health (max) + DB GROUP_MONSTERN ;group friends with everyone + DB 0 ;has bullet + +DoNothing: + ret + +StandardRedraw: + push bc + push de + push hl + + call GetFacing + + bit 7,a + jr z,StandardRedrawAfterPush ;not a sprite + + push bc + ld c,a + call RemoveFromMap + pop bc + + jr StandardRedrawAfterPush + +StandardRedrawNoCheckSprite: +StandardChooseColor: + push bc + push de + push hl + +StandardRedrawAfterPush: + ;white if dandelion puffs on me + call GetPuffCount + or a + jr z,.noPuffs + + ld b,0 + jr StandardDraw + +.noPuffs + call GetFGAttributes + and %111 + ld b,a + + ;falling through from above +StandardDraw: + ;bc, de, hl already pushed in chooseColor + ld a,c + ld [curObjIndex],a + + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + + ;save map location for later use + ld a,[de] + inc de + ld [methodParamL],a + ld a,[de] + inc de + ld [methodParamH],a + + ;get frame (facing + animation) + ;check isSprite flag + ld a,[de] + bit 7,a + jr z,.drawTileBased + + jp .drawSpriteBased + +.drawTileBased + and %111 ;mask off facing stuff + push af ;save frame for later + ld d,0 + ld e,a ;done with original de + + ;get attributes of tile + ld hl,.attributeLookup + ld a,[fgFlags] + bit BIT_NOROTATE,a + jr z,.afterLoadAttributeLookup + ld hl,.attributeLookup+8 +.afterLoadAttributeLookup + add hl,de ;hl is &attributeLookup[frame] + + ld a,[hl] ;flip attributes for this frame + or b ;combined + ld b,a ;B is full attributes + + ld a,TILEINDEXBANK ;select RAM bank of tile index maps + ldio [$ff70],a + + ;add 16+(is2x2*16) to attributeLookup to get tile offset Lookup + ld e,16 + ldio a,[curObjWidthHeight] + cp 2 + jr nz,.eHasCorrectValue + ld e,32 +.eHasCorrectValue + add hl,de ;[hl] is tile offset + + ld e,c ;index of tile is low byte + ld d,((fgTileMap>>8) & $ff) ;de pts to base tile + + ld a,[de] ;get base tile + pop de ;frame in d + ld e,c ;save class index in e + cp $ff + jr z,.afterAddOffset + add [hl] ;add offset +.afterAddOffset + ld c,a ;c is tile to draw + + ;retrieve ptr to map location of this object + ld a,[methodParamL] ;hl = ptr to draw dest + ld l,a + ld a,[methodParamH] + ld h,a + + ldio a,[curObjWidthHeight] + cp 2 + jr nz,.draw1x1tileBased + + jp Draw2x2tileBased + +.draw1x1tileBased + ;use frame to determine how many tiles to spread this across + ;and in what direction + bit 2,d ;d is frame + jr z,.drawSingleTile + bit 0,d + jr z,.drawNorthToSouthSplit + +.drawEastToWestSplit + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + ld a,e + ld [hl+],a ;draw class index + ld a,CLASS_ADJOIN_W + ld [hl-],a ;in next tile too + ld a,TILESHADOWBANK ;select tile shadow RAM + ldio [$ff70],a + ld a,c + ld [hl+],a ;draw tile to tile shadow RAM + ;tile plus one or minus one for frame modifier + bit 1,d + jr z,.EWIncrement + dec a + jr .EWDone +.EWIncrement + inc a +.EWDone + ld [hl-],a ;and again + ld a,ATTRSHADOWBANK ;select attribute shadow RAM + ldio [$ff70],a + ld a,b + ld [hl+],a ;draw attribute to attribute shadow RAM + ld [hl-],a ;and again + jr .done + +.drawNorthToSouthSplit + call .drawAtHL + push de + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + pop de + ld e,CLASS_ADJOIN_N + ;tile plus one or minus one for frame modifier + bit 1,d + jr z,.NSIncrement + ;handle NOROTATE + ld a,[fgFlags] + bit BIT_NOROTATE,a + jr nz,.NSIncrement + dec c + jr .NSDone +.NSIncrement + inc c +.NSDone + call .drawAtHL + jr .done + +.drawSingleTile + call .drawAtHL + jr .done + +.drawAtHL + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + ld [hl],e ;draw class index +.drawShadowAtHL + ld a,TILESHADOWBANK ;select tile shadow RAM + ldio [$ff70],a + ld [hl],c ;draw tile to tile shadow RAM + ld a,ATTRSHADOWBANK ;select attribute shadow RAM + ldio [$ff70],a + ld [hl],b ;draw attribute to attribute shadow RAM + ret + +.done pop hl + pop de + pop bc + ret + +.drawSpriteBased + push bc + push af ;save frame + dec de + dec de + call GetCurLocation + + ;copy map underneath current to tile & attribute shadow buffers + call .copyMapToShadowBuffers + pop af ;get frame back + + bit 2,a ;split? + jr z,.updateSprite ;done copying tile stuff + + bit 0,a ;n/s or e/w? + jr z,.spriteNS + + ;e/w split + inc hl + call .copyMapToShadowBuffers + jr .updateSprite + +.spriteNS + ;n/s split + push de ;retrieve vertical offset + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + pop de + + call .copyMapToShadowBuffers + +.updateSprite + pop bc + + push bc + ld a,[curObjIndex] + ld c,a + ;draw the object's id to the map buffer + call GetFacing + ld b,a + call GetCurLocation + ld a,MAPBANK + ldio [$ff70],a + ld [hl],c ;head of obj + ld a,b + and %00000101 + cp %00000101 ;E/W split + jr nz,.checkNS_Split + inc hl + ld [hl],CLASS_ADJOIN_W + jr .doneDrawID +.checkNS_Split + ld a,b + and %00000100 + jr z,.doneDrawID + ;N/S split + ld a,[mapOffsetSouth] + add l + ld l,a + ld a,[mapOffsetSouth+1] + adc h + ld h,a + ld [hl],CLASS_ADJOIN_N +.doneDrawID + pop bc + + call GetCurLocation + ld a,TILESHADOWBANK + ldio [$ff70],a + ld a,[hl] + or a + jr z,.afterCallMoveOverBG + + push bc + ld c,a + ld a,BGACTION_MOVEOVER + call CallBGAction + pop bc + +.afterCallMoveOverBG + ;attempt to allocate sprite if we don't have one + call GetSpriteLo + cp $ff + jr nz,.haveSprite + + ;see if the sprite will show up onscreen + call GetCurLocation + call ConvertLocHLToSpriteCoords + ;ld a,l + ;or a + ;jr z,.spdone ;won't show up anyways + + call AllocateSprite + cp $ff + jr z,.spdone ;no sprite for you + call SetSpriteLo + +.coordsOkay + ;initialize the sprite's position + push af + push de + ld e,a + ld d,((spriteOAMBuffer>>8) & $ff) + ld a,l + ld [de],a + inc de + ld a,h + ld [de],a + pop de + pop af + + ;if split bit is set scoot in one direction or another + push bc + push af + call GetFacing + bit 2,a + jr z,.afterScoot + + bit 0,a ;N/S or E/W? + jr nz,.scootEW + + ;scoot down for N/S split + ld b,%00000010 + jr .doSplit + +.scootEW ;scoot right for E/W split + ld b,%00000001 + +.doSplit + pop af + push af + call ScootSprite + +.afterScoot + pop af + pop bc + +.haveSprite ;set up the sprite to reflect the current facing + push bc + + call GetSpritePtrInHL + inc hl + inc hl + call GetFGTileMapping + ld c,a + + call GetFacing + bit 0,a + jr nz,.facingEastWest + + ;facing north/south + inc c + inc c + bit 1,a + jr z,.checkAnim ;facing north no flip + + ;facing south + set 6,b ;flip tile vertically + jr .checkAnim + +.facingEastWest + bit 1,a ;facing east or west? + jr z,.checkAnim ;facing east, no flip + + set 5,b ;facing west, flip horizontally + +.checkAnim + bit 2,a ;check split bit + jr z,.baseAnimOkay + + inc c + +.baseAnimOkay + ld a,c ;tile number + ld [hl+],a + + ld a,b + or %00001000 ;attributes + ld [hl],a + + pop bc + + ;clear vflip bit if NOROTATE flag set + call GetFGAttributes + and FLAG_NOROTATE + jr z,.spdone + + res 6,[hl] + +.spdone pop hl + pop de + pop bc + ret + +.copyMapToShadowBuffers + ;assumes hl points to location + ld a,MAPBANK + ldio [$ff70],a + + ld a,[hl] ;get map tile + + ;get bg attributes of this map tile + ld c,a + ld b,((bgAttributes>>8) & $ff) + ld a,TILEINDEXBANK + ldio [$ff70],a + ld a,[bc] + + ;clear off all but the palette + and %00000111 + ld b,a + call .drawShadowAtHL + + ret + +.attributeLookup + DB %00001000,%00001000,%01001000,%00101000 ;1x1 normal + DB %00001000,%00001000,%01001000,%00101000 + DB %00001000,%00001000,%00001000,%00101000 ;no rotate + DB %00001000,%00001000,%00001000,%00101000 +.tileOffsetLookup + DB 0, 3, 0, 3, 1, 4, 2, 5 ;1x1 creature n,e,s,w,nsp,esp,ssp,wsp + DB 0, 3, 0, 3, 1, 4, 1, 5 ;1x1 no rotate + DB 0,10, 2,11, 4,14, 8,16 ;2x2 creature + DB 0,10, 2,11, 4,14, 8,16 ;2x2 creature + + DB 0 ;pad to make emulator not freak the disasm + +Draw2x2tileBased: + ;use frame to determine how many tiles to spread this across + ;and in what direction + bit 2,d ;d is frame + jr nz,.decideWhichSplit + jp .drawNonSplit +.decideWhichSplit + bit 0,d + jr z,.drawNorthToSouthSplit + +.drawEastToWestSplit + bit 1,d + jr nz,.drawSplitFacingWest + +.drawSplitFacingEast + push hl + call .drawHeadOfEWSplit + call .drawSplitE_PatternAndAttrNumbers + ld a,c + add 3 + ld c,a + + ;move hl to start of next row + pop hl + call HLToNextRow + + ;repeat for row 2 + call .drawSecondRowOfEWSplit + call .drawSplitE_PatternAndAttrNumbers + jp .done + +.drawSplitFacingWest + push hl + call .drawHeadOfEWSplit + call .drawSplitW_PatternAndAttrNumbers + ld a,c + add 3 + ld c,a + + ;move hl to start of next row + pop hl + call HLToNextRow + + ;repeat for row 2 + call .drawSecondRowOfEWSplit + call .drawSplitW_PatternAndAttrNumbers + jp .done + +.drawNorthToSouthSplit + bit 1,d + jr nz,.drawSplitFacingSouth + +.drawSplitFacingNorth + push hl + call .drawHeadOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + inc c + inc c + + ;move hl to start of next row + pop hl + call HLToNextRow + + ;repeat for row 2 & 3 + push hl + call .drawSecondRowOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + inc c + inc c + pop hl + call HLToNextRow + call .drawSecondRowOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + jp .done + +.drawSplitFacingSouth + push hl + call .drawHeadOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + dec c + dec c + + ;move hl to start of next row + pop hl + call HLToNextRow + + ;repeat for row 2 & 3 + push hl + call .drawSecondRowOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + dec c + dec c + pop hl + call HLToNextRow + call .drawSecondRowOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + jr .done + +.drawNonSplit + bit 1,d + jr z,.drawNonSplitNorE + + bit 0,d + jr nz,.drawNonSplitW + +.drawNonSplitS + push hl + call .drawHeadOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + dec c + dec c + + ;move hl to start of next row + pop hl + call HLToNextRow + + ;repeat for next row + call .drawSecondRowOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + jr .done + +.drawNonSplitW + push hl + ld a,MAPBANK + ldio [$ff70],a + ld a,e + ld [hl+],a + ld a,CLASS_ADJOIN_W + ld [hl-],a + + call .drawWPatternAndAttributeNumbers + inc c + inc c + + pop hl + call HLToNextRow + + ld a,MAPBANK + ldio [$ff70],a + ld a,CLASS_ADJOIN_N + ld [hl+],a + ld [hl-],a + call .drawWPatternAndAttributeNumbers + jr .done + +.drawNonSplitNorE + push hl + call .drawHeadOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + inc c + inc c + pop hl + call HLToNextRow + call .drawSecondRowOfNSSplit + call .drawSplitNS_PatternAndAttrNumbers + +.done pop hl + pop de + pop bc + ret + +.drawHeadOfEWSplit + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + ld a,e + ld [hl+],a ;draw class index + ld a,CLASS_ADJOIN_W + ld [hl+],a + ld [hl-],a + dec hl + ret + +.drawSecondRowOfEWSplit + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + ld a,CLASS_ADJOIN_N + ld [hl+],a + ld [hl+],a + ld [hl-],a + dec hl + ret + +.drawSplitE_PatternAndAttrNumbers + ;draw pattern numbers to tile shadow bank + ld a,TILESHADOWBANK ;select tile shadow RAM + ldio [$ff70],a + ld a,c + ld [hl+],a ;draw tile to tile shadow RAM + inc a + ld [hl+],a + inc a + ld [hl],a + + ;draw colors to attr shadow bank + ld a,ATTRSHADOWBANK ;select attribute shadow RAM + ldio [$ff70],a + ld a,b + ld [hl-],a ;draw attribute to attribute shadow RAM + ld [hl-],a + ld [hl],a + ret + +.drawSplitW_PatternAndAttrNumbers + ;draw pattern numbers to tile shadow bank + ld a,TILESHADOWBANK ;select tile shadow RAM + ldio [$ff70],a + ld a,c + ld [hl+],a ;draw tile to tile shadow RAM + dec a + ld [hl+],a + dec a + ld [hl],a + + ;draw colors to attr shadow bank + ld a,ATTRSHADOWBANK ;select attribute shadow RAM + ldio [$ff70],a + ld a,b + ld [hl-],a ;draw attribute to attribute shadow RAM + ld [hl-],a + ld [hl],a + ret + +.drawHeadOfNSSplit + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + ld a,e + ld [hl+],a ;draw class index + ld a,CLASS_ADJOIN_W + ld [hl-],a + ret + +.drawSecondRowOfNSSplit + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + ld a,CLASS_ADJOIN_N + ld [hl+],a + ld [hl-],a + ret + +.drawSplitNS_PatternAndAttrNumbers + ;draw pattern numbers to tile shadow bank + ld a,TILESHADOWBANK ;select tile shadow RAM + ldio [$ff70],a + ld a,c + ld [hl+],a ;draw tile to tile shadow RAM + inc a + ld [hl],a + + ;draw colors to attr shadow bank + ld a,ATTRSHADOWBANK ;select attribute shadow RAM + ldio [$ff70],a + ld a,b + ld [hl-],a ;draw attribute to attribute shadow RAM + ld [hl],a + ret + +.drawWPatternAndAttributeNumbers + ld a,TILESHADOWBANK + ldio [$ff70],a + ld a,c + ld [hl+],a + dec a + ld [hl],a + + ld a,ATTRSHADOWBANK + ldio [$ff70],a + ld a,b + ld [hl-],a + ld [hl],a + ret + +HLToNextRow: + push de + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + pop de + ret + +GenericCheck: + ld hl,.genericCheckTable + jp StdCheckFromTable + +.genericCheckTable + DB 5 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW nullSound + DB 10 ;fire delay + DW StdVectorToState + +IF 0 + ;push bc + ;push de + ;push hl + + ;am I dead? + call GetHealth + or a + jr nz,.checkTimeToMove + call StandardDie + jr .done + +.checkTimeToMove + ;time to move? + ld a,5 ;2 + call TestMove + or a + jr z,.skipMove ;timer lsb==frame lsb, don't move yet + + ld a,1 + ld [moveAlignPrecision],a + call StdVectorToState + or a + jr z,.skipMove + ;call GetRandomMovement + ;ld b,2 ;everyone move this way + call StandardValidateMoveAndRedraw +.skipMove + +.done ;pop hl + ;pop de + ;pop bc + ret +ENDC + +TalkerCheck: + ld hl,talkerCheckTable +TalkerCheckAfterSetupHL: + ld a,c + ld [dialogBalloonClassIndex],a + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z + push hl + call StdCheckTalk + pop hl + ret z + call StdMove + ret + + +talkerCheckTable: + DB 5 ;move delay + DW StdVectorToState + + +GetRandomMovement: + ;returns random value in b + ;alters a, b, and hl + + ;pick a "random value" ((counter+=17)) + ld a,%00001111 + call GetRandomNumMask + + ;ldio a,[randomLoc] + ;add 17 + ;ldio [randomLoc],a + ;and %00001111 ;restrict to 0-15 + cp 4 + jr c,.randomDir ;less than 4 move in a different direction + + ;move in direction we're currently facing + ;get current frame + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,2 + add hl,de + ld a,[hl] + and %00000011 ;clear off all but the direction bits + ld b,a ;b is same direction as before + ret + +.randomDir + and %00000011 ;mask off our random # to a direction + ld b,a + ret + + +;--------------------------------------------------------------------- +; Routine: EnforceLegalMove +; Arguments: b - original desired move direction +; c - class index +; de - "this" +; Returns: b - modified move direction +; Alters: a, b, hl +; Description: Adjusts move direction stored in b so that it is legal. +; A creature can always turn 180 around, but otherwise +; this means that it will travel forward if it is split +; between two tiles or if there is a wall in the desired +; direction. +;--------------------------------------------------------------------- +EnforceLegalMove: + ;get current frame in a + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,2 + add hl,de + ld a,[hl] + + ;is object split between two tiles? + bit 2,a + jr z,.notSplit + + ;It is split. This makes our job easy - creature can only + ;turn around or go forward + ld h,a ;save current direction in h + add 2 ;add two and mask off to reverse + and %00000011 + cp b ;reverse dir equal to desired? + jr nz,.splitMF ;no, move forward + + ret ;allow move in reverse direction + +.splitMF + ;force the wee bairn to move forward + ld a,h + and %00000011 + ld b,a + ret + +.notSplit + ;critter's not split. Maybe it just wants to turn around + ;without a lot of fuss? + ld h,a ;save current direction in h + add 2 ;add two and mask off to reverse + and %00000011 + cp b ;reverse dir equal to desired? + jr nz,.noReverse ;hmm guess not + + ret ;let 'im turn around slowly like + +.noReverse + push de + push hl +jr .moveAnywhere + + ;setup de with ptr to current location + ld h,d + ld l,e + ld a,[hl+] + ld d,[hl] + ld e,a ;de has ptr to cur location + + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + + ;Determine offset to check for wall and store in HL. + ld a,b ;desired dir + add b ;times two + ld h,((mapOffsetNorth>>8)&$ff) + add (mapOffsetNorth & $ff) + ld l,a ;hl pts to offset + ld a,[hl+] + ld h,[hl] + ld l,a ;hl IS offset + + ;don't examine my tail in the process; multiply offset + ;by two if 2x2 and facing east or south + ldio a,[curObjWidthHeight] + cp 2 + jr nz,.afterModifyOffset + + ld a,b + and %00000011 + cp %01 ;east + jr z,.offsetTimesTwo + cp %10 ;south + jr nz,.afterModifyOffset + +.offsetTimesTwo + sla l ;hl<<=1 (same as *2) + rl h + +.afterModifyOffset + add hl,de ;hl is &location in desired dir + ldio a,[firstMonster] ;d = firstMonster + ld d,a + ld a,[hl] ;what's there? + or a + jr z,.moveAnywhere ;nothing there + cp d + jr nc,.moveAnywhere + + ;wall there, move forward unless special flag says okay + push af + ld a,ZONEBANK + ldio [$ff70],a + pop af + bit 7,[hl] ;marked as special somehow? + jr z,.moveForwardIfNotBlocked ;nope + + call GetBGAttributes + bit BG_BIT_ATTACKABLE,a + jr nz,.moveAnywhere + + bit BG_BIT_WALKOVER,a + jr z,.moveForwardIfNotBlocked + + ldio a,[curObjWidthHeight] + cp 1 + jr z,.moveAnywhere ;can walk over + jr .moveForwardIfNotBlocked + + ;nuttin there or a monster to face, let the creature move in + ;whatever direction it wants, bless its little heart (direction + ;B is fine) +.moveAnywhere + pop hl + pop de + ret + +.moveForwardIfNotBlocked + pop hl + pop de + ld l,b + ld a,h + and %00000011 + ld b,a + push hl + ld a,1 + call CheckDestEmpty + pop hl + or a + jr nz,.done + ld b,l ;allow turn anywhere if blocked ahead + ret + + +.moveForward + ;hey, you can only move forward asshole + ld a,h ;desired dir = cur dir + and %00000011 + ld b,a +.done + ret + +;--------------------------------------------------------------------- +; Routine: ScootSprite +; Arguments: a - loptr to sprite +; b - desired move direction +; Alters: af +; Description: Moves an existing sprite 4 pixels in a given +; direction. +;--------------------------------------------------------------------- +ScootSprite: + cp $ff + ret z + + push hl + + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + + bit 0,b ;test direction of travel + jr nz,.eastWest + + ld a,[hl] + bit 1,b + jr nz,.south + + ;north + sub 4 + ld [hl],a + jr .afterUpdateSpritePos + +.south + add 4 + ld [hl],a + jr .afterUpdateSpritePos + +.eastWest + inc hl + ld a,[hl] + bit 1,b + jr nz,.west + + ;east + add 4 + ld [hl],a + jr .afterUpdateSpritePos + +.west + sub 4 + ld [hl],a + +.afterUpdateSpritePos + pop hl + ret + + +;--------------------------------------------------------------------- +; Routine: Move +; Arguments: b - desired move direction +; c - class index +; de - "this" +; Returns: Nothing +; Alters: a, hl +; Description: If desired dir is != current dir then turns creature +; to desired dir. Otherwise takes a step forward. +; If it moves AND changes zones the curPathPos +; (frame bits 6:5) is set to zero. +; +; There are three steps: +; 1) Remove From Map +; If the IsSprite flag is set (FRAME:7) then the +; map is restored from the contents of the +; tileShadowBuffer. Otherwise the map tiles creature +; is occupying are cleared to zero. +; +; 2) Adjust IsSprite flag (FRAME:7) +; If 0: If [bgFlags] contains FLAG_WALKOVER or +; FLAG_SHOOTOVER then IsSprite is set to 1. +; Else If 1: +; If frame:split is 0 and tile under is zero +; then IsSprite is set to zero. +; +; 3) Redraw +; If the IsSprite flag is set then the map +; underneath is copied to the tileShadowBuffer. +; +; Regardless the class index of the object is drawn +; into the map. + +; If [bgFlags] contains either BG_FLAG_WALKOVER or +; BG_FLAG_SHOOTOVER then +;--------------------------------------------------------------------- +Move: + push bc + + ;save current zone to see if it changes when we move + call GetCurZone + ld [oldZone],a + + ;get current direction in c + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,OBJ_FRAME + add hl,de + ld a,[hl] ;a = frame + ld c,a + + ;same as desired direction? + and %00000011 + cp b + jr z,.sameDirection + + ;Different direction. Turn to desired direction. + ld a,c + and %11111100 ;preserve non-direction other bits + or b ;combined with new direction + ld [hl],a ;and that's our new frame! + + ;have to remove from map if we're a sprite + call GetFacing + bit 7,a + jr z,.doneTurn + + call RemoveFromMap + +.doneTurn + pop bc + ret + +.sameDirection + call RemoveFromMap ;gonna be drawin again real soon, Baby! + + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ;if we were split facing west or north then we don't actually + ;move, we just turn off the split bit + bit 2,c + jr z,.noSplitCheckEastSouth + + ;facing west? + ld a,c + and %00000111 + cp %00000111 + jr nz,.checkSplitFacingNorth + +.noMoveToggleSplit + ld a,c + xor %00000100 + ld c,a + jr .stowNewFrame + +.checkSplitFacingNorth + cp %00000100 + jr z,.noMoveToggleSplit + jr .moveForwardToggleSplit + +.noSplitCheckEastSouth + ;if we're not split and we're heading East or South then again + ;we just toggle the split bit as our move + ld a,c + and %00000111 + cp %00000001 ;facing East? + jr z,.noMoveToggleSplit + cp %00000010 ;facing South? + jr z,.noMoveToggleSplit + +.moveForwardToggleSplit + push hl + push de + + ;setup de with ptr to current location + ld h,d + ld l,e + ld a,[hl+] + ld d,[hl] + ld e,a ;de has ptr to cur location + + ;Determine offset to check for wall and store in HL. + ld a,b ;desired dir + add b ;times two + ld hl,mapOffsetNorth + add l + ld l,a ;hl pts to offset + ld a,[hl+] + ld h,[hl] + ld l,a ;hl IS offset + add hl,de + ld d,h + ld e,l + + ;toggle the split bit for the new frame + ld a,c + xor %00000100 + ld c,a ;c has new frame + + ;store new location in object + pop hl ;hl is ptr to this + + ld a,e + ld [hl+],a + ld a,d + ld [hl-],a + + ;restore de + ld d,h + ld e,l + + pop hl + +.stowNewFrame + ;if IsSprite bit off, check to see if we want to turn + ;it on + bit 7,c + jr nz,.spriteBitIsOn + + ld a,[bgFlags] + and BG_FLAG_SPECIAL + jr z,.reallyStowNewFrame + + set 7,c ;turn sprite flag on + ;call AllocateSprite + ;call StoreSpriteLo + jr .reallyStowNewFrame + +.spriteBitIsOn + ;can we turn it off? + bit 2,c ;is frame bit zero? + jr nz,.updateSpritePos ;no, leave it on + + ;maybe turn it off; see what we're over + push hl + call GetCurLocation + ld a,MAPBANK + ld [$ff70],a + ld a,[hl] + push af + ld a,OBJBANK + ld [$ff70],a + pop af + pop hl + + or a + jr nz,.updateSpritePos ;leave it on + + res 7,c ;turn it off + call FreeSpriteLoPtr + jr .reallyStowNewFrame + +.updateSpritePos + ;since the sprite has been on let's scoot the sprite 4 + ;pixels in the direction we've moved + + call GetSpriteLo + call ScootSprite + +.reallyStowNewFrame + ld a,OBJBANK + ld [$ff70],a + ld a,c ;new frame + ld [hl],a + + ;if oldZone != curZone then set curPathPos to zero + call GetCurZone + ld hl,oldZone + cp [hl] + jr z,.done + + call ResetCurPathPos + +.done pop bc + ret + +;--------------------------------------------------------------------- +; Routine: RemoveFromMap +; Arguments: c - current frame +; de - "this" +; Returns: Nothing +; Alters: af +; Description: Removes the this object's class index from the main +; map buffa +;--------------------------------------------------------------------- +RemoveFromMap:: + push bc + push de + push hl + + call GetCurLocation + + ;is object currently a sprite? + bit 7,c + jr nz,.clearSprite + + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + + ldio a,[curObjWidthHeight] + cp 2 + jr z,.clear2x2tiles + + ;clear out this location + xor a + ld [hl+],a + + ;if we were a split tile then clear out the next one to the + ;right OR to the bottom + bit 2,c + jr z,.done + + bit 0,c + jr z,.splitNS + + ;split E/W + ld [hl+],a ;clear out the next location too, sucka + jr .done + +.splitNS + ;scoot HL down a row + ld d,0 + ld a,[mapPitchMinusOne] + ld e,a + add hl,de + ld [hl],d ;clear 'em all + jr .done + +.clearSprite + call .getTilePreviouslyHere + + ;if we were a split tile then clear out the next one to the + ;right OR to the bottom + bit 2,c + jr z,.done + + bit 0,c + jr z,.spriteSplitNS + + ;split E/W + inc hl + call .getTilePreviouslyHere + jr .done + +.spriteSplitNS + ;scoot HL down a row + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + call .getTilePreviouslyHere + +.done pop hl + pop de + pop bc + ret + +.getTilePreviouslyHere + ld a,TILESHADOWBANK + ld [$ff70],a + + ld b,[hl] + + ld a,MAPBANK + ld [$ff70],a + + ld [hl],b + + ret + +.clear2x2tiles + push hl + call .clear2x2row + pop hl + call HLToNextRow + push hl + call .clear2x2row + pop hl + ld a,c + and %00000101 + cp %00000100 + jr nz,.done2x2 + call HLToNextRow + call .clear2x2row + +.done2x2 + pop hl + pop de + pop bc + ret + +.clear2x2row + xor a + ld [hl+],a + ld [hl+],a + ld a,c + and %00000101 + xor %00000101 + ret nz + ld [hl+],a + ret + +;--------------------------------------------------------------------- +; Routine: CheckDestEmpty +; Arguments: b - desired direction +; de - "this" +; a - 0=don't consider facing, 1=consider facing +; +; Returns: a - dest is empty +; !a - dest is not empty +; Alters: a, hl +; Description: Checks along direction of travel for empty tile +;--------------------------------------------------------------------- +CheckDestEmpty: + ld [temp],a + + xor a + ld [bgFlags],a + + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + + ;load cur frame into a + ld hl,2 + add hl,de + ld a,[hl] + + ;don't bother if split bit is set, we're fine + bit 2,a + ret nz + + ;and don't bother if direction of travel is not equal to + ;current facing (just turning) + ld a,[temp] + or a + jr z,.check + ld a,[hl] + + and %00000011 + cp b + jr z,.check + ld a,1 ;set return value A to non-zero + ret + +.check + push de + push hl + + ;setup de with ptr to current location + ld h,d + ld l,e + ld a,[hl+] + ld d,[hl] + ld e,a ;de has ptr to cur location + + ld a,MAPBANK ;select map RAM + ldio [$ff70],a + + call GetMapOffset + + ;don't examine my tail in the process; multiply offset + ;by two if 2x2 and facing east or south + ldio a,[curObjWidthHeight] + cp 2 + jr nz,.afterModifyOffset + + ld a,b + and %00000011 + cp %01 ;east + jr z,.offsetTimesTwo + cp %10 ;south + jr nz,.afterModifyOffset + +.offsetTimesTwo + sla l ;hl<<=1 (same as *2) + rl h + +.afterModifyOffset + add hl,de ;hl is ptr to new location + + ldio a,[curObjWidthHeight] + cp 2 + jr z,.check2x2 + + ;check 1x1 + ld a,[hl] ;contents of dest into a + call .checkCanMoveOver + pop hl + pop de + ret + +.check2x2 + ;check first adjacent tile + ld a,[hl] + call .checkCanMoveOver + or a + jr z,.done ;blocked on first, no use checking second + + ;first clear; check second adj tile + ld a,b + and 1 ;now 0=n/s, 1=e/w + add 1 ;now check adj in e for original n/s, s for e/w + call AdvanceLocHLInDirection + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call .checkCanMoveOver + +.done pop hl + pop de + ret + +.checkCanMoveOver + or a ;zero? + jr nz,.checkSpecialFlags + ld a,1 ;return true + ret + +.checkSpecialFlags + ld e,a + ldio a,[firstMonster] + cp e + jr z,.false ;is a monster + jr c,.false ;is a monster + + ld a,TILEINDEXBANK + ld [$ff70],a + ld d,((bgAttributes>>8) & $ff) + ld a,[de] + ld [bgFlags],a + and BG_FLAG_WALKOVER + jr z,.false + + ldio a,[curObjWidthHeight] + cp 1 + jr nz,.false + + ;return true + ld a,1 + ret + +.false xor a ;return false + ret + +;--------------------------------------------------------------------- +; Routines: GetMapOffset +; Arguments: b - map direction to get offset in +; Returns: hl - desired offset +; Alters: a, hl +;--------------------------------------------------------------------- +GetMapOffset: + ld a,b ;desired dir + add b ;times two + ld hl,mapOffsetNorth + add l + ld l,a ;hl pts to offset + ld a,[hl+] + ld h,[hl] + ld l,a ;hl IS offset + ret + +;--------------------------------------------------------------------- +; Routines: TestMove +; HeroTestMove +; Arguments: a - value to reset counter to if it reaches zero +; de - "this" +; Returns: a - time to move +; !a - don't move +; Alters: a,hl +; Description: +;--------------------------------------------------------------------- +TestMove: + push af + call PointToSpecialFlags + bit OBJBIT_THROWN,[hl] + jr nz,TestMoveThrown + pop af + +TestMoveNoCheckSpecial: + push bc + ld c,a + + ld a,[objTimer60ths] ;get timer + and %00011000 ;get rid of other bits + ld b,a + ld hl,OBJ_FRAME ;offset of frame variable + add hl,de + xor a,[hl] ;xor timer4:3 w/frame4:3, hl=&move + + push af + ld a,[hl] ;current state + and %11100111 ;mask off area for timer + or b ;store bits from current timer + ld [hl],a + pop af + and %00011000 ;get rid of other bits + jr z,.skipMove ;already moved this turn + + push bc + inc hl + + dec [hl] + + jr z,.timeToMove + + ;no move but save modified timer + pop bc + pop bc + xor a + ret + +.timeToMove + ;time to move! + push hl + ld hl,OBJ_DESTZONE ;point to # puffs + add hl,de + ld a,[hl] + and %1111 + pop hl + add a,c ;reset move counter (add #puffs) + + ;or b + ld [hl-],a + + pop bc + + ld a,1 ;return true/able to move + +.skipMove + pop bc + ret + +HeroTestMove: + push af + call PointToSpecialFlags + bit OBJBIT_THROWN,[hl] + jr nz,TestMoveThrown + pop af + + push bc + ld c,a + + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + + ld a,[heroTimer60ths] ;get timer + and %00011000 ;get rid of other bits + ld b,a + ld hl,OBJ_FRAME ;offset of frame variable + add hl,de + xor a,[hl] ;xor timer4:3 w/frame4:3, hl=&move + push af + ld a,[hl] ;current state + and %11100111 ;mask off area for timer + or b ;store bits from current timer + ld [hl],a + pop af + and %00011000 ;get rid of other bits + jr z,.skipMove ;already moved this turn + + push bc + inc hl + + dec [hl] + + jr z,.timeToMove + + ;no move but save modified timer + pop bc + pop bc + xor a + ret + +.timeToMove + ;time to move! + push hl + ld hl,OBJ_DESTZONE ;point to # puffs + add hl,de + ld a,[hl] + and %1111 + pop hl + add a,c ;reset move counter (add #puffs) + + ld [hl-],a + pop bc + + ld a,1 ;return true/able to move + +.skipMove + pop bc + ret + +TestMoveThrown: + ;move one in current facing and return "unable to move" + pop af + ld a,1 + call TestMoveNoCheckSpecial + or a + ret z + + ldio a,[firstMonster] + ld b,a + ld a,4 + call GetLocInFront + or a + jr z,.emptyAhead + + cp b + jr nc,.stop + + ld a,[bgFlags] + bit BG_BIT_WALKOVER,a + jr z,.stop + + ldio a,[curObjWidthHeight] + cp 1 + jr z,.emptyAhead + +.stop call PointToSpecialFlags + res OBJBIT_THROWN,[hl] + ld a,[hero0_index] + cp c + jr z,.heroJiggle + ld a,[hero1_index] + cp c + jr z,.heroJiggle + xor a + ret + +.heroJiggle + ld a,5 + ldio [jiggleDuration],a + xor a + ret + +.emptyAhead + call GetCurLocation + push hl + call GetFacing + and %111 + ld b,a + push bc + and %11 + ld b,a + call StandardValidateMoveAndRedraw + pop bc + pop hl + + ;check if way blocked after all (2x2 monster) + call GetFacing + and %111 + cp b + jr nz,.done + ld a,[de] + cp l + jr nz,.done + inc de + ld a,[de] + dec de + cp h + jr z,.stop + +.done + xor a + ret + +;--------------------------------------------------------------------- +; Routines: StdVectorToState +; EatVectorToState +; TrackEnemyVectorToState +; ActorVectorToState +; FleeVectorToState +; Arguments: de - "this" +; Returns: b - direction to move +; a - non-zero for move valid, zero for no move +; Alters: a, b, hl +;--------------------------------------------------------------------- +VectorToStateCommonInit: + call GetState + rlca + and %01111110 + ret + +StdVectorToState: + call VectorToStateCommonInit + add (stdStateTable & $ff) + ld l,a + ld h,((stdStateTable>>8) & $ff) +VectorToStateCommon: + ld a,[hl+] + ld h,[hl] + ld l,a + jp hl + +EatVectorToState: + call VectorToStateCommonInit + add (eatStateTable & $ff) + ld l,a + ld h,((eatStateTable>>8) & $ff) + jr VectorToStateCommon + +TrackEnemyVectorToState: + call VectorToStateCommonInit + add (trackEnemyStateTable & $ff) + ld l,a + ld h,((trackEnemyStateTable>>8) & $ff) + jr VectorToStateCommon + +ActorVectorToState: + call VectorToStateCommonInit + add (actorStateTable & $ff) + ld l,a + ld h,((actorStateTable>>8) & $ff) + jr VectorToStateCommon + +FleeVectorToState: + call VectorToStateCommonInit + add (fleeStateTable & $ff) + ld l,a + ld h,((fleeStateTable>>8) & $ff) + jr VectorToStateCommon + +LadyVectorToState: + call VectorToStateCommonInit + add (ladyBulletStateTable & $ff) + ld l,a + ld h,((ladyBulletStateTable>>8) & $ff) + jr VectorToStateCommon + +;--------------------------------------------------------------------- +; STATE METHODS +; Arguments: de - "this" +; Returns: b - direction to move +; a - non-zero for move valid, zero for no move +; Alters: a, b, hl +;--------------------------------------------------------------------- +SetupRandomMoveState: + ld a,6 + call SetState + xor a + ret + +EatOrTrackState: + ;move in direction of food next to me + ld b,0 +.checkDirectionForFood + ld a,b + call GetLocInFront + or a + jr z,.continue + + push bc + push hl + ld b,a + call GetDestL ;min index I can eat + cp b + jr z,.maybeFood + jr nc,.notFood +.maybeFood + call GetDestH ;max index I can eat + cp b + jr nc,.food + +.notFood + pop hl + pop bc + jr .continue + + +.food + pop hl + pop bc + + ;remove tile in direction I'm facing that way and I'm not split + call GetFacing + bit 2,a + jr nz,.foundFood + + and %11 + cp b + jr nz,.foundFood + + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl],a + + ld hl,eatSound + call PlaySound + +.foundFood + ld a,1 ;b contains valid move + ret + +.continue + inc b + ld a,b + cp 4 + jr nz,.checkDirectionForFood + + jp TrackEnemyVectorToState ;no food around, track hero + +SetupTrackEnemy: + call GetCurZone + ld b,a + ;Use bit 5 of my object address to determine which hero + ;to try and follow. + ld a,e + swap a + and %10 ;from %00 or %10 we get... + ld h,a + rrca + xor %01 + or h ;%01 or %10 + call GetHeroZone + cp b + jr z,.inSameZone + + call SetDestZone + ld a,1 + call SetState + xor a + ret + +.inSameZone + ;ld a,1 ;bit of slack + xor a ;no slack + jp MoveToLocation + +;return zero for no move +SetupMoveToLoc: + call GetActorDestLoc + ld a,h + or a + jr nz,.moveToLoc + ;ret z ;no dest loc + + ;1/32 chance of face random direction + ld a,31 + call GetRandomNumMask + or a + jr z,.faceRandom + + xor a + ret + +.faceRandom + call GetFacing + bit 2,a + ret nz ;don't change dir if split + and %11111000 + ld b,a + ld a,3 + call GetRandomNumMask + or b + call SetFacing + call StandardRedraw + xor a + ret + +.moveToLoc + push hl + call GetCurZone + pop hl + ld b,a + + call GetActorDestZone + cp b + jr z,.inSameZone + + call SetDestZone + ld a,1 + call SetState + xor a + ret + +.inSameZone + call GetActorDestLoc + xor a + ld [moveAlignPrecision],a + call AmAtLocation + or a + jr z,.findLocation + + ld hl,0 + call SetActorDestLoc + + ;call GetFacing + ;and %11111011 ;set split bit to zero + ;call SetFacing + + xor a + + ret + +.findLocation + xor a ;no slack + ld [moveAlignPrecision],a + jp MoveToLocation + + +MoveToZone: + ;------------------------------------------------------------- + ; State 1: MOVE TOWARDS DEST ZONE + ; if (curZone == destZone){ + ; this->state = 0; + ; }else{ + ; nextWayPoint=GetNextWayPoint(curZone,destZone); + ; if(this->pos == nextWayPoint){ + ; curPathPos++; + ; }else{ + ; int r = ChooseDirection(nextWayPoint, &dir); + ; if(!r){ + ; this->moveLimit = 3; + ; this->majorAxis = dir:7; + ; this->state = 2; //try to the right + ; } + ; return r; + ; } + ; } + ; return 0; + ;------------------------------------------------------------- + call GetCurZone + ld b,a ;save curZone + call GetDestZone + + ;if(curZone==destZone) + cp b + jr nz,.cur_NE_dest + + xor a + call SetState + xor a + ret + +.cur_NE_dest + swap a + or b ;destZone in 7:4, curZone in 3:0 + call GetNextWayPoint ;returns next WP loc in hl + xor a + cp h + jr nz,.validWayPoint + cp l + jr nz,.validWayPoint + + ;invalid way point, try just moving towards hero w/dumb ai + ;Use bit 5 of my object address to determine which hero + ;to try and follow. + ld a,e + swap a + and %10 ;from %00 or %10 we get... + ld h,a + rrca + xor %01 + or h ;%01 or %10 + call GetHeroZone + xor a ;no slack + jp MoveToLocation + +.validWayPoint + call AmAtLocation + or a + jr z,.moveToLocation + + call IncrementPathPos ;at next waypoint, increment waypoint + xor a + ret + +.moveToLocation + ld a,1 ;cut some slack on alignment +MoveToLocation: + ;use "dumb-AI" to move towards waypoint + ;hl should be destination location + call ChooseDirection ;args hl=curWP + ;returns a=1 on success, b=dir + or a + jr z,.decideDirectionLeftOrRight + + ;success! + ret + +.decideDirectionLeftOrRight + ld a,b + call SetDesiredDirection + ld a,6 + call SetMoveLimit + call GetMoveRightOfDesiredDir + or a + jr z,.tryLeft ;try left if no exit to right + + ld a,[secondChoiceDirection] + cp b + jr z,.tryRight ;right matches our second choice + +.tryLeft ;try left then right + ld a,8 + call SetState + xor a + ret + + +.tryRight + ;set critter to try along its right for a while + ld a,2 + call SetState + xor a + ret + +TryRight: + ;------------------------------------------------------------- + ; State 2: MOVE RIGHT TO LOOK FOR PASSAGE + ;------------------------------------------------------------- + call GetMoveRightOfDesiredDir + or a + jr z,.changeState2To4 ;can't move right + + ;if move limit has expired switch to looking left + call DecrementMoveLimit + or a + jr z,.changeState2To4 + +.moveRightCheckForward + ld a,3 ;check for forward passage next + call SetState + ld a,1 + ret + +.changeState2To4 + ld a,15 + call SetMoveLimit + ld a,4 + call SetState + xor a + ret + +TryFwdAfterRight: + ;------------------------------------------------------------- + ; State 3: JUST MOVED RIGHT, CHECK FOR FORWARD PASSAGE + ;------------------------------------------------------------- + call CheckForwardPassage + or a + jr nz,.changeState3ToState7 + + ld a,2 + call SetState + xor a + ret + +.changeState3ToState7 + ;passage exists, MF twice (once to turn, once to move) + ld a,7 + call SetState + ld a,1 + ret + +TryLeft: + ;------------------------------------------------------------- + ; State 4: MOVE LEFT CHECKING FOR FORWARD PROGRESS + ;------------------------------------------------------------- + call GetMoveLeftOfDesiredDir + or a + jr z,.changeState4To6 ;can't move left, move random + + ;if move limit has expired switch to moving random + call DecrementMoveLimit + or a + jr z,.changeState4To6 + + ld a,5 ;check for forward passage next + call SetState + ld a,1 + ret + +.changeState4To6 +ChangeToStateRandom: + ld a,15 + call SetMoveLimit + ld a,6 + call SetState + xor a + ret + +TryFwdAfterLeft: + ;------------------------------------------------------------- + ; State 5: CHECK FORWARD AFTER HAVING MOVED LEFT + ;------------------------------------------------------------- + call CheckForwardPassage + or a + jr nz,.changeState5ToState7 + + ld a,4 + call SetState + xor a + ret + +.changeState5ToState7 + ;passage exists, MF twice (once now to turn, once to move) + ld a,7 + call SetState + ld a,1 + ret + +RandomMove: + ;------------------------------------------------------------- + ; State 6: MOVE IN A RANDOM DIRECTION + ;------------------------------------------------------------- + call GetRandomMovement + + call DecrementMoveLimit + or a + jr z,.randomBackToState0 + ret + +.randomBackToState0 + ;a is zero + call SetState + ret + +MoveFwdThenState1: + ;------------------------------------------------------------- + ; State 7: Move Forward, Go to state 1 + ;------------------------------------------------------------- + ld a,1 + call SetState + call CheckForwardPassage + ret + +TryLeftFirst: + ;------------------------------------------------------------- + ; State 8: MOVE LEFT CHECKING FOR FORWARD PROGRESS + ;------------------------------------------------------------- + call GetMoveLeftOfDesiredDir + or a + jr z,.changeState8To10 ;can't move left, move right + + ;if move limit has expired switch to looking right + call DecrementMoveLimit + or a + jr z,.changeState8To10 + + ld a,9 ;check for forward passage next + call SetState + ld a,1 + ret + +.changeState8To10 + ;look to the right + ld a,15 + call SetMoveLimit + ld a,10 + call SetState + xor a + ret + +TryFwdAfterLeftFirst: + ;------------------------------------------------------------- + ; State 9: CHECK FORWARD AFTER HAVING MOVED LEFT + ;------------------------------------------------------------- + call CheckForwardPassage + or a + jr nz,.changeState9ToState7 + + ld a,8 ;go back to checking left + call SetState + xor a + ret + +.changeState9ToState7 + ;passage exists, MF twice (once now to turn, once to move) + ld a,7 + call SetState + ld a,1 + ret + +TryRightSecond: + ;------------------------------------------------------------- + ; State 10: MOVE RIGHT TO LOOK FOR PASSAGE + ;------------------------------------------------------------- + call GetMoveRightOfDesiredDir + or a + jr z,.changeState10To6 ;can't move right, move random + + ;if move limit has expired switch to moving random + call DecrementMoveLimit + or a + jr z,.changeState10To6 + +.moveRightCheckForward + ld a,11 ;check for forward passage next + call SetState + ld a,1 + ret + +.changeState10To6 + ld a,15 + call SetMoveLimit + ld a,6 + call SetState + xor a + ret + +TryFwdAfterRightSecond: + ;------------------------------------------------------------- + ; State 11: JUST MOVED RIGHT, CHECK FOR FORWARD PASSAGE + ;------------------------------------------------------------- + call CheckForwardPassage + or a + jr nz,.changeState11ToState7 + +.keepGoing + ld a,10 + call SetState + xor a + ret + +.changeState11ToState7 + ;passage exists, MF twice (once to turn, once to move) + ld a,7 + call SetState + ld a,1 + ret + +NoMove: + ;------------------------------------------------------------- + ; Default: RETURN "NO MOVE" + ;------------------------------------------------------------- + xor a + ret + +;--------------------------------------------------------------------- +; Routine: GetCurZone +; Arguments: de - "this" +; Returns: a - ID of current zone +; hl - current location +; Alters: a, hl +;--------------------------------------------------------------------- +GetCurZone:: + call GetCurLocation + + ld a,ZONEBANK ;select zone RAM parallel to map ram + ldio [$ff70],a + + ld a,[hl] ;A is curZone + and $0f + ret +;--------------------------------------------------------------------- +; Routine: GetHeroZone +; Arguments: a - prefer which hero? 1=Hero0, 2=Hero1, 0/3=Either +; de - "this" +; Returns: a - ID of zone hero is in +; hl - current location +; Alters: a, hl +;--------------------------------------------------------------------- +GetHeroZone: + push de + + ld d,a + ld a,[heroesPresent] + and d + jr z,.pickFirstAvailable + cp 3 + jr c,.getChosenHero + +.pickFirstAvailable + ld a,[heroesPresent] + and %01 + jr nz,.getChosenHero + + ld a,%10 + +.getChosenHero + ;a has the valid, desired hero %10 or %01. + ld hl,hero0_object + cp %01 ;do we want hero 0? + jr z,.haveHeroObjAddr + + ld l,(hero1_object & $ff) ;we want hero 1 + +.haveHeroObjAddr + ;Load the Hero object + ld a,[hl+] ;heroX_objectL + ld e,a + ld d,[hl] ;heroX_objectH + + call GetCurZone + pop de + ret + +;--------------------------------------------------------------------- +; Routine: GetState +; Arguments: de - "this" +; Returns: a - this->state +; hl - &this->state +; Alters: a, hl +;--------------------------------------------------------------------- +GetState: + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,OBJ_STATE + add hl,de + ld a,[hl] + and %00111111 + ret + +;--------------------------------------------------------------------- +; Routine: SetState +; Arguments: de - "this" +; a - desired state +; Returns: hl - &this->state +; Alters: a, hl +;--------------------------------------------------------------------- +SetState:: + push bc + + and %00111111 + ld b,a + + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ld hl,OBJ_STATE + add hl,de + + ld a,[hl] ;get old state + and %11000000 + or b + ld [hl],a ;save new state + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetAttackDirState +; Arguments: de - "this" +; Returns: a - 2-bit value[1:0] from this->state[7:6] +; hl - &this->state +; Alters: a, hl +;--------------------------------------------------------------------- +GetAttackDirState: + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,OBJ_STATE + add hl,de + ld a,[hl] + + rlca + rlca + and %00000011 + ret + +;--------------------------------------------------------------------- +; Routine: SetAttackDirState +; Arguments: de - "this" +; a - desired state (lower 2 bits) +; Returns: hl - &this->state +; Alters: a, hl +; Description: Sets the upper two bits of "state" to be the value +; passed in. +;--------------------------------------------------------------------- +SetAttackDirState: + push bc + + rrca + rrca + and %11000000 + ld b,a + + call GetState + or b + ld [hl],a + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetDestZone +; Arguments: de - "this" +; a - desired dest zone +; Returns: hl - &this->state +; Alters: a, hl +;--------------------------------------------------------------------- +SetDestZone: + ld hl,OBJ_DESTZONE ;hl = &this->move + add hl,de + + push af + ld a,OBJBANK ;select object RAM + ld [$ff70],a + ld a,[hl] + and %00001111 ;mask off old zone + ld [hl],a + pop af + swap a ;destZone in 7:4 + or [hl] ;combine with move + ld [hl],a ;save in move + + ret + +;--------------------------------------------------------------------- +; Routine: GetDestZone +; Arguments: de - "this" +; Returns: a - dest zone +; hl - &this->destzone +; Alters: a, hl +;--------------------------------------------------------------------- +GetDestZone: + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ld hl,OBJ_DESTZONE ;hl = &this->destzone + add hl,de + + ld a,[hl] ;get this->destzone + swap a + and %00001111 + ret + +;--------------------------------------------------------------------- +; Routine: GetPuffCount +; Arguments: de - "this" +; Returns: a - dest zone +; hl - &this->state +; Alters: a, hl +;--------------------------------------------------------------------- +GetPuffCount:: + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ld hl,OBJ_DESTZONE ;hl = &this->state + add hl,de + + ld a,[hl] ;get this->state + and %00001111 + ret + +;--------------------------------------------------------------------- +; Routine: SetPuffCount +; Arguments: a - # of puffs +; de - "this" +; Returns: a - dest zone +; hl - &this->state +; Alters: a, hl +;--------------------------------------------------------------------- +SetPuffCount:: + push bc + ld b,a + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ld hl,OBJ_DESTZONE ;hl = &this->state + add hl,de + + ld a,[hl] + and %11110000 + or b + ld [hl],a ;get this->state + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetNextWayPoint +; Arguments: de - "this" +; a - curZone[7:4], destZone[3:0] +; Returns: hl - position of next waypoint +; Alters: a, hl +; C Code: +; int curPath = pathMatrix[curZone][destZone]; +; int curWPIndex = pathList[curPath][this->pathPos]; +; int nextWayPoint = wayPointList[curWPIndex]; +; return nextWayPoint +;--------------------------------------------------------------------- +GetNextWayPoint: + push bc + + ld b,0 + ld c,a ;BC gets index to array + + call GetPathPos + push de + ld d,0 + ld e,a ;E gets pathPos + + ld a,WAYPOINTBANK ;select object list RAM + ld [$ff70],a + + ld hl,pathMatrix + add hl,bc + ld a,[hl] ;A = curPath + ld c,a ;Setup curPath*4 as offset into + xor a ; pathlist + sla c + rla + sla c + rla + ld b,a ;bc = curPath*4 + ld hl,pathList + add hl,bc ;hl = &pathList[curPath] + add hl,de ;hl = &pathList[curPath][pathPos] + ld a,[hl] ;a = curWPIndex + ld c,a ;offset into WP list = curWPIndex*2 + xor a + sla c + rla + ld b,a ;bc = offset + ld hl,wayPointList + add hl,bc + ld a,[hl+] ;low byte of waypoint location + ld h,[hl] ;high byte + ld l,a ;hl is location of next waypoint + + pop de + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetPathPos +; Arguments: de - "this" +; Returns: a - current path position (0-3) +; hl - &this->frame +; Alters: a, hl +;--------------------------------------------------------------------- +GetPathPos: + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ld hl,OBJ_FRAME + add hl,de + + ld a,[hl] ;get frame var + swap a + rrca + and %00000011 ;get pathPos in 1:0 + ret + +;--------------------------------------------------------------------- +; Routine: AmAtLocation +; Arguments: de - "this" +; hl - a location +; [moveAlignPrecision] +; Returns: a - 1 if this->loc == location, 0 if not +; Alters: a +; Note: Compares X,Y coordinates +/- [moveAlignPrecision] +;--------------------------------------------------------------------- +AmAtLocation:: + push bc + push de + push hl + + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ;not there if split bit is set + call GetFacing + and %100 + ld a,0 + jr nz,.done + + ;cur loc in bc + ld a,[de] ;low byte of cur pos + inc de + ld c,a + ld a,[de] ;high byte + ld b,a + + ;dest XY in de + call ConvertLocHLToXY + ld d,h + ld e,l + + ;cur XY in hl + ld h,b + ld l,c + call ConvertLocHLToXY + + ;compare sourceX to destX +/- 1 + ;ld a,h + ;add 1 + + ld a,[moveAlignPrecision] ;x + precision + add h + cp d + jr c,.returnFalse + + ;sub 3 + ld a,[moveAlignPrecision] ;x - precision + cpl + add 1 + add h + cp d + jr z,.checkY + jr nc,.returnFalse + +.checkY + ;compare sourceY to destY +/- 1 + ld a,[moveAlignPrecision] ;y + precision + add l + cp e + jr c,.returnFalse + + ld a,[moveAlignPrecision] ;y - precision + cpl + add 1 + add l + cp e + jr z,.returnTrue + jr nc,.returnFalse + +.returnTrue + ld a,1 + jr .done + +.returnFalse + xor a +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: IsActorAtDest +; Arguments: de - "this" +; Returns: a - 1 if actor stopped moving, 0 if not +; Alters: af +;--------------------------------------------------------------------- +IsActorAtDest:: + push hl + call GetActorDestLoc + ld a,h + or a + jr z,.returnTrue + + xor a + pop hl + ret + +.returnTrue + ld a,1 + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: ResetCurPathPos +; Arguments: de - "this" +; Returns: Nothing +; Alters: a,hl +; Description: Sets curPathPos (bits 6:5 of this->frame) to zero +;--------------------------------------------------------------------- +ResetCurPathPos: + ld a,OBJBANK ;select object RAM + ld [$ff70],a + + ld hl,OBJ_FRAME + add hl,de + + ld a,[hl] + and %10011111 + ld [hl],a + + ret + + +;--------------------------------------------------------------------- +; Routine: IncrementPathPos +; Arguments: de - "this" +; Returns: Nothing +; Alters: a,hl +; Description: Adds 1 to bits 6:5 of this->frame, preserving others +;--------------------------------------------------------------------- +IncrementPathPos: + ld a,OBJBANK ;select object RAM + ld [$ff70],a + ld hl,OBJ_FRAME + add hl,de + ld a,[hl] + bit 7,a + jr nz,.bit7WasOne + + add %00100000 + res 7,a + ld [hl],a + ret + +.bit7WasOne + add %00100000 + set 7,a + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: ChooseDirection +; Arguments: [moveAlignPrecision] 0=go to exact spot, 1=+/-1 +; de - "this" +; hl - location of destination +; Returns: a - 1 for valid move, 0 for no move +; b - direction of desired move (N,E,S,W) +; Alters: a,b,hl +; Description: Converts current "source" location and destination +; location into x,y coordinates, then picks a direction +; based on the following "dumb-AI" algorithm: +; +; int order = GetDirectionAttemptOrder(sx,sy,dx,dy); +; if(CheckDestEmpty(order[0])) +; { dir = order[0]; return 1;} +; return 0; +;--------------------------------------------------------------------- +ChooseDirection: + push bc + push de + + ld [moveAlignPrecision],a + + call ConvertLocHLToXY + push hl + + call GetCurLocation ;into hl + + call ConvertLocHLToXY + ld b,h + ld c,l + pop de ;source in bc, dest in de + + call GetDirectionAttemptOrder ;check order in A + + pop de ;retrieve ptr to this + + ;check first direction + rlca ;get first direction in 1:0 + rlca + ld c,a + and %00000011 ;mask off other choices + ld b,a + xor a + call CheckDestEmpty + or a ;check result + jr z,.checkDir2 + +.foundDirection + ld a,b ;setup b with direction, return 1 + pop bc + ld b,a + ld a,1 + ret + +.checkDir2 + ld a,c + rlca ;get second direction in 1:0 + rlca + ld c,a + and %00000011 ;mask off other choices + ld [secondChoiceDirection],a ;save for left/right decision + + ;ld b,a + ;xor a + ;call CheckDestEmpty + ;or a ;check result + ;jr z,.checkDir3 + + ;foundDirection + ;ld a,b ;setup b with direction, return 1 + ;pop bc + ;ld b,a + ;ld a,1 + ;ret + +.checkDir3 + ;ld a,c + ;rlca ;get third direction in 1:0 + ;rlca + ;ld c,a + ;and %00000011 ;mask off other choices + ;ld b,a + ;xor a + ;call CheckDestEmpty + ;or a ;check result + ;jr z,.checkDir4 + + ;foundDirection + ;ld a,b ;setup b with direction, return 1 + ;pop bc + ;ld b,a + ;ld a,1 + ;ret + +.checkDir4 + ;no direction found, load b with desired direction and return + ;false + ld a,b + pop bc + ld b,a + xor a + ret + +;--------------------------------------------------------------------- +; Routine: GetDirectionAttemptOrder +; Arguments: de - x,y of destination +; bc - x,y of origin +; Returns: a - every two bits is a direction to attempt; +; [7:6] is the first direction and so on. +; Alters: a,hl +; Description: Based off the following formula: +; +; if(sx>=dx-2){ +; if(sy < dy) order = SWEN; +; else order = NEWS; +; }else if(sy==dy){ +; if(sx < dx) order = ESNW; +; else order = WNSE; +; }else{ +; offset_x = abs(sx - dx); +; offset_y = abs(sy - dy); +; if(offset_x < offset_y){ //close horizontal gap +; if(sx < dx){ +; if(sy < dy) order = ESWN; +; else order = ENWS; +; }else{ +; if(sy < dy) order = WSEN; +; else order = WNES; +; } +; }else{ //close vertical gap first +; if(sx < dx){ +; if(sy < dy) order = SENW; +; else order = NESW; +; }else{ +; if(sy < dy) order = SWNE; +; else order = NWSE; +; } +; } +; } +; +; Note: precision of "cur==dest" depends on current value +; stored in [moveAlignPrecision], e.g. value of 1 yields +; cur>=(dest-1) && cur<=(dest+1) +; e.g. (cur+1)>=dest && (cur-1)<=dest +;--------------------------------------------------------------------- +GetDirectionAttemptOrder: +IF 0 + ;if abs(dx-sx) <= 1 and abs(dy-sY)<=1 then set tolerance to + ;zero. dx-sx yields $ff, 0, or 1 - plus one gives 0, 1, or 2 + ld h,3 + ld a,b + sub d + cp h + jr nc,.afterSetAlignPrecision + + ld a,c + sub e + cp h + jr nc,.afterSetAlignPrecision + + xor a + ld [moveAlignPrecision],a + +.afterSetAlignPrecision +ENDC + ld h,0 + + ld a,[moveAlignPrecision] + add b + ;ld a,b + ;add 1 + cp d + jr c,.sx_LessThan_dx + + ld a,[moveAlignPrecision] + cpl + add 1 + add b + cp d + jr c,.sx_Equals_dx + jr z,.sx_Equals_dx + + ;sx > dx + jr .checkYCoords + +.sx_Equals_dx + set 3,h + jr .checkYCoords + +.sx_LessThan_dx + set 1,h + +.checkYCoords + ;ld a,c + ;add 1 + ld a,[moveAlignPrecision] + add c + cp e + jr c,.sy_LessThan_dy + + ld a,[moveAlignPrecision] + cpl + add 1 + add c + ;sub 3 + cp e + jr c,.sy_Equals_dy + jr z,.sy_Equals_dy + + ;sy>dy + jr .checkOffsets + +.sy_Equals_dy + set 2,h + jr .pickOrder + +.sy_LessThan_dy + set 0,h + +.checkOffsets + bit 3,h + jr nz,.pickOrder + + ;set bit 4 if abs(sx-dx) < abs(sy-dy) + ld a,b + cp d ;is sx < dx? + jr c,.subtract_sx_from_dx + + sub d + jr .getAbsY + +.subtract_sx_from_dx + ld a,d + sub b + +.getAbsY + ld l,a ;save abs(sx-dx) in l + ld a,c + cp e + jr c,.subtract_sy_from_dy + + sub e + jr .haveAbsValues + +.subtract_sy_from_dy + ld a,e + sub c + +.haveAbsValues + cp l ;is abs(sy-dy) < abs(sx-dx)? + jr nc,.pickOrder ;no, leave bit 4 alone + + set 4,h + +.pickOrder + ld a,h + add (.orderTable & $ff) + ld l,a + ld a,0 ;not xoring to leave the carry alone + adc ((.orderTable >> 8) & $ff) + ld h,a ;hl is &orderTable[directionFlags] + ld a,[hl] + ret + +.orderTable + ;first half of table is for closing x-distance first + DB %11000110 ;WNES 0000 sx > dx, sy > dy + DB %11100100 ;WSEN 0001 sx > dx, sy < dy + DB %01001101 ;ENWS 0010 sx < dx, sy > dy + DB %01101100 ;ESWN 0011 sx < dx, sy < dy + DB %11100001 ;WSNE 0100 sy==dy, sx > dx + DB %11100001 ;WSNE 0101 sy==dy, sx > dx (invalid) + DB %01001011 ;ENSW 0110 sy==dy, sx < dx + DB %01001011 ;ENSW 0111 sy==dy, sx < dx (invalid) + DB %00011110 ;NEWS 1000 sx==dx, sy > dy + DB %10110100 ;SWEN 1001 sx==dx, sy < dy + DB %00011110 ;NEWS 1010 sx==dx, sy > dy (invalid) + DB %10110100 ;SWEN 1011 sx==dx, sy < dy (invalid) + DB %00011110 ;NEWS 1100 sx==dx, sy==dy (invalid) + DB %00011110 ;NEWS 1101 sx==dx, sy==dy (invalid) + DB %00011110 ;NEWS 1110 sx==dx, sy==dy (invalid) + DB %00011110 ;NEWS 1111 sx==dx, sy==dy (invalid) + + ;second half of table is for closing y-distance first + DB %00111001 ;NWSE 0000 sx > dx, sy > dy + DB %10110001 ;SWNE 0001 sx > dx, sy < dy + DB %00011011 ;NESW 0010 sx < dx, sy > dy + DB %10010011 ;SENW 0011 sx < dx, sy < dy + DB %10110100 ;SWEN 0100 sy==dy, sx > dx + DB %10110100 ;SWEN 0101 sy==dy, sx > dx (invalid) + DB %00011110 ;NEWS 0110 sy==dy, sx < dx + DB %00011110 ;NEWS 0111 sy==dy, sx < dx (invalid) + DB %01001011 ;ENSW 1000 sx==dx, sy > dy + DB %11100001 ;WSNE 1001 sx==dx, sy < dy + DB %01001011 ;ENSW 1010 sx==dx, sy > dy (invalid) + DB %11100001 ;WSNE 1011 sx==dx, sy < dy (invalid) + DB %00011110 ;NEWS 1100 sx==dx, sy==dy (invalid) + DB %00011110 ;NEWS 1101 sx==dx, sy==dy (invalid) + DB %00011110 ;NEWS 1110 sx==dx, sy==dy (invalid) + DB %00011110 ;NEWS 1111 sx==dx, sy==dy (invalid) + +;--------------------------------------------------------------------- +; Routine: SetDesiredDirection +; Arguments: a - (0-3) - direction critter was trying to travel +; when it ran into a wall. +; Returns: Nothing +; Alters: a,hl +; Description: Sets bits 7:6 of this->health to be value passed in +;--------------------------------------------------------------------- +SetDesiredDirection: + push bc + + rrca + rrca + and %11000000 + ld b,a + + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + and %00111111 + or b + ld [hl],a + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: SetMoveLimit / SetFireDirection +; Arguments: a - move limit 0-15 +; Returns: Nothing +; Alters: a,hl +; Description: Sets bits 3:0 of the obj->misc to indicate how many +; moves should be made before changing to a new state +;--------------------------------------------------------------------- +SetMoveLimit: +SetFireDirection: + push bc + ld b,a + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,OBJ_LIMIT + add hl,de + ld a,[hl] + and %11110000 + or b + ld [hl],a + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetMoveLimit / GetFireDirection +; Returns: a - value +; Alters: a,hl +; Description: Retrieves bits 3:0 of the obj->limit +;--------------------------------------------------------------------- +GetMoveLimit: +GetFireDirection: + ld a,OBJBANK ;select object RAM + ldio [$ff70],a + ld hl,OBJ_LIMIT + add hl,de + ld a,[hl] + and %00001111 + ret + +;--------------------------------------------------------------------- +; Routine: PointToSpecialFlags +; Arguments: de - this +; Returns: Nothing. +; Alters: a,hl +; Description: Sets HL to point to obj->limit. +;--------------------------------------------------------------------- +PointToSpecialFlags: + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_LIMIT + add hl,de + ret + +;--------------------------------------------------------------------- +; Routines: GetMoveRightOfDesiredDir +; GetMoveLeftOfDesiredDir +; Arguments: None. +; Returns: a - 0=no move, 1=move +; b - direction of move if move possible +; Alters: a,b,hl +; Description: Uses the value of this->desiredDirection to determine the +; direction to move right of the major axis. If that +; move is possible, returns 1 and the direction in b. +;--------------------------------------------------------------------- +GetMoveRightOfDesiredDir: + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + + rlca + rlca + inc a ;"turn" right + and %00000011 + ld b,a + xor a + call CheckDestEmpty + ret + +GetMoveLeftOfDesiredDir: + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + + rlca + rlca + dec a ;"turn" left + and %00000011 + ld b,a + xor a + call CheckDestEmpty + ret + +;--------------------------------------------------------------------- +; Routines: CheckForwardPassage +; Arguments: None. +; Returns: a - 0=no move, 1=move +; b - direction of move if move possible +; Alters: a,hl +; Description: Uses the value of this->desiredDirection along with +; current facing to determine the direction to move +; forward. +; Note: Returns zero if the creature is split between +; tiles (this->frame:2 == 1) +;--------------------------------------------------------------------- +CheckForwardPassage: + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_FRAME + add hl,de + + ;check for split tile first + ld a,[hl+] + and %00000100 + jr z,.continue + + xor a + ret + +.continue + inc hl ;state to misc + inc hl ;misc to health + ld a,[hl] ;get health byte + + rlca ;bits 7:6 have desired dir + rlca + and %00000011 + ld b,a + xor a + call CheckDestEmpty + ret + +;--------------------------------------------------------------------- +; Routines: DecrementMoveLimit +; Arguments: None. +; Returns: a - moves left = non-zero, no moves = 0 +; Alters: a,hl +; Description: Decrements bits 3:0 of this->misc +; Does not decrement if split across tiles +;--------------------------------------------------------------------- +DecrementMoveLimit: + push bc + + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME + add hl,de + + ld a,[hl+] ;check for split tiles + and %00000100 + jr z,.continue + + pop bc + ld a,1 + ret + +.continue + inc hl + ld a,[hl] + ld c,a + and %11110000 + ld b,a + ld a,c + dec a + and %00001111 + or b + ld [hl],a + and %00001111 ;set a to be zero/nonzero + + pop bc + ret + +BAInit: + push bc + push de + ld a,OBJBANK ;select object RAM + ld bc,8 + inc de + inc de + ld hl,.baInitTable + call MemCopy + pop de + pop bc + + ;setup baUpgrades + push bc + ld hl,baUpgrades + ld [hl],0 + ld bc,ITEM_BAHIGHIMPACT + call HasInventoryItem + jr z,.afterSetHighImpactBullets + set UPGRADE_BAHIGHIMPACT,[hl] +.afterSetHighImpactBullets + pop bc + + ;Load BA's bullet-type + call SaveFGTileInfo + ld a,HERO_BA_FLAG + call SetHeroTileSet + + ld de,classBABullet + ld hl,BABULLET_CINDEX + xor a + call LoadAssociatedClass + call GetAssociated + ld b,a + ld a,HERO_BA_FLAG + call SetHeroBulletIndex + + call RestoreFGTileInfo +.done + ret + +.baInitTable + DB 1,1,$0f,BA_MAX_HEALTH,0,0,0,GROUP_HERO + +BAPlayerCheck: + ld b,BA_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + + ld a,1 + call SetHeroMoved + +.noDirPressed + ;xor a + ;call SetMisc + +.checkButtons + call DecrementAttackDelay + or a + jr z,.done + + ;ld a,HERO_BA_FLAG + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.checkButtonB + + call GetFireDirection + ld b,a + cp 4 + jr nc,.noStrafe ;button not held down previously + +.strafeCheckSplit + ;can only fire if not split frame or firing perpendicular + call GetFacing + bit 2,a + jr z,.gotFireDirection + xor b + bit 0,a ;bit zero = 0 if parallel direction + jr z,.gotFireDirection + jr .forceMoveForward ;can't fire + +.noStrafe + call GetFacing + and %00000011 + ld b,a + call SetFireDirection + +.gotFireDirection + ld a,b + call GetLocInFront + push bc + push af + push hl + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + ld hl,baFireSound +IF UPGRADES + ld a,4 ;four points of damage +ELSE + ld a,2 ;two points of damage +ENDC + call StdFireBullet + ld a,22 + call SetAttackDelay + + pop hl + pop af + + ld b,a + ldio a,[firstMonster] + cp b + pop bc + jr z,.checkUpgrade + jr nc,.afterThrowMonster + +.checkUpgrade + ld a,[baUpgrades] + bit UPGRADE_BAHIGHIMPACT,a + jr z,.afterThrowMonster + + call ThrowObjAtHLInDirB + +.afterThrowMonster + jr .checkButtonB + +.forceMoveForward + call GetHeroMoved + ;ld a,[baMoved] + or a + jr nz,.checkButtonB + call GetFacing + and %00000011 + ld b,a + call PlayerValidateMoveAndRedraw + +.checkButtonB +.done + ret + +BAPlayerCheckSpace: + ld b,BA_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + ;can only move if in different direction than facing + ;and not opposite to fire direction + call GetFacing + and %11 + cp b + jr z,.checkButtons + + call GetFireDirection + cp 4 + jr nc,.move + + add 2 + and %11 + cp b + jr z,.checkButtons + +.move + call PlayerValidateMoveAndRedraw + + ld a,1 + call SetHeroMoved + +.noDirPressed + ;xor a + ;call SetMisc + +.checkButtons + call DecrementAttackDelay + or a + jp z,.done + + ;ld a,HERO_BA_FLAG + call GetHeroJoyInput + bit 4,a ;button A pressed? + jp z,.checkButtonB + + call GetFireDirection + ld b,a + cp 4 + jr nc,.noStrafe ;button not held down previously + +.strafeCheckSplit + ;can only fire if not split frame or firing perpendicular + call GetFacing + bit 2,a + jr z,.gotFireDirection + xor b + bit 0,a ;bit zero = 0 if parallel direction + jr z,.gotFireDirection + jr .forceMoveForward ;can't fire + +.noStrafe + call GetFacing + and %00000011 + ld b,a + call SetFireDirection + +.gotFireDirection + ld a,b + call GetLocInFront + push bc + push af + push hl + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + ld hl,baFireSound +IF UPGRADES + ld a,4 ;four points of damage +ELSE + ld a,2 ;two points of damage +ENDC + call StdFireBullet + ld a,22 + call SetAttackDelay + + ;reverse fire direction for travel direction + call GetFacing + and %11 + push af + + call GetCurLocation + ld a,b + add 2 + and %11 + push af + call ShiftObjectInDirection + call GetCurLocation + pop af + push af + call ShiftObjectInDirection + call GetCurLocation + pop af + call ShiftObjectInDirection + + call GetFacing + and %11111100 + ld b,a + pop af + or b + call SetFacing + call StandardRedrawNoCheckSprite + + pop hl + pop af + + ld b,a + ldio a,[firstMonster] + cp b + pop bc + jr z,.checkUpgrade + jr nc,.afterThrowMonster + +.checkUpgrade + ld a,[baUpgrades] + bit UPGRADE_BAHIGHIMPACT,a + jr z,.afterThrowMonster + + call ThrowObjAtHLInDirB + +.afterThrowMonster + jr .checkButtonB + +.forceMoveForward + call GetHeroMoved + ;ld a,[baMoved] + or a + jr nz,.checkButtonB + call GetFacing + and %00000011 + ld b,a + call PlayerValidateMoveAndRedraw + +.checkButtonB +.done + ret + +IF 0 +BAPlayerCheck: + ld b,BA_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + + ld a,1 + call SetHeroMoved + +.checkButtons + call DecrementAttackDelay + or a + jr z,.done + + ;ld a,HERO_BA_FLAG + call GetHeroJoyInput + bit 4,a ;button A pressed? + ret z + + call HeroSetupFireDirection + ret z + + ld a,b + call GetLocInFront + + push bc + push af + push hl + + ld hl,baFireSound +IF UPGRADES + ld a,4 ;four points of damage +ELSE + ld a,2 ;two points of damage +ENDC + call StdFireBullet + ld a,22 + call SetAttackDelay + + pop hl + pop af + + jr BAThrowMonster +.done + ret + +BAThrowMonster: + ld b,a + ldio a,[firstMonster] + cp b + pop bc + jr z,.checkUpgrade + ret nc + +.checkUpgrade + ld a,[baUpgrades] + bit UPGRADE_BAHIGHIMPACT,a + ret z + + call ThrowObjAtHLInDirB + ret +ENDC + +;--------------------------------------------------------------------- +; Routine: SetHeroBulletIndex +; Arguments: a - flag of hero (e.g. HERO_BA_FLAG) +; b - bullet index of hero +; Returns: Nothing. +; Alters: af +; Description: Stores the bullet index in the appropriate +; hero0_bullet_index or hero1_bullet_index. +;--------------------------------------------------------------------- +SetHeroBulletIndex: + push hl + ld hl,heroJoyIndex + and [hl] + ld a,b + jr nz,.useIndex1 ;note flags are still from AND + +.useIndex0 + ld [hero0_bullet_index],a + jr .done + +.useIndex1 + ld [hero1_bullet_index],a + +.done + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetHeroTileSet +; Arguments: a - flag of hero (e.g. HERO_BA_FLAG) +; Returns: Nothing. +; Alters: af +; Description: Sets [numFGTiles] to be either 6 or 26 depending on +; who's controlling the hero. Note that the original +; value of [numFGTiles] must be saved and restored +; separately. Also sets [fgDestPtr] and [numClasses] +;--------------------------------------------------------------------- +SetHeroTileSet: + push bc + push de + push hl + + ld hl,heroJoyIndex + and [hl] + jr nz,.secondTileSet + ld a,6 + ld bc,$9060 + ld d,1 + jr .pickedTileSet +.secondTileSet + ld a,26 + ld bc,$91a0 + ld d,3 +.pickedTileSet + ld [numFGTiles],a + ld a,c + ld [fgDestPtr],a + ld a,b + ld [fgDestPtr+1],a + ld a,[firstHero] + add d + ld [numClasses],a + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetHeroJoyInput +; Arguments: c - hero class index +; Returns: a - current input from [curJoy0] or [curJoy1] +; Alters: af +;--------------------------------------------------------------------- +GetHeroJoyInput: + ld a,[hero0_index] + cp c + jr nz,.useIndex1 + ld a,[curJoy0] + ret + +.useIndex1 + ld a,[curJoy1] + ret + +GetAssocJoyInput: + call GetAssociated + push bc + ld b,a + ld a,[hero0_index] + cp b + pop bc + jr nz,.useIndex1 + ld a,[curJoy0] + ret + +.useIndex1 + ld a,[curJoy1] + ret + + +;--------------------------------------------------------------------- +; Routine: SetHeroMoved +; Arguments: a - value to set to (1 or 0) +; c - class index of current hero +; Returns: Nothing. +; Alters: af +;--------------------------------------------------------------------- +SetHeroMoved: + push af + ld a,[hero0_index] + cp c + jr nz,.useIndex1 + pop af + ld [hero0_moved],a + ret + +.useIndex1 + pop af + ld [hero1_moved],a + ret + +;--------------------------------------------------------------------- +; Routine: GetHeroMoved +; Arguments: c - class index of current hero +; Returns: a - "moved" value +; Alters: af +;--------------------------------------------------------------------- +GetHeroMoved: + ld a,[hero0_index] + cp c + jr nz,.useIndex1 + ld a,[hero0_moved] + ret + +.useIndex1 + ld a,[hero1_moved] + ret + +;--------------------------------------------------------------------- +; BS +;--------------------------------------------------------------------- +BSInit: + push bc + push de + push hl + + push bc + push de + ld a,OBJBANK ;select object RAM + ld bc,8 + inc de + inc de + ld hl,.bsInitTable + call MemCopy + pop de + pop bc + + + ;setup bsUpgrades + push bc + ld hl,bsUpgrades + ld [hl],0 + ld bc,ITEM_BSSHOOTFAST + call HasInventoryItem + jr z,.afterSetShootFast + set UPGRADE_BSSHOOTFAST,[hl] +.afterSetShootFast + pop bc + + ;Load BS's bullet-type + call SaveFGTileInfo + ld a,HERO_BS_FLAG + call SetHeroTileSet + + ld de,classBSBullet + ld hl,BSBULLET_CINDEX + xor a + call LoadAssociatedClass + call GetAssociated + ld b,a + ld a,HERO_BS_FLAG + call SetHeroBulletIndex + + call RestoreFGTileInfo + + pop hl + pop de + pop bc + ret + +.bsInitTable + DB 1,1,$0f,BS_MAX_HEALTH,0,0,0,GROUP_HERO + +BSPlayerCheck: + ld b,BS_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + + ld a,1 + call SetHeroMoved + +.checkButtons + call HeroCheckCanFire + jr z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.checkButtonB + + call HeroSetupFireDirection + jr z,.checkButtonB + + ld hl,bsFireSound + ld a,1 ;one point of damage + call StdFireBullet + ld a,[bsUpgrades] + bit UPGRADE_BSSHOOTFAST,a + jr z,.shootSlow +.shootFast + ld a,10 + jr .setAttackD +.shootSlow + ld a,18 +.setAttackD + call SetAttackDelay + jr .checkButtonB + +.checkButtonB +.done + ret + +BSPlayerCheckSpace: + ld b,BS_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + ;can only move if in different direction than facing + ;and not opposite to fire direction + call GetFacing + and %11 + cp b + jr z,.checkButtons + + call GetFireDirection + cp 4 + jr nc,.move + + add 2 + and %11 + cp b + jr z,.checkButtons + +.move + call PlayerValidateMoveAndRedraw + + ld a,1 + call SetHeroMoved + +.checkButtons + call HeroCheckCanFire + jr z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.checkButtonB + + call HeroSetupFireDirection + jr z,.checkButtonB + + ld hl,bsFireSound + ld a,1 ;one point of damage + call StdFireBullet + ld a,[bsUpgrades] + bit UPGRADE_BSSHOOTFAST,a + jr z,.shootSlow +.shootFast + ld a,10 + jr .setAttackD +.shootSlow + ld a,18 +.setAttackD + call SetAttackDelay + + ;reverse fire direction for travel direction + call GetFacing + and %11 + push af + + call GetCurLocation + ld a,b + add 2 + and %11 + push af + call ShiftObjectInDirection + call GetCurLocation + pop af + push af + call ShiftObjectInDirection + call GetCurLocation + pop af + call ShiftObjectInDirection + + call GetFacing + and %11111100 + ld b,a + pop af + or b + call SetFacing + call StandardRedrawNoCheckSprite + + ;call ThrowObjAtHLInDirB + + jr .checkButtonB + +.checkButtonB +.done + ret + +HeroCheckCanFire: + call DecrementAttackDelay + or a + ret z + + call GetAssociated ;has a gun? + or a + ret + +HeroSetupFireDirection: + call GetFireDirection + ld b,a + cp 4 + jr nc,.noStrafe ;button not held down previously + +.strafeCheckSplit + ;can only fire if not split frame or firing perpendicular + call GetFacing + bit 2,a + jr z,.gotFireDirection + xor b + bit 0,a ;bit zero = 0 if parallel direction + jr z,.gotFireDirection + jr .forceMoveForward ;can't fire + +.noStrafe + call GetFacing + and %00000011 + ld b,a + call SetFireDirection + +.gotFireDirection + ld a,b + call GetLocInFront + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + or a + ret + +.forceMoveForward + call GetHeroMoved + or a + jr nz,.done + call GetFacing + and %00000011 + ld b,a + call PlayerValidateMoveAndRedraw +.done + xor a + ret + + +;--------------------------------------------------------------------- +; HAIKU +;--------------------------------------------------------------------- +HaikuInit: + ld a,OBJBANK ;select object RAM + ld bc,8 + inc de + inc de + ld hl,.haikuInitTable + call MemCopy + ret + +.haikuInitTable + DB 3,1,$0f,HAIKU_MAX_HEALTH,0,0,0,GROUP_HERO + +HaikuPlayerCheck: + ;am I dead? + ld b,HAIKU_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + or a + jr z,.checkButtons + + call GetHeroJoyInput ;no attack if braking + bit JOY_B_BIT,a + jr nz,.checkButtons + + call HaikuHitObject + +.checkButtons + call DecrementAttackDelay + or a + jr z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.checkButtonB + + ;clip to edges of map +;and (JOY_DOWN | JOY_A) +;cp (JOY_DOWN | JOY_A) +;jr nz,.skip +;ld b,b +;.skip + call GetFacing + and %11 + ld b,a + call AmAtEdgeInDirection + jr nz,.checkButtonB + + call GetFacing + and %00000011 + ld b,a + call GetLocInFront + ld a,b + call AdvanceLocHLInDirection + + call LocIsPassable + jr z,.checkButtonB + + ;haiku teleports two squares ahead + call GetFacing + push af + push bc + ld c,a + call RemoveFromMap + pop bc + call SetCurLocation + pop af + + push hl + res 2,a ;turn off split + bit 7,a ;sprite? + jr z,.afterFreeSprite + push af + call FreeSpriteLoPtr + pop af + res 7,a +.afterFreeSprite + call SetFacing + pop hl + + ;----BEGIN call MOVEOVER method + push bc + + ld a,[bgFlags] + ld b,a + push af + + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + + push af + ld a,b + bit BG_BIT_WALKOVER,a + jr z,.afterSetSpriteBit + call GetFacing + set 7,a + call SetFacing +.afterSetSpriteBit + call StandardRedrawNoCheckSprite + pop af + + ld c,a + pop af + bit BG_BIT_WALKOVER,a + jr z,.afterAction + ld a,BGACTION_MOVEOVER + call CallBGAction +.afterAction + + pop bc + ;----END call MOVEOVER method + + ld a,15 + call SetAttackDelay + jr .checkButtonB + +.forceMoveForward +.checkButtonB +.done + ret + +HaikuPlayerCheckSpace: + ;am I dead? + ld b,HAIKU_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + ;can only move if in different direction than facing + ;or object in front + ld a,4 + call GetLocInFront + or a + jr nz,.move + + call GetFacing + and %11 + cp b + jr z,.checkButtons + +.move + call PlayerValidateMoveAndRedraw + or a + jr z,.checkButtons + + call GetHeroJoyInput ;no attack if braking + bit JOY_B_BIT,a + jr nz,.checkButtons + + call HaikuHitObject + +.checkButtons + call DecrementAttackDelay + or a + jr z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.checkButtonB + + ;clip to edges of map + call GetFacing + and %11 + ld b,a + call AmAtEdgeInDirection + jr nz,.checkButtonB + + call GetFacing + and %00000011 + ld b,a + call GetLocInFront + ld a,b + call AdvanceLocHLInDirection + + call LocIsPassable + jr z,.checkButtonB + + ;haiku teleports two squares ahead + call GetFacing + push af + push bc + ld c,a + call RemoveFromMap + pop bc + call SetCurLocation + pop af + + push hl + res 2,a ;turn off split + bit 7,a ;sprite? + jr z,.afterFreeSprite + push af + call FreeSpriteLoPtr + pop af + res 7,a +.afterFreeSprite + call SetFacing + pop hl + + ;----BEGIN call MOVEOVER method + push bc + + ld a,[bgFlags] + ld b,a + push af + + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + + push af + ld a,b + bit BG_BIT_WALKOVER,a + jr z,.afterSetSpriteBit + call GetFacing + set 7,a + call SetFacing +.afterSetSpriteBit + call StandardRedrawNoCheckSprite + pop af + + ld c,a + pop af + bit BG_BIT_WALKOVER,a + jr z,.afterAction + ld a,BGACTION_MOVEOVER + call CallBGAction +.afterAction + + pop bc + ;----END call MOVEOVER method + + ld a,15 + call SetAttackDelay + jr .checkButtonB + +.forceMoveForward +.checkButtonB +.done + ret + +HaikuHitObject: + ;attack forward + call GetFacing + and %00000011 + ld b,a + ld [fireBulletDirection],a + ld a,4 + call GetLocInFront + ld a,MAPBANK + ldio [$ff70],a + + ldio a,[firstMonster] + ld b,a + ld a,[hl] + cp b + jr nc,.hitMonster + +.hitAttackableWall + call HitWall + jr .afterHit + +.hitMonster + ld b,a ;index of monster being hit + + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + ld a,1 ;one point of damage + ld [methodParamL],a + + ldio a,[curObjWidthHeight] + push af + ld a,[fireBulletDirection] + call HitObject + pop af + ldio [curObjWidthHeight],a + +.afterHit + ld hl,haikuSound + call PlaySound + ld a,15 + call SetAttackDelay + call GetFacing + ld h,a + add 2 + and %00000011 + ld l,a + ld a,h + and %11111100 + or l + call SetFacing + push bc + call GetFacing + ld c,a + call RemoveFromMap + pop bc + call StandardRedrawNoCheckSprite ;turn around + ret + +HaikuTakeDamage: + push bc + push hl + + ;store object palette color to be the explosion color later + call GetFGAttributes + and %111 + ld [bulletColor],a + + ;take damage only if I'm not facing bullet + call GetFacing + add 2 + and %11 + ld hl,bulletDirection ;was fireBulletDirection + cp [hl] + jr nz,.notFacingBullet + + ;take no damage + xor a + pop hl + pop bc + ret + +.notFacingBullet + ld a,OBJBANK + ld [$ff70],a + + ;play the explosion sound effect + ld hl,stdExplosionSound + call PlaySound + + ;blow off a puff instead of taking damage? + ld hl,OBJ_DESTZONE + add hl,de + ld a,[hl] + and %1111 + jr z,.noPuffs + + dec [hl] + ld b,METHOD_DRAW + call CallMethod + ld b,1 + jr .done + +.noPuffs + ld a,[methodParamL] + ld c,a ;c is damage + + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + ;ld b,a + ld b,0 + and %00111111 + jr z,.done ;already dead + ld b,c ;b is damage inflicted + sub c + jr nc,.notNegative + + add c ;original health + ld b,a ;is damage inflicted + xor a ;less than zero is zero +.notNegative + ld c,a + ld a,[hl] + ;ld a,b + and %11000000 + or c + ld [hl],a + +.done + ld a,b ;return damage inflicted + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Hero Lady Flower +;--------------------------------------------------------------------- +LadyInit: + ;initialize object + push bc + push de + ld a,OBJBANK ;select object RAM + ld bc,8 + inc de + inc de + ld hl,.ladyInitTable + call MemCopy + pop de + pop bc + + ;Load Lady's bullet-type + push bc + push de + call SaveFGTileInfo + ld a,HERO_FLOWER_FLAG + call SetHeroTileSet + + ld de,classLadyBullet + ld hl,LADY_BULLET_CINDEX + xor a + call LoadAssociatedClass + call GetAssociated + ld b,a + ld a,HERO_FLOWER_FLAG + call SetHeroBulletIndex + + call RestoreFGTileInfo + + pop de + pop bc + + ret + +.ladyInitTable + DB 1,1,$0f,LADY_MAX_HEALTH,0,0,0,GROUP_HERO + +LadyPlayerCheck: + ld b,LADY_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call LadyGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + + ld a,1 + call SetHeroMoved + +.checkButtons + call HeroCheckCanFire + jr z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.checkButtonB + + call HeroSetupFireDirection + jr z,.checkButtonB + + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] ;way obstructed? + or a + jr nz,.checkShootOver + + ld a,[numFreeObjects] + cp 200 + jr c,.done + +.checkShootOver ;don't shoot on shootover-only tiles + ldio a,[firstMonster] + push bc + ld b,a + ld a,[hl] + cp b + pop bc + jr nc,.fire + + call GetBGAttributes + bit BG_BIT_WALKOVER,a + jr nz,.fire + bit BG_BIT_SHOOTOVER,a + jr nz,.done + +.fire + ld hl,ladyFireSound + ld a,1 ;one point of damage + call StdFireBullet + ld a,20 + call SetAttackDelay + jr .checkButtonB + +.checkButtonB +.done + ret + +ladyFireSound: + DB 1,$35,$80,$f3,$00,$c4 + +LadyGetInput: + call GetHeroJoyInput + + bit JOY_A_BIT,a ;check strafe release + jr nz,.afterStrafeRelease ;nope + + push af + ld a,15 ;yep + call SetFireDirection + pop af + +.afterStrafeRelease + bit JOY_B_BIT,a + jr z,.normalMove + +.slowMove + xor a + ret + +.normalMove + ld a,2 + +.testMove + call HeroTestMove + or a + ret z + jp HeroDoSparks + +LadyBulletInit: + ;ld a,3 + ;call GetRandomNumMask + ;add c + ;call ChangeMyClass + + ld hl,.pansyInitTable + call StdInitFromTable + + ld a,[methodParamL] + and %00000011 + ld b,a + call GetFacing + and %11111100 + or b + call SetFacing + + call PointToSpecialFlags + set OBJBIT_THROWN,[hl] + + xor a + call SetMisc + + ret + +.pansyInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_HERO ;group + DB 1 ;has bullet + DW classPansyBullet ;associated bullet class ptr + DW PANSYBULLET_CINDEX + +LadyBulletCheck: + call GetMisc + or a + jr nz,.changedClass + +.changedClass + ld hl,.pansyCheckTable + jp StdCheckFromTable + +.pansyCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW pansyFireSound + DB 10 ;fire delay + DW LadyVectorToState + +;--------------------------------------------------------------------- +; Hero Captain Flour +;--------------------------------------------------------------------- +FlourInit: + ;initialize object + push bc + push de + ld a,OBJBANK ;select object RAM + ld bc,9 + inc de + inc de + ld hl,.flourInitTable + call MemCopy + pop de + pop bc + + ;Load Captain's bullet-type + push bc + push de + call SaveFGTileInfo + ld a,HERO_FLOUR_FLAG + call SetHeroTileSet + ld de,classFlourBullet + ld hl,FLOUR_BULLET_CINDEX + xor a + call LoadAssociatedClass + call GetAssociated + ld b,a + ld a,HERO_FLOUR_FLAG + call SetHeroBulletIndex + call RestoreFGTileInfo + pop de + pop bc + + call LinkAssocToMe + ret + +.flourInitTable + DB 1,1,$0f,FLOUR_MAX_HEALTH,0,0,0,GROUP_HERO,1 + +FlourPlayerCheck: + ld b,FLOUR_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call StdPlayerGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + +.checkButtons + call DecrementAttackDelay + or a + jr z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jr z,.done + + ld hl,flourAttackSound + call PlaySound + + ;turn into bullet + xor a + call SetMisc + call ChangeMyClassToAssociatedAndRedraw + +.done + ret + +flourAttackSound: + DB 1,$43,$81,$f7,$00,$c3 + +FlourBulletCheck: + call .flourBulletCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,1 + call HeroTestMove + + or a + ret z + + call .flourBulletCheckMain ;move first of two + ;ret + + call GetHealth + ld b,FLOUR_MAX_HEALTH + call HealthSparks + call GetHealth ;died yet? + or a + ret z + + ld a,1 ;no, move again + + call .flourBulletCheckMain ;move first of two + call GetHealth ;died yet? + or a + ret z + + ld a,1 ;no, move again + +.flourBulletCheckMain + or a + jr z,.done ;timer lsb==frame lsb, don't move yet + + ldio a,[firstMonster] + ld b,a + + ld a,4 + call GetLocInFront ;4=in front, split included + or a + jr z,.keepGoing ;nothing in front + cp b ;is a monster or what? + jr nc,.hitMonster + + ;bg in front flagged as shoot over? + ld a,[bgFlags] + bit BG_BIT_SHOOTOVER,a + jr z,.hitWall + ;and BG_FLAG_SHOOTOVER + ;jr z,.hitWall + jr .keepGoing + +.hitMonster + call .flourBulletHitMonster + ret + +.hitWall + call .flourBulletHitWall + ret + +.keepGoing + jp .flourBulletKeepGoing +.done + ret + +.flourBulletCheckDead + call GetHealth + cp b + jr c,.afterLimitHealth + + ld a,b + push af + call SetHealth + pop af + +.afterLimitHealth + or a + ret nz + + ld a,[amShowingDialog] ;don't die while showing dialog + or a + ret nz +IF INFINITEHEALTH==0 + call ChangeMyClassToAssociatedAndRedraw + xor a +ELSE + ld a,1 + or a +ENDC + ret + + +.flourBulletHitMonster + ;object in front, hit it for damage + ld b,a ;monster index in b, loc in hl + + ;get damage + ld a,1 + + ld [methodParamL],a + ld a,4 ;use direction of this object for expl + call HitObject + call .changeDirection + ret + +.flourBulletHitWall + bit BG_BIT_ATTACKABLE,a + jr z,.afterHitWall + + ld b,16 ;initial frame + call HitWall + +.afterHitWall + call .changeDirection + ret + +.flourBulletKeepGoing + call GetMisc ;bounced over three times? + cp 1 + jr c,.afterCheckStop + +.checkStop + call GetFacing ;can't be split + bit 2,a + jr nz,.afterCheckStopSound ;can't be sprite + bit 7,a + jr nz,.afterCheckStopSound + + call ChangeMyClassToAssociatedAndRedraw + ret + +.afterCheckStopSound + ld hl,flourAttackSound + call PlaySound + +.afterCheckStop + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME ;get current direction + add hl,de + ld a,[hl] + and %00000011 ;keep going same direction + ld b,a + + call Move + call StdBulletRedraw ;draw me please + ret + +.changeDirection + call GetMisc + inc [hl] + call GetFacing + ld b,a + + call GetAssocJoyInput ;allow user to dictate dir of exit + and %1111 + jr z,.reverseDir + + push bc + call JoyAToDirB + ld a,b + pop bc + push bc + ld c,a + xor b + and %11 + ld a,c + pop bc + jr nz,.gotDir + +.reverseDir + ld a,2 + add b + and %11 +.gotDir + ;call GetRandomNumZeroToN + ;inc a + res 0,b + res 1,b + or b + push af + call SetFacing + pop af + and %11 + ld b,a + ;call Move + ;call StdBulletRedraw + push bc + call GetFacing + ld c,a + call RemoveFromMap + pop bc + call StandardRedrawNoCheckSprite ;turn around + ret + +StdPlayerCheckDead: + call GetHealth + cp b + jr c,.afterLimitHealth + + ld a,b + push af + call SetHealth + pop af + +.afterLimitHealth + or a + ret nz + + ld a,[amShowingDialog] ;don't die while showing dialog + or a + ret nz +IF INFINITEHEALTH==0 + call RemoveHero + xor a +ELSE + ld a,1 + or a +ENDC + ret + +StdPlayerGetInput: + ;args: b - max health + ;returns: z - no move, nz=has move + ; b - dir of move + call GetHeroJoyInput + + bit JOY_A_BIT,a ;check strafe release + jr nz,.afterStrafeRelease ;nope + + push af + ld a,15 ;yep + call SetFireDirection + pop af + +.afterStrafeRelease + bit JOY_B_BIT,a + jr z,.normalMove + +.slowMove + ld a,2 + jr .testMove + +.normalMove + ld a,1 + +.testMove + call HeroTestMove + or a + ret z +;fall through below + +;falling through above +HeroDoSparks: + xor a + call SetHeroMoved + + call GetHealth + ;ld b,HAIKU_MAX_HEALTH ;b should be set up + call HealthSparks + + call GetHeroJoyInput + + and %1111 ;get directions only + ret z + ;jr nz,.checkEast + ;jp .checkButtons + + call JoyAToDirB + ld a,1 + or a + ret + +JoyAToDirB: +.checkEast + bit 0,a + jr z,.checkWest + ld b,DIR_EAST + ret + +.checkWest + bit 1,a + jr z,.checkNorth + ld b,DIR_WEST + ret + +.checkNorth + bit 2,a + jr z,.checkSouth + ld b,DIR_NORTH + ret + +.checkSouth + ld b,DIR_SOUTH + ret + +;--------------------------------------------------------------------- +; Routine: LocIsPassable +; Arguments: hl - location +; Alters: af +; Returns: a - 1 if passable, 0 if not +; [bgFlags] +;--------------------------------------------------------------------- +LocIsPassable: + push bc + + ldio a,[firstMonster] + ld b,a + + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + or a + jr z,.returnTrueSetBG + + cp b + jr nc,.returnFalse + + call GetBGAttributes + ld [bgFlags],a + bit BG_BIT_WALKOVER,a + jr nz,.returnTrue + +.returnFalse + xor a + pop bc + ret + +.returnTrueSetBG + call GetBGAttributes + ld [bgFlags],a + +.returnTrue + pop bc + ld a,1 + or a + ret + +;--------------------------------------------------------------------- +; Routine: AmAtEdgeInDirection +; Arguments: b - direction +; c - class index of object +; de - this +; Alters: af,hl +; Returns: a - 1=at edge, 0=not at edge +; zflag - or a +;--------------------------------------------------------------------- +AmAtEdgeInDirection: + ;clip and make sure I'm at least 2 from the edge + call GetCurLocation + call ConvertLocHLToXY + ld a,b + cp DIR_NORTH + jr z,.checkNorth + cp DIR_EAST + jr z,.checkEast + cp DIR_SOUTH + jr z,.checkSouth + +.checkWest + ld a,h + cp 2 + jr c,.returnTrue + jr .returnFalse + +.checkNorth + ld a,l + cp 2 + jr c,.returnTrue + jr .returnFalse + +.checkEast + ;add 1 to X if split + call GetFacing + bit 2,a + jr z,.xOkay + + inc h +.xOkay + ld a,[mapWidth] + sub 3 + cp h + jr c,.returnTrue + jr .returnFalse + +.checkSouth + ;add 1 to Y if split + call GetFacing + bit 2,a + jr z,.yOkay + + inc l + +.yOkay + ld a,[mapHeight] + sub 3 + cp l + jr c,.returnTrue + +.returnFalse + xor a + ret + +.returnTrue + ld a,1 + or a + ret + +;--------------------------------------------------------------------- +; Hero King Grenade +;--------------------------------------------------------------------- +GrenadePlayerInit: + ;initialize object + push bc + push de + ld a,OBJBANK ;select object RAM + ld bc,9 + inc de + inc de + ld hl,.grenadeInitTable + call MemCopy + pop de + pop bc + + xor a + call SetMisc + ret + +.grenadeInitTable + DB 1,1,$0f,GRENADE_MAX_HEALTH,0,0,0,GROUP_HERO,1 + +GrenadePlayerCheck: + ld b,GRENADE_MAX_HEALTH + call StdPlayerCheckDead + ret z + + call GrenadeGetInput + jr z,.checkButtons + + call PlayerValidateMoveAndRedraw + +.checkButtons + call DecrementAttackDelay + or a + jp z,.done + + call GetHeroJoyInput + bit 4,a ;button A pressed? + jp z,.done + + call GetMisc ;already started explosion? + or a + jr nz,.done + + ld a,1 + call SetMisc + + push bc + push de + ld a,3 + ld [bulletColor],a + ld a,15 + ldio [jiggleDuration],a + call GetCurLocation + call ConvertLocHLToXY + dec h + dec l + call ConvertXYToLocHL + ld bc,$0404 + ld de,$1407 + call CreateBigExplosion + ld hl,bigExplosionSound + call PlaySound + pop de + pop bc + + xor a + call SetHealth + + ;on correct level $1010 to blow up gate? + ld a,[curLevelIndex] + or a + jr nz,.done + ld a,[curLevelIndex+1] + cp $10 + jr nz,.done + + call GetCurZone + cp 4 + jr nz,.done + + ld a,1 + ld [levelVars+4],a ;used in $1000 VAR_EXPLODEDGATE + ;ld hl,heroesAvailable + ;res HERO_GRENADE_BIT,[hl] + + call levelCheckRAM ;start gate exploding before death + +IF 0 + ld a,[hero0_type] + cp HERO_GRENADE_FLAG + jr nz,.resetHero1 + + ;reset hero to bs + ld hl,2056 ;bs + ld a,l + ld [hero0_class],a + ld a,h + ld [hero0_class+1],a + ld a,HERO_BS_FLAG + ld [hero0_type],a + jr .done + +.resetHero1 + ;reset hero to bs + ld hl,2056 ;bs + ld a,l + ld [hero1_class],a + ld a,h + ld [hero1_class+1],a + ld a,HERO_BS_FLAG + ld [hero1_type],a +ENDC + +.done + ret + +GrenadeGetInput: + call GetHeroJoyInput + + bit JOY_A_BIT,a ;check strafe release + jr nz,.afterStrafeRelease ;nope + + push af + ld a,15 ;yep + call SetFireDirection + pop af + +.afterStrafeRelease + bit JOY_B_BIT,a + jr z,.normalMove + +.slowMove + ld a,5 + jr .testMove + +.normalMove + ld a,4 + +.testMove + call HeroTestMove + or a + ret z + jp HeroDoSparks + +;--------------------------------------------------------------------- +; Routine: StdBulletInit +; Arguments: c - class index, de - this +; [methodParamL] - 4:2=color, 1:0=direction +;--------------------------------------------------------------------- +StdBulletInit: + push bc + push hl + + ld a,OBJBANK + ld [$ff70],a + + ld a,[methodParamL] + ld b,a + + ld hl,OBJ_FRAME + add hl,de + ld a,b + and %10000011 + ld c,a + ld a,[objTimer60ths] ;set to cur timer so no move this round + or c + ld [hl+],a ;set frame + push af ;save frame for later + + ld a,1 + ld [hl+],a ;move one + ld a,b + and %00011100 ;extract color palette + srl a + srl a + ld [hl+],a ;store in misc + ld a,1 + ld [hl+],a ;health = 1 + inc hl ;skip nextL + inc hl ;skip nextH + ld a,1 + ld [hl+],a ;state=1 (length for long bullets) + ld a,GROUP_FFA + ld [hl+],a ;group = FFA + + ld a,[fireBulletDamage] + ld [hl+],a ;DESTL/Damage + + inc hl ;skip DESTH + + ;allocate a sprite if the isSprite flag starts out at 1 + pop af ;retrieve frame + bit 7,a ;sprite flag set? + jr z,.afterAlloc + + ;call AllocateSprite + ;ld [hl+],a ;set SPRITELO + +.afterAlloc + pop hl + pop bc + ret + +YellowBulletInit: + ld hl,methodParamL + ld a,[hl] + and %11100011 + or %00010100 ;yellow + ld [hl],a + jp StdBulletInit + +StdBulletRedraw: + push bc + push de + push hl + + ld a,OBJBANK + ld [$ff70],a + + xor a + ld [fgFlags],a + + ld hl,OBJ_LIMIT ;get my color + add hl,de + ld b,[hl] + jp StandardDraw + +StdCheckDead: + push hl + call GetHealth + pop hl + or a + ret nz + call StandardDie + xor a + ret ;return z flag set + +StdCheckTimeToMove: + ;time to move? + ld a,[hl+] + ld [checkTemp],a + or a + jr nz,.goAhead + inc a + ret ;return nz - no move but can attack + +.goAhead + push hl + call TestMove + pop hl + or a + ret nz ;can move + xor a ;return z + ret ;timer lsb==frame lsb, don't move yet + +StdCheckAttack: +.checkAttack + ;can I attack yet? + push hl + call DecrementAttackDelay + pop hl + or a + jr nz,.attackOkay + inc hl +.didntFindEnemy + inc hl + inc hl + inc hl + inc hl + jr .skipAttack + +.attackOkay + ld a,[hl+] + or a + jr z,.didntFindEnemy + + cp 1 + jr z,.meleeOnly + + ;Got an enemy in my sights? + xor a + ld [losLimit],a + call LookForEnemyInLOS ;returns dir of enemy in b + or a + jr z,.didntFindEnemy + jr .foundEnemy + +.meleeOnly + ld a,1 + ld [losLimit],a + call LookForEnemyInLOS ;returns dir of enemy in b + or a + jr z,.didntFindEnemy + +.foundEnemy + ;Fire instead of moving + ld a,[curObjWidthHeight] + push af + + ld a,[hl+] ;bullet damage + push hl + push af + + ld a,[hl+] ;hl = fire sound + ld h,[hl] + ld l,a + + pop af ;damage + call StdFireBullet ;b is direction to fire + pop hl + inc hl + inc hl + ld a,[hl+] ;delay + call SetAttackDelay + + pop af + ld [curObjWidthHeight],a + + ;turn to face the direction we just fired + ld a,[checkTemp] + or a + jr z,.skipMove + + call GetFacing + and %11 + cp b + jr z,.skipMove ;no need to turn + + ld a,1 + ld [moveAlignPrecision],a + call StandardValidateMoveAndRedraw + + jr .skipMove + +.skipAttack + ld a,1 ;return nz (go ahead and move) + or a + ret + +.skipMove + xor a ;return z (skip move) + ret + +StdCheckTalk: + ld a,[dialogNPC_speakerIndex] ;someone else talking? + or a + jr nz,.skipTalk + + call GetMisc ;already talked? + or a + ret nz + + call GetCurLocation + inc hl + +.checkTalkEast + ld b,DIR_EAST + call .getHeroAtHL + or a + jr nz,.foundHero + +.checkTalkWest + ld b,DIR_WEST + dec hl + dec hl + call .getHeroAtHL + or a + jr nz,.foundHero + +.checkTalkSouth + ld b,DIR_SOUTH + ld a,[mapPitch] + inc hl + call ConvertLocHLToXY + push hl + inc l + call ConvertXYToLocHL + call .getHeroAtHL + pop hl + or a + jr nz,.foundHero + +.checkTalkNorth + ld b,DIR_NORTH + dec hl + call ConvertXYToLocHL + call .getHeroAtHL + or a + jr z,.skipTalk + +.foundHero + ld a,1 + call SetMisc + + call GetFacing + and %11 + cp b + jr z,.skipMove ;no need to turn + + ld a,1 + ld [moveAlignPrecision],a + call StandardValidateMoveAndRedraw + + jr .skipMove + +.skipTalk + ld a,1 ;return nz (go ahead and move) + or a + ret + +.skipMove + xor a ;return z (skip move) + ret + +.getHeroAtHL + ;if a hero is at HL, sets up [dialogNPC*] with appropriate + ;values + ld a,MAPBANK + ldio [$ff70],a + + push bc + ld a,[hl] + or a + jr z,.checkHero1 + push hl + call EnsureTileIsHead + pop hl + ld b,a + + ld a,[hero0_index] + or a + jr z,.checkHero1 + cp b + jr z,.isHero + +.checkHero1 + ld a,[hero1_index] + or a + jr z,.notHero + cp b + jr z,.isHero + +.notHero + pop bc + xor a + ret + +.isHero + pop bc + ld [dialogNPC_heroIndex],a + ld a,c + ld [dialogNPC_speakerIndex],a + ret + +StdMove: + ld a,1 + ld [moveAlignPrecision],a + ld a,c + ld bc,.vectorToStateReturnAddress + push bc + ld c,a + ld a,[hl+] + ld h,[hl] + ld l,a + or a ;no movement if vector table is zero + jr nz,.jumpToVector + cp h + jr nz,.jumpToVector + + pop bc + jr .vectorToStateReturnAddress + +.jumpToVector + jp hl +.vectorToStateReturnAddress + or a + ret z + + call StandardValidateMoveAndRedraw +.done + ret + + + +;----bullet check methods--------------------------------------------- +WizardBulletCheck: + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,2 + call TestMove + + or a + jr z,.done ;timer lsb==frame lsb, don't move yet + + ldio a,[firstMonster] + ld b,a + + ld a,4 + call GetLocInFront ;4=in front, split included + or a + jr z,.keepGoing ;nothing in front + cp b ;is a monster or what? + jr nc,.hitMonster + + ;bg in front flagged as shoot over? + ld a,[bgFlags] + and BG_FLAG_SHOOTOVER + jr z,.hitWall + jr .keepGoing + +.hitMonster + ;'a' is class index of monster hit, hl it's location + ld b,a + call StandardDie + ld c,b + ld d,h + ld e,l + call FindObject + + ;perform a random effect on the monster hit + ld a,1 + call GetRandomNumMask + or a + jr nz,.checkMonsterRand1 + + ;freeze the monster for a bit + ld a,60 + call SetMoveDelay + ret + +.checkMonsterRand1 + ;don't let the monster attack for a bit + ld a,[hero0_index] + cp c + jr z,.setHeroAttackDelay + ld a,[hero1_index] + cp c + jr z,.setHeroAttackDelay + + ;set monster attack delay + ld a,20 + call SetAttackDelay + ret + +.setHeroAttackDelay + ld a,200 + call SetAttackDelay + ret + +.hitWall + call StdBulletHitWall + ret + +.keepGoing + jp StdBulletKeepGoing +.done + ret + +SuperSuperFastBulletCheck: + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,1 + call TestMove + + or a + ret z + + call BulletCheckCommon ;move first of two + call GetHealth ;died yet? + or a + ret z + + ;no, move again + call BulletCheckCommon + call GetHealth ;died yet? + or a + ret z + + ;no, move yet again + jr BulletCheckCommon + +SuperFastBulletCheck: + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,1 + call TestMove + + or a + ret z + + call BulletCheckCommon ;move first of two + call GetHealth ;died yet? + or a + ret z + + ld a,1 ;no, move again + jr BulletCheckCommon + +StdBulletCheck: + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,2 + call TestMove + +BulletCheckCommon: + or a + jr z,.done ;timer lsb==frame lsb, don't move yet + + ldio a,[firstMonster] + ld b,a + + ld a,4 + call GetLocInFront ;4=in front, split included + or a + jr z,.keepGoing ;nothing in front + cp b ;is a monster or what? + jr nc,.hitMonster + + ;bg in front flagged as shoot over? + ld a,[bgFlags] + and BG_FLAG_SHOOTOVER + jr z,.hitWall + jr .keepGoing + +.hitMonster + call StdBulletHitMonster + ret + ;jr .done + +.hitWall + call StdBulletHitWall + ret + ;jr .done + +.keepGoing + jp StdBulletKeepGoing +.done +bulletCheckDone: + ret + +StdBulletHitMonster: + ;object in front, hit it for damage + ld b,a ;monster index in b, loc in hl + + ;get damage from object + push hl + call GetBulletDamage + pop hl + + ld [methodParamL],a + ld a,4 ;use direction of this object for expl + call HitObject + call StandardDie + ret + +StdBulletHitWall: + ld b,16 ;initial frame + call HitWall + call StandardDie + ret + +StdBulletKeepGoing: + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME ;get current direction + add hl,de + ld a,[hl] + and %00000011 ;keep going same direction + ld b,a + + call Move + call StdBulletRedraw ;draw me please + ret + +BASuperFastBulletCheck: + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,1 + call HeroTestMove + + or a + ret z + + call BABulletCheckCommon ;move first of two + call GetHealth ;died yet? + or a + ret z + + ld a,1 ;no, move again +BABulletCheckCommon: + or a + jr z,.done ;timer lsb==frame lsb, don't move yet + + ldio a,[firstMonster] + ld b,a + + ld a,4 + call GetLocInFront ;4=in front, split included + or a + jr z,.keepGoing ;nothing in front + cp b ;is a monster or what? + jr nc,.hitMonster + + ;bg in front flagged as shoot over? + ld a,[bgFlags] + and BG_FLAG_SHOOTOVER + jr z,.hitWall + jr .keepGoing + +.hitMonster + push hl + call StdBulletHitMonster + pop hl + ld a,[baUpgrades] + bit UPGRADE_BAHIGHIMPACT,a + ret z + call GetFacing + and %11 + ld b,a + call ThrowObjAtHLInDirB + ret + ;jr .done + +.hitWall + call StdBulletHitWall + ret + ;jr .done + +.keepGoing + jp StdBulletKeepGoing +.done + ret + + + +HeroBulletCheck: + ;am I dead? + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,1 + call HeroTestMove + jp BulletCheckCommon + +HeroSuperFastBulletCheck: + call StdCheckDead + ret z + +.checkTimeToMove + ;time to move? + ld a,1 + call HeroTestMove + + or a + ret z + + call BulletCheckCommon ;move first of two + call GetHealth ;died yet? + or a + ret z + + ld a,1 ;no, move again + jp BulletCheckCommon + + +ExplodingBulletCheck: + ;am I dead? + call GetHealth + or a + jr nz,.checkTimeToMove + call StandardDie + jr .done + +.checkTimeToMove + ;time to move? + ld a,2 + call TestMove + or a + jr z,.done ;timer lsb==frame lsb, don't move yet + + ldio a,[firstMonster] + ld b,a + ld a,4 + call GetLocInFront ;4=in front, split included + or a + jr z,.keepGoing ;nothing in front + cp b ;is a monster or what? + jr nc,.hitSomething + + ;bg in front flagged as shoot over? + ld a,[bgFlags] + and BG_FLAG_SHOOTOVER + jr nz,.keepGoing + +.hitWall + call GetMoveLimit + and %00000111 + ld [bulletColor],a + call GetBulletDamage + ld b,a + call GetCurLocation + call StandardDie + call BombLocation + jr .done + +.hitSomething + ;get damage from object + push hl + call GetMoveLimit + and %00000111 + ld [bulletColor],a + call GetBulletDamage + pop hl + ld b,a + call StandardDie + call BombLocation + jr .done + +.keepGoing + call GetFacing + and %00000011 ;keep going same direction + ld b,a + + call Move + call StdBulletRedraw ;draw me please + +.done + ret + +;--------------------------------------------------------------------- +; Routine: GetLocInFront +; Arguments: a - 4=in front, same directon, split tile included +; returns zero +; 0-3=this direction AFTER split tile +; c - class index +; de - this +; Returns: a - tile index in front of object +; hl - location in front of object +; [bgFlags] - if tile in front is non-zero bg tile, +; its flags are loaded here +; Alters: af,hl +; Description: For 2x2 creatures facing east or south, returns +; location one tile further away to avoid tail of obj. +;--------------------------------------------------------------------- +GetLocInFront: + push bc + push de + + cp 4 + jr nz,.checkArbitraryAfterSplit + + xor a + ld [bgFlags],a + + ;check in direction of current facing + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME ;get facing + add hl,de + ld a,[hl] + bit 2,a + jr z,.notSplit + + ;is split, return zero and location in hl + ld h,d + ld l,e ;hl = location + ld a,[hl+] + ld h,[hl] + ld l,a + xor a ;return zero + jr .done + +.notSplit + and %00000011 ;left with cur direction in A + +.checkArbitraryAfterSplit + ld b,a ;b is dir to check + ld [getLocInitFacing],a + + xor a + ld [bgFlags],a + + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME ;get facing + add hl,de + ld a,[hl] + bit 2,a + jr nz,.isSplit + + ;not split, get offset, get location & we're done + call .getLocInHLAndOffsetInDE + jr .addedOnceOrTwice + ;ld a,[hl] + ;jr .done + +.isSplit + ;combine desired facing + cur facing in B + rlca + rlca + and %00001100 + or b + ld b,a ;B is combo cur facing+desired check + ld hl,getLocSplitTable + add l + ld l,a + ld a,[hl] + or a + jr nz, .addTwice + + ;add once + call .getLocInHLAndOffsetInDE + jr .addedOnceOrTwice + +.addTwice + ldio a,[curObjWidthHeight] + push af + ld a,1 + ldio [curObjWidthHeight],a + call .getLocInHLAndOffsetInDE + add hl,de + pop af + ldio [curObjWidthHeight],a + +.addedOnceOrTwice + ldio a,[firstMonster] + ld b,a + + ld a,[hl] + or a + jr z,.done + cp b + jr nc,.done + + ;non-zero bg tile, get attribute flags in [bgFlags] + ld e,a + ld d,((bgAttributes>>8) & $ff) + ld a,TILEINDEXBANK + ld [$ff70],a + ld a,[de] + ld [bgFlags],a + ld a,MAPBANK + ld [$ff70],a + ld a,e + +.done + pop de + pop bc + ret + +.getLocInHLAndOffsetInDE + ;location in hl + ld a,OBJBANK + ld [$ff70],a + ld h,d + ld l,e ;hl = location + ld a,[hl+] + ld h,[hl] + ld l,a + + ;direction offset in de + ld a,MAPBANK + ld [$ff70],a + + ld d,((mapOffsetNorth>>8)&$ff) ;add offset to go in front + ld a,b + and %00000011 + rla ;times two + add (mapOffsetNorth & $ff) + ld e,a ;de pts to offset + ld a,[de] + ld c,a + inc de + ld a,[de] + ld e,c + ld d,a ;de IS offset + + ;2x2 creatures facing east or south should be +1 more tile + ldio a,[curObjWidthHeight] + cp 2 + jr nz,.afterAdjust + + ld a,[getLocInitFacing] + cp 1 + jr z,.offsetTimesTwo + + cp 2 + jr nz,.afterAdjust + +.offsetTimesTwo + sla e + rl d + +.afterAdjust + add hl,de ;hl += offset + ret + +;--------------------------------------------------------------------- +; Routine: StdFireBullet +; Arguments: a - amount of damage +; b - direction to fire (0-3) or 4=in dir of facing +; c - class index of firing object +; de - "this" +; hl - ptr to fire sound data for channel 1 +; Alters: af +;--------------------------------------------------------------------- +StdFireBullet: + push bc + push de + push hl + push hl ;save temp copy of fire sound + + ld [fireBulletDamage],a + ld a,1 + ld [guardAlarm],a + + ;save my facing for later + ld a,b + cp 4 ;use current facing if b=4 + jr nz,.gotFacing ;otherwise b is facing + + call GetFacing + and %00000011 + ld b,a + call GetLocInFront + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + ld a,b +.gotFacing + ld [fireBulletDirection],a + + ;Position to place bullet + ldio a,[firstMonster] + ld b,a + ;ld a,[fireBulletDirection] + ;call GetLocInFront ;a is direction + ld a,MAPBANK + ldio [$ff70],a + ld a,[fireBulletLocation] + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + ld a,[hl] + or a + jr z,.okayToFire + cp b + jr nc,.hitMonsterRightAway + ld a,[bgFlags] + bit BG_BIT_SHOOTOVER,a + jr nz,.okayToFire + bit BG_BIT_ATTACKABLE,a + jr nz,.hitWallRightAway + + ;wall straight ahead, can't fire + pop hl ;get rid of fire sound + jr .done + +.hitWallRightAway + ld a,[fireBulletDirection] + ld [bulletDirection],a + call GetFGAttributes + and %111 + ld [bulletColor],a + call GetAssociated + push bc + ld c,a + call HitWallAfterSetDirection + pop bc + jr .playFireSound + +.hitMonsterRightAway + ;object in front, hit it for damage + ld b,a ;monster index in b, loc in hl + ld a,[fireBulletDamage] ;one point of damage + ld [methodParamL],a + ld a,[fireBulletDirection] + call HitObject + + pop hl ;fire sound + call PlaySound + jr .done + +.okayToFire + ;Get class index of bullet + call GetAssociated + ld b,c ;save class index + ld c,a ;retreive class index + + ;create the bullet + call CreateObject + + ;init bullet sending my color palette and my facing + ld a,TILEINDEXBANK + ld [$ff70],a + ld l,b ;retrieve my class index + ld h,((fgAttributes>>8) & $ff) + ld a,[hl] + rlca + rlca ;b has palette in 4:2 + and %00011100 + ld b,a + + ;retrieve facing + ld a,[fireBulletDirection] + or b + + ;set isSprite if firing over background + ld b,a + ld a,[bgFlags] + and BG_FLAG_SHOOTOVER + jr z,.doneSetSprite + + set 7,b + +.doneSetSprite + ld a,b + + ld [methodParamL],a ;param is combo color+facing + ld b,METHOD_INIT + call CallMethod + ld b,METHOD_DRAW + call CallMethod + +.playFireSound + pop hl ;fire sound + call PlaySound + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CreateBulletOfClass +; Arguments: [fireBulletDamage] - amount of damage +; [fireBulletDirection] - 1:0 - direction to fire +; [bulletColor] - bullet color +; hl - location of bullet origin +; c - class index of bullet +; Alters: af, de +;--------------------------------------------------------------------- +CreateBulletOfClass: + push bc + push de + push hl + + ld a,[fireBulletDirection] + call AdvanceLocHLInDirection + + ;Position to place bullet + ldio a,[firstMonster] + ld b,a + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + push af + call GetBGAttributes + ld [bgFlags],a + pop af + or a + jr z,.okayToFire + cp b + jr nc,.hitMonsterRightAway + ld a,[bgFlags] + bit BG_BIT_SHOOTOVER,a + jr nz,.okayToFire + bit BG_BIT_ATTACKABLE,a + jr nz,.hitWallRightAway + + ;wall straight ahead, can't fire + jr .done + +.hitWallRightAway + ld a,[fireBulletDirection] + ld [bulletDirection],a + call HitWallAfterSetDirection + jr .done + +.hitMonsterRightAway + ;object in front, hit it for damage + ld b,a ;monster index in b, loc in hl + ld a,[fireBulletDamage] ;one point of damage + ld [methodParamL],a + ld a,[fireBulletDirection] + call HitObject + jr .done + +.okayToFire + ;create the bullet + call CreateObject + + ld a,[bulletColor] + and %111 + rlca + rlca + ld b,a + ld a,[fireBulletDirection] + or b + + ;set isSprite if firing over background + ld b,a + ld a,[bgFlags] + and BG_FLAG_SHOOTOVER + jr z,.doneSetSprite + + set 7,b + +.doneSetSprite + ld a,b + + ld [methodParamL],a ;param is combo color+facing + ld b,METHOD_INIT + call CallMethod + ld b,METHOD_DRAW + call CallMethod + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetFireTimer +; Arguments: a - value to set fire timer to +; Alters: af,hl +;--------------------------------------------------------------------- +SetFireTimer: + push af + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FIRETIMER + add hl,de + pop af + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: DecrementAttackDelay +; Arguments: c - class index of object +; de - "this" +; Returns: a - 1=can attack now, 2=can't attack +; Alters: af,hl +; Description: If this->attackDelay==0 returns 1. +; Otherwise decrements attackDelay and returns zero +;--------------------------------------------------------------------- +DecrementAttackDelay: + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_FIRETIMER + add hl,de + ld a,[hl] + or a + jr z,.returnTrue + + dec [hl] + + xor a + ret + +.returnTrue + ld a,1 + ret + +;--------------------------------------------------------------------- +; Routine: SetAttackDelay +; Arguments: a - desired attack delay 0-15 +; c - class index of object +; de - "this" +; Alters: af,hl +; Description: Stores attack delay in OBJ_FIRETIMER +;--------------------------------------------------------------------- +SetAttackDelay:: + push bc + ld b,a + + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_FIRETIMER + add hl,de + ld a,b + ld [hl],a + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetAttackDelay +; Arguments: c - class index of object +; de - "this" +; Returns: a - remaining attack delay +; Alters: af,hl +; Description: Stores attack delay in OBJ_FIRETIMER +;--------------------------------------------------------------------- +GetAttackDelay:: + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_FIRETIMER + add hl,de + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routine: HitObject +; Arguments: a - 0-3=direction of explosion, 4=use this obj 4 dir +; b - class index of monster hit +; c - class index of object +; de - "this" +; hl - map location of monster hit +; [methodParamL] - points of damage +; Alters: af +; Description: Locates the creature that's been hit and calls its +; TAKE_DAMAGE method. +;--------------------------------------------------------------------- +HitObject: + push bc + push de + push hl + + ;Get direction bullet was travelling + cp a,4 + jr nz,.gotBulletDirection + + ;use this objects facing for bullet direction + ld a,OBJBANK + ld [$ff70],a + inc de + inc de + ld a,[de] +.gotBulletDirection + and %11 + ld [bulletDirection],a + + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + + ld a,b ;store monster class index in c + call EnsureTileIsHead + ld d,h ;de stores location of monster + ld e,l + ld c,a ;a is class of monster + + call FindObject + ld b,METHOD_TAKE_DAMAGE ;should fill [bulletColor] w/obj color + call CallMethod + or a + jr z,.done ;zero damage, skip explosion + + ld b,1 + call CreateExplosion + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: HitWall +; Arguments: b - initial frame +; c - class index of object +; de - "this" +; hl - map location of wall hit +; [bgFlags] +; [bulletDirection] +; Alters: af,hl +; Description: Creates an explosion over the wall that's been hit +; If wall is flagged as BG_FLAG_ATTACKABLE, wall's +; method is called with BGACTION_HIT. +;--------------------------------------------------------------------- +HitWallAfterSetDirection: + push bc + push de + jr HitWallAfterSetDirectionPushedBCDE + +HitWall: + push bc + push de + + ld a,[bgFlags] + and BG_FLAG_ATTACKABLE + jr z,HitWall_WallNotAttackable + + ;set bullet's facing + call GetFacing + and %11 + ;ld [fireBulletDirection],a + ld [bulletDirection],a + + ;save bullet's damage and color + push hl + call GetDestL + ld [fireBulletDamage],a + call GetMoveLimit + ld [bulletColor],a + pop hl + +HitWallAfterSetDirectionPushedBCDE: + ;save bullet's class index + ld a,c + ld [bulletClassIndex],a + + ;set 'b' to directional blast over wall + ld b,1 + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + + ;get the bg tiles color + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + ld c,a + call GetBGAttributes + and %111 + push af + + ld a,BGACTION_HIT + call CallBGAction + jr z,HitWall_DoneAF + + pop af + ld [bulletColor],a + ;call GetHealth + ;cp 2 + ;jr nc,.skipSound ;kludge for captain flour + + ld hl,stdExplosionSound + call PlaySound +.skipSound + jr HitWall_CreateExplosion + +HitWall_WallNotAttackable: + ;Get direction bullet was travelling + ld a,OBJBANK + ld [$ff70],a + ld h,d + ld l,e + ld a,[hl+] + ld [bulletLocation],a + ld a,[hl+] + ld [bulletLocation+1],a + + ;get bullet color + ld hl,OBJ_LIMIT + add hl,de + ld a,[hl] + ld [bulletColor],a + + ;call GetHealth + ;cp 2 + ;jr nc,.skipSound ;kludge for captain flour + ld hl,bigExplosionSound + call PlaySound +.skipSound + +HitWall_CreateExplosion: + call CreateExplosion ;uses b as initial frame + +HitWall_Done: + pop de + pop bc + ret + +HitWall_DoneAF: + pop af + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: StdTakeDamage +; Arguments: [methodParamL] - points of damage +; c - class index of object +; de - "this" +; Returns: [bulletColor] - color of this obj for explosion +; a - points of damage actually taken by this creature +; Alters: af +;--------------------------------------------------------------------- +StdTakeDamage: + push bc + push hl + + ;store object palette color to be the explosion color later + call GetFGAttributes + and %111 + ld [bulletColor],a + + ld a,OBJBANK + ld [$ff70],a + + ;play the explosion sound effect + ld hl,stdExplosionSound + call PlaySound + +TakeDamageCommon: + ;blow off a puff instead of taking damage? + ld hl,OBJ_DESTZONE + add hl,de + ld a,[hl] + and %1111 + jr z,.noPuffs + + dec [hl] + ld b,METHOD_DRAW + call CallMethod + jr .resetState + +.noPuffs + ld a,[methodParamL] + ld c,a ;c is damage + + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + ;ld b,a + ld b,0 + and %00111111 + jr z,.done ;already dead + ld b,c ;b is damage inflicted + sub c + jr nc,.notNegative + + add c ;original health + ld b,a ;is damage inflicted + xor a ;less than zero is zero +.notNegative + ld c,a + ld a,[hl] + ;ld a,b + and %11000000 + or c + ld [hl],a + +.resetState + ;reset state to zero (rethink where I'm going) + ld a,0 + call SetState + +.done + ld a,b ;return damage inflicted + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CowboyTakeDamage +; Alters: af +; Description: Pisses the cowboys off (group M becomes enemy) +;--------------------------------------------------------------------- +CowboyTakeDamage: + push bc + push de + push hl + + xor a + ld b,GROUP_HERO + ld c,GROUP_MONSTERM + call SetFOF + + ;change any remaining CowboyTalkers to Angry Cowboys + ld bc,classCowboyTalker + ld de,classAngryCowboy + call ChangeClass + + ;change any regular cowboys to angry cowboys + ld bc,classCowboy + ld de,classAngryCowboy + call ChangeClass + + ;change music to hoedown music + ld a,BANK(cowboy_gbm) + ld hl,cowboy_gbm + call IsCurMusic + jr z,.afterChangeMusic ;not in cowboy land + + ld a,BANK(hoedown_gbm) + ld hl,hoedown_gbm + call InitMusic +.afterChangeMusic + + ;zero talker index + xor a + ld [dialogBalloonClassIndex],a + + pop hl + pop de + pop bc + jp StdTakeDamage + +;--------------------------------------------------------------------- +; Routine: WallTakeDamage +; Description: Toggles the wall creature between stunned and +; normal. +;--------------------------------------------------------------------- +WallTakeDamage: + ;change to other state (stunned<->normal) + call ChangeMyClassToAssociatedAndRedraw + + ld b,METHOD_DRAW + call CallMethod +.done + xor a + ld [bulletColor],a + ld a,1 + ret + +;--------------------------------------------------------------------- +; Routine: TakeZeroDamage +;--------------------------------------------------------------------- +TakeZeroDamage: + xor a + ret + +;--------------------------------------------------------------------- +; Routine: BulletTakeDamage +; Arguments: [methodParamL] - points of damage +; c - class index of object +; de - "this" +; Returns: [bulletColor] - color of this bullet for explosion +; Alters: af +;--------------------------------------------------------------------- +BulletTakeDamage: + push bc + push hl + + ;store bullet palette color to be the explosion color later + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_LIMIT + add hl,de + ld a,[hl] + and %00000111 + ld [bulletColor],a + + ;play the explosion sound effect + ld hl,stdExplosionSound + call PlaySound + + jp TakeDamageCommon + +;--------------------------------------------------------------------- +; Routine: StdTakeDamage2x2 +; Arguments: c - class index of object +; de - this +; Alters: af +; Description: Like StandardTakeDamage except creates 4 explosion +; sprites over the area of the object when it dies. +;--------------------------------------------------------------------- +StdTakeDamage2x2: + push bc + push hl + + ;store object palette color to be the explosion color later + call GetFGAttributes + and %111 + ld [bulletColor],a + + ld a,OBJBANK + ld [$ff70],a + + ;play the explosion sound effect + ld hl,stdExplosionSound + call PlaySound + + ld a,[methodParamL] + ld c,a ;c is damage + ld b,c ;b is damage actually inflicted + + call GetHealth + and %00111111 + jr z,.doneReturnZero ;already dead + sub c + jr nc,.notNegative + + add c + ld b,a + xor a ;less than zero is zero +.notNegative + ld c,a + ld a,[hl] + and %11000000 + or c + ld [hl],a + and %00111111 + jr nz,.done + + ;it's dead; blow up the 2x2 creature + ;save original bullet hit location + push bc + ld a,[bulletLocation] + ld l,a + ld a,[bulletLocation+1] + ld h,a + push hl + + ;create explosions + call GetCurLocation + push hl + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + xor a + call .createExplosion + ld a,[bulletLocation] + inc a + ld [bulletLocation],a + ld a,1 + call .createExplosion + pop hl + call ConvertLocHLToXY + inc l + call ConvertXYToLocHL + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + ld a,2 + call .createExplosion + ld a,[bulletLocation] + inc a + ld [bulletLocation],a + ld a,3 + call .createExplosion + + ;restore original bullet location + pop hl + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + pop bc + jr .done + +.doneReturnZero + ld b,0 +.done + ld a,b + pop hl + pop bc + ret + +.createExplosion + rlca ;times 8 + rlca + rlca + and %00011000 + add 32 + ld b,a + call CreateExplosion + or a + ret z + + ;offset sprites +0,+0 to +4,+4 + call IndexToPointerHL + ld a,l + add 12 + ld l,a + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + push hl + call GetFacing + pop hl + + bit 2,a + jr z,.afterSetOffset + + bit 0,a + jr nz,.eastWest + + ;facing north/south, add +4 offset + ld a,[hl] + add 4 + ld [hl],a + jr .afterSetOffset + +.eastWest + inc hl + ld a,[hl] + add 4 + ld [hl],a + dec hl + +.afterSetOffset + ret + + +;--------------------------------------------------------------------- +; Routine: StandardDie +; Arguments: c - class index of object +; de - this +; Alters: af +; Description: Removes the object from the map and deletes it +;--------------------------------------------------------------------- +StandardDie: + push bc + push de + push hl + + ld b,c + call GetFacing + ld c,a + call RemoveFromMap + ld c,b + call SuperDie + call DeleteObject + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetHealth +; Arguments: c - class index of object +; de - this +; Returns: a - number of health points +; Alters: af,hl +;--------------------------------------------------------------------- +GetHealth:: + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + and %00111111 + ret + +;--------------------------------------------------------------------- +; Routine: SetHealth +; Arguments: a - health to set to +; de - this +; Returns: Nothing. +; Alters: af,hl +;--------------------------------------------------------------------- +SetHealth:: + push af + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_HEALTH + add hl,de + ld a,[hl] + and %11000000 + ld [hl],a + pop af + or [hl] + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: SetMoveDelay +; Arguments: a - move delay to set to (0-255) +; de - this +; Returns: Nothing. +; Alters: af,hl +;--------------------------------------------------------------------- +SetMoveDelay: + push af + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_MOVE + add de + pop af + ld [hl],a + ret + + ;push bc + ;ld b,a + ;ld a,OBJBANK + ;ldio [$ff70],a + ;ld hl,OBJ_MOVE + ;add de + ;ld a,[hl] + ;and %11110000 + ;or b + ;ld [hl],a + ;pop bc + ;ret + + +;--------------------------------------------------------------------- +; Routine: ConvertLocHLToSpriteCoords +; Arguments: hl - map location +; Returns: hl - h = x, l = y sprite coords +; Alters: af,hl +;--------------------------------------------------------------------- +ConvertLocHLToSpriteCoords:: + ;calculate screen pixel positions + ;x = (((tile_x * 8) - (mapLeft * 8)) - pixelOffset_x) + 8 + ; = (((tile_x - mapLeft) * 8) - pixelOffset_x) + 8 + ;y = (((tile_y - mapTop) * 8) - pixelOffset_y) + 16 + call ConvertLocHLToXY + + ;----------------------x coordinate--------------------------- + ld a,[mapLeft] ;a = -mapLeft + cpl + add 1 + add h ;a += tile_x + cp 32 ;any chance of being visible? + jr nc,.returnZero + rlca ;a *= 8 + rlca + rlca + ld h,a ;tile_x = a + ld a,[desiredPixelOffset_x] + cpl + add 1 + add h + add 8 + ld h,a ;tile_x=(tile_x-pixelOffset_x)+8 + + ;----------------------y coordinate--------------------------- + ld a,[mapTop] ;a = -mapTop + cpl + add 1 + add l ;a += tile_y + cp 32 ;any chance of being visible? + jr nc,.returnZero + rlca ;a *= 8 + rlca + rlca + ld l,a ;tile_y = a + ld a,[desiredPixelOffset_y] + cpl + add 1 + add l + add 16 + ld l,a ;tile_y=(tile_y-pixelOffset_y)+16 + ret + +.returnZero + ld hl,0 ;sprite not visible + ret + + +;--------------------------------------------------------------------- +; Routine: CreateExplosion +; Arguments: b - 1=moves in direction, >1 initial frame +; c - class index of object (if directed) +; de - this (if directed) +; [bulletColor] +; [bulletLocation] +; Returns: a - explosion object index +; Alters: af +; Description: Creates an explosion sprite positioned over this +; object with this object's color +; Object memory usage for sprites: +; Bytes 0,1: screen coordinate location (x,y) +; Byte 2: frame +; bit[1:0] - direction +; bit[2] - 1 if no direction +; bit[3] - unused +; bit[6:4] - color palette (0-7) +; Byte 3: (move) +; Byte 4: bit[2:0] - animation frame (0-7) +; Byte 10: initial frame (0,8,16,24,32,64,...) +; Byte 12: Lo-Ptr to OAM table position +;--------------------------------------------------------------------- +CreateExplosion:: + push bc + push de + push hl + + call AllocateSprite ;returns sprite OAM lo-ptr in a or $ff + inc a + jr z,.done ;no free sprites for explosion + + dec a + ld [methodParamL],a + + ld hl,bulletLocation + ld a,[hl+] + ld h,[hl] + ld l,a + call ConvertLocHLToSpriteCoords + ld a,b + cp 1 ;directional or round? + jr nz,.roundExplosion + + ;directed explosion + xor a + ld [explosionInitialFrame],a + ld a,[bulletColor] + ld b,a + swap b + + ld a,[bulletDirection] + and %00000011 + or b + jr .aIsSetup + +.roundExplosion + ld [explosionInitialFrame],a + ld a,[bulletColor] + swap a + or %00000100 + +.aIsSetup + ld [methodParamH],a + + ld c,CLASS_EXPLOSION + call CreateObject + + ld b,METHOD_INIT + call CallMethod + + call PointerDEToIndex ;return index of explosion object + +.done pop hl + pop de + pop bc + ret + +ExplosionInit: + push bc + push de + push hl + + push de + + ld a,[methodParamL] + call SetSpriteLo + + ;set up other stuff + ld hl,OBJ_FRAME + add hl,de + ld a,[methodParamH] ;color + direction + ld b,a + ld [hl+],a + inc hl + xor a + ld [hl],a ;anim frame zero + dec hl ;hl = move + ld d,((spriteOAMBuffer>>8) & $ff) + ld a,[methodParamL] ;loptr + ld e,a + ld a,1 + ld [hl-],a ;move = 1 + dec hl + + inc de + ld a,[hl-] ;copy y pixel coordinate + ld [de],a + dec de + ld a,[hl+] ;copy x pixel coordinate + ld [de],a + inc de + inc de ;de pts to pattern + + ;make hl point to frame lookup table + ld a,b ;get color+dir byte + and %00000111 ;mask off all but dir + add (explosionFrameTable & $ff) + ld l,a + ld h,((explosionFrameTable>>8) & $ff) + ld a,[explosionInitialFrame] + add [hl] ;pattern + ld [de],a + inc de ;de now pts to flags + set 3,l ;hl += 8 + ld a,b + swap a + and %00001111 + ld b,a + ld a,[hl] + or b + ld b,a + + ;set flak to be randomly flipped + ld a,[explosionInitialFrame] + cp 64 ;flack or spark? + ld a,b + jr c,.afterFlipFlack + + ld a,%01100000 + call GetRandomNumMask + +.afterFlipFlack + or b + ld [de],a ;store attributes + + pop de + + ;---extra setup----------------------------------------------- + ;store initial frame in DESTL + ld a,[explosionInitialFrame] + ld hl,OBJ_DESTL + add hl,de + ld [hl],a + + pop hl + pop de + pop bc + ret + +ExplosionRedraw: +ExplosionCheck: + push hl + + ld a,OBJBANK + ldio [$ff70],a + + ;Check timer slower for flack & 2x2 explosions + ld hl,OBJ_DESTL ;storage of initial frame + add hl,de + ld a,[hl] + cp 32 + jr c,.faster + cp 72 + jr nc,.faster + +.slower + ld a,3 ;slower + jr .checkMove + +.faster + ld a,1 + +.checkMove + ;my turn yet? + call TestMove + or a + jr z,.skipTurn ;timer lsb==frame lsb, don't move yet + + ld hl,OBJ_FRAME + add hl,de + ld a,[hl] + bit 2,a ;should explosion move position? + jr nz,.afterMove + + ;figger out which direction to move + ;get ptr to sprite in hl + ld hl,OBJ_SPRITELO + add hl,de + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + + bit 1,a + jr nz,.moveSouthOrWest + + bit 0,a + jr z,.moveNorth + +.moveEast + inc hl + inc [hl] + inc [hl] + jr .afterMove + +.moveNorth + dec [hl] + dec [hl] + jr .afterMove + +.moveSouthOrWest + bit 0,a + jr z,.moveSouth + +.moveWest + inc hl + dec [hl] + dec [hl] + jr .afterMove + +.moveSouth + inc [hl] + inc [hl] + +.afterMove + ld hl,OBJ_LIMIT ;get current frame + add hl,de + inc [hl] ;add one + ld a,[hl+] ;get frame in a + + ;get lo-ptr to sprite + ld hl,OBJ_SPRITELO + add hl,de + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + bit 3,a ;become 8? + jr z,.keepGoing + + ;run out of frames, delete myself + call SuperDie + call ExplosionDie + + jr .skipTurn + +.keepGoing + inc hl ;add one to actual sprite frame + inc hl + inc [hl] + +.skipTurn + pop hl + ret + +ExplosionDie: + call DeleteObject ;delete myself + ret + +IdleCantDieCheck: + ret + +DoNothingCheck: + ;am I dead? + call GetHealth + or a + jr nz,.skipMove + call StandardDie +.skipMove + ret + +;--------------------------------------------------------------------- +; Routine: StdInitFromTable +; Arguments: hl - table containing +; BYTE initial facing (4 = random) +; BYTE health (last value popped off) +; BYTE monster group (e.g. MONSTER_A) +; BYTE hasBullet +; WORD bullet class ptr +; WORD bullet class index +; Alters: all +; Returns: Nothing. +; Description: Sets +; - state to zero +; - facing to random +; - fire delay to 1 +; - group to specified +; - health to specified +; Loads associated bullet class +;--------------------------------------------------------------------- +StdInitFromTable: + ld a,[hl+] + cp 4 + jr nz,.setFacing + + ld a,3 + call GetRandomNumZeroToN + +.setFacing + push hl + call SetFacing + + xor a + call SetState + + xor a + call SetFireTimer + pop hl + + ld a,[hl+] + push hl + call SetHealth + pop hl + + ld a,[hl+] + call SetGroup + + push de + ld a,[hl+] ;has bullet? + or a + jr z,.afterLoadAssociated + + ld a,[hl+] + ld e,a + ld a,[hl+] + ld d,a + + ld a,[hl+] + ld h,[hl] + ld l,a + + ld a,1 + call LoadAssociatedClass +.afterLoadAssociated + ;hl screwed up here + pop de + ret + +;--------------------------------------------------------------------- +; Routine: StdCheckFromTable +; Arguments: hl - pointer to table containing: +; BYTE move delay +; BYTE attack type (0=no attack,1=melee,2=missile) +; BYTE bullet damage +; WORD fire sound effect address +; BYTE fire delay +; WORD vectore to state routine pointer +; Alters: all +; Returns: Nothing. +;--------------------------------------------------------------------- +StdCheckFromTable: + call StdCheckDead + ret z +StdCheckFromTableNotDead: + call StdCheckTimeToMove + ret z + call StdCheckAttack + ret z + call StdMove + ret + +ActorSpeed1Check: + ld hl,.actorCheckTable + jp StdCheckFromTable + +.actorCheckTable + DB 1 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW nullSound + DB 3 ;fire delay + DW ActorVectorToState + +GuardCheck: + ;this guy can only attack in the direction he's facing + ;call GetFacing + ;and %00000011 + ;call SetAttackDirState + + call StdCheckDead + ret z + ld hl,.guardCheckTable + call StdCheckFromTableNotDead + + ;sound the alarm if I attacked recently (attack delay non-zero) + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_FIRETIMER + add hl,de + ld a,[hl] + or a + ret z + + ld a,1 + ld [guardAlarm],a + ret + + +.guardCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW guardFireSound + DB 6 ;fire delay + DW ActorVectorToState + +;----bee-------------------------------------------------------------- +BeeInit: + ld hl,.beeInitTable + jp StdInitFromTable + +.beeInitTable + DB 4 ;initial facing + DB 1 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +BeeCheck: + push bc + ld bc,ITEM_BUGSPRAY + call HasInventoryItem + pop bc + jr z,.fastCheck + +.slowCheck + ld hl,.beeCheckTableSlow + jp StdCheckFromTable + +.fastCheck + ld hl,.beeCheckTableFast + jp StdCheckFromTable + +.beeCheckTableFast + DB 1 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW beeSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +.beeCheckTableSlow + DB 2 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW beeSound + DB 20 ;fire delay + DW StdVectorToState + + +;----Stunned Wall----------------------------------------------------- +StunnedWallInit: + ld hl,.stunnedWallInitTable + call StdInitFromTable + + jp LinkAssocToMe + +.stunnedWallInitTable + DB 4 ;initial facing + DB 63 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classWallCreature + DW WALLCREATURE_CINDEX + +StunnedWallCheck: + ld hl,.stunnedWallCheckTable + jp StdCheckFromTable + +.stunnedWallCheckTable + DB 0 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW nullSound + DB 64 ;fire delay + DW 0 + +;----Grenade---------------------------------------------------------- +GrenadeInit: + ld hl,.grenadeInitTable + jp StdInitFromTable + +.grenadeInitTable + DB 4 ;initial facing + DB 3 ;health + DB GROUP_HERO ;group + DB 0 ;has bullet + +GrenadeCheck: + call GetHealth + or a + jr nz,.check + + call GetCurLocation + ld b,4 + call BombLocation + ld hl,bigExplosionSound + call PlaySound + ld a,5 + ld [jiggleDuration],a + +.check + ld hl,.grenadeCheckTable + jp StdCheckFromTable + +.grenadeCheckTable + DB 4 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW nullSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +;----Vacuum----------------------------------------------------------- +VacuumInit: + ld hl,.vacuumInitTable + jp StdInitFromTable + +.vacuumInitTable + DB 4 ;initial facing + DB 6 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +VacuumCheck: + call StdCheckDead + ret z + ld hl,.vacuumCheckTable + call StdCheckFromTableNotDead + + ;handle 'firing' ourselves + ;can we attack yet? + call DecrementAttackDelay + or a + ret z + + push de + call GetFacing + push af + and %11 + call GetLocInFront + pop af + rlca + and %110 + push hl + ld l,a + ld a,(mapOffsetNorth & $ff) + add l + ld l,a + ld h,((mapOffsetNorth>>8)&$ff) + ld a,[hl+] + ld e,a + ld a,[hl] + ld d,a + pop hl + + xor a + ld [losLimit],a + call ScanDirectionForEnemy ;returns dir of enemy in b + or a + jr z,.doneDE + + ;suck the enemy towards me + ld a,[fireBulletLocation] ;enemy's location + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + pop de + call GetFacing + add 2 + and %11 + call ShiftObjectInDirection + ld a,3 + call SetAttackDelay + ld hl,.vacuumSuckSound + call PlaySound + ret + +.doneDE pop de + ret + +.vacuumCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW .vacuumAttackSound + DB 25 ;fire delay + DW TrackEnemyVectorToState + +.vacuumAttackSound + DB 1,$54,$c0,$f2,$00,$83 + +.vacuumSuckSound + DB 1,$55,$80,$f3,$00,$84 + +;----Slug------------------------------------------------------------- +SlugInit: + ld hl,.slugInitTable + call StdInitFromTable + ld bc,classSlugTrailBG + call FindClassIndex + jp SetMisc + +.slugInitTable + DB 4 ;initial facing + DB 5 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +SlugCheck: + call GetCurLocation + call GetFacing + and %111 + cp %100 + jr z,.adjustSouth + cp %111 + jr nz,.foundCurLocation + +.adjustWest + call ConvertLocHLToXY + inc h + jr .convertBack + +.adjustSouth + call ConvertLocHLToXY + inc l + +.convertBack + call ConvertXYToLocHL + +.foundCurLocation + push hl + + call GetHealth + push af + ld hl,.slugCheckTable + call StdCheckFromTable + pop af + or a + jr nz,.notDead + + pop af ;dead + ret + +.notDead + call GetMisc + ld b,a + pop hl ;retrieve old location + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] ;empty now? + or a + ret nz ;still something in there + + ;leave a slime trail + ld [hl],b + jp ResetMyBGSpecialFlags + +.slugCheckTable + DB 6 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW .slugFireSound + DB 15 ;fire delay + DW StdVectorToState + +.slugFireSound + DB 1,$14,$80,$f0,$00,$c1 + +;----Wall Creature---------------------------------------------------- +WallCreatureInit: + ld hl,.wallCreatureInitTable + call StdInitFromTable + + jp LinkAssocToMe + +.wallCreatureInitTable + DB 4 ;initial facing + DB 63 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classStunnedWall + DW STUNNEDWALL_CINDEX + +WallCreatureCheck: + ld hl,.wallCreatureCheckTable + jp StdCheckFromTable + +.wallCreatureCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .wallCreatureFireSound + DB 25 ;fire delay + DW TrackEnemyVectorToState + +.wallCreatureFireSound + DB 1,$7b,$40,$f0,$00,$c6 + +;----Small Bee Hive--------------------------------------------------- +BigBeeHiveInit: +SmallBeeHiveInit: + ld hl,.smallBeeHiveInitTable + jp StdInitFromTable + +.smallBeeHiveInitTable + DB DIR_EAST ;initial facing + DB 5 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classBee ;associated bullet class ptr + DW BEE_CINDEX + +SmallBeeHiveCheck: + ld hl,.smallBeeHiveCheckTable + jp StdCheckFromTable + +.smallBeeHiveCheckTable + DB 0 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW beeSound + DB 20 ;fire delay + DW 0 + +;----Scardie---------------------------------------------------------- +ScardieInit: + ld hl,.scardieInitTable + jp StdInitFromTable + +.scardieInitTable + DB 4 ;initial facing + DB 4 ;health + DB GROUP_FFA ;group + DB 0 ;has bullet + +ScardieCheck: + call StdCheckDead + ret z + ld hl,.scardieCheckTable + call StdCheckFromTableNotDead + + ;test if either hero in zone + call GetCurZone + ld b,a + ld a,1 + call GetHeroZone + cp b + jr z,.heroHere + ld a,2 + call GetHeroZone + cp b + ret nz +.heroHere + jp ScardieFlee + +.scardieCheckTable + DB 2 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW nullSound + DB 20 ;fire delay + DW StdVectorToState + +;If scardie's dest zone is == cur zone or not moving to zone then pick +;a new dest zone +ScardieFlee: + call GetCurZone + ld b,a + call GetDestZone + or a + jr z,ScardiePickNewZone + cp b + jr z,ScardiePickNewZone + + call GetState + or a + ret nz + + ld a,1 + jp SetState + +ScardiePickNewZone: + ;starting at my current zone, run through the zone path matrix + ;to see what's available + ld a,b + swap a + or b + ld l,a + ld h,((pathMatrix>>8)&$ff) + + ld a,WAYPOINTBANK + ldio [$ff70],a + + ld b,15 +.checkNewZone + push bc ;increment dest zone + ld a,l + add 1 + and %1111 + ld b,a + ld a,l + and %11110000 + or b + ld l,a + and %1111 + jr nz,.afterIncL + inc l ;dest zone can't be zero +.afterIncL + pop bc + + ld a,[hl] + or a + jr nz,.foundPath + + dec b + jr nz,.checkNewZone + + ret ;can do nothing + +.foundPath + ld a,l + and %1111 + call SetDestZone + ld a,1 + jp SetState + +ScardieTakeDamage: + call ScardieFlee + jp StdTakeDamage + +LadyBulletMove: + ld a,[hero0_type] + cp HERO_FLOWER_FLAG + jr nz,.useJoy1 + + ld hl,curJoy0 + jr .gotJoy + +.useJoy1 + ld hl,curJoy1 + +.gotJoy + ld a,[hl] + and %1111 + ret z + + call JoyAToDirB + ld a,1 + or a + ret + +;----Chomper---------------------------------------------------------- +ChomperInit: + ld hl,.chomperInitTable + jp StdInitFromTable + +.chomperInitTable + DB 4 ;initial facing + DB 4 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +ChomperCheck: + ld hl,.chomperCheckTable + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z + call StdCheckAttack + ret z + + ;see if an enemy is +2 in any direction; if so eat + ;through the wall towards it + push hl + + call AmAtEdge + jr nz,.stdMove + + ld b,0 +.checkNextDirection + call GetMapOffset + sla l ;offset times 2 + rl h + + push de + push hl + call GetCurLocation + pop de + add hl,de + pop de + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call IsMyEnemy + cp 1 + jr nz,.continue + + ;remove wall if in-between, not split and facing + ;correct direction and not a walkover tile + call GetFacing + bit 2,a + ;jr nz,.gotDirection + jr nz,.directionToB + + and %11 + cp b + ;jr nz,.gotDirection + jr nz,.directionToB + + ;remove wall before moving + push de + call GetMapOffset + push hl + call GetCurLocation + pop de + add hl,de + pop de + ld a,MAPBANK + ldio [$ff70],a + + ldio a,[firstMonster] + cp [hl] + jr z,.gotDirection + jr c,.gotDirection ;is not a wall + + ;make sure not walkover + push hl + ld l,[hl] + ld a,TILEINDEXBANK + ld [$ff70],a + ld h,((bgAttributes>>8) & $ff) + ld a,[hl] + pop hl + bit BG_BIT_WALKOVER,a + jr nz,.gotDirection ;is a walkover + + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl],a + ld hl,eatSound + call PlaySound + +.gotDirection + call StandardValidateMoveAndRedraw + pop hl + ret + +.directionToB + ld b,a + jr .gotDirection + +.continue + inc b + ld a,b + cp 4 + jr nz,.checkNextDirection + +.stdMove + pop hl + call StdMove ;nothing special found + ret + + +.chomperCheckTable + DB 5 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW .chomperSound + DB 3 ;fire delay + DW TrackEnemyVectorToState + +.chomperSound + DB 1,$59,$00,$f0,$00,$c4 + +;--------------------------------------------------------------------- +; Routine: AmAtEdge +; Arguments: c - class index of object +; de - this +; Alters: af,hl +; Returns: a - 1=at edge, 0=not at edge +; zflag - or a +;--------------------------------------------------------------------- +AmAtEdge: + ;clip and make sure I'm at least 2 from the edge + call GetCurLocation + call ConvertLocHLToXY + ld a,h + cp 2 + jr c,.returnTrue + ld a,l + cp 2 + jr c,.returnTrue + ld a,[mapWidth] + sub 3 + cp h + jr c,.returnTrue + ld a,[mapHeight] + sub 3 + cp l + jr c,.returnTrue + + xor a + ret + +.returnTrue + ld a,1 + or a + ret + +;----Reciprocator----------------------------------------------------- +ReciprocatorInit: + ld hl,.reciprocatorInitTable + jp StdInitFromTable + +.reciprocatorInitTable + DB 4 ;initial facing + DB 10 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classReciprocatorPowerup + DW RECIPROCATOR_POWERUP_CINDEX + +ReciprocatorCheck: + call GetHealth + cp 10 + jr nc,.afterChangeToPowerup + + jp ChangeMyClassToAssociatedAndRedraw + +.afterChangeToPowerup + ld hl,.reciprocatorCheckTable + jp StdCheckFromTable + +.reciprocatorCheckTable + DB 10 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW reciprocatorSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +reciprocatorSound: + DB 1,$2e,$80,$f0,$00,$c7 + +;----ReciprocatorPowerup---------------------------------------------- +ReciprocatorPowerupCheck: + ;use $c000 as temporary check table, fill in with: + ; moveDelay = health; + ; bulletDamage = 11 - health; + call GetHealth + ld b,a + ld hl,$c000 + ld [hl+],a + ld [hl],1 + inc hl + ld a,11 + sub b + ld [hl+],a + ld a,(reciprocatorSound & $ff) + ld [hl+],a + ld a,((reciprocatorSound>>8) & $ff) + ld [hl+],a + ld [hl],10 + inc hl + ld a,(TrackEnemyVectorToState & $ff) + ld [hl+],a + ld a,((TrackEnemyVectorToState>>8) & $ff) + ld [hl],a + + ld hl,$c000 + jp StdCheckFromTable + +;----Tri-------------------------------------------------------------- +TriInit: + ld hl,.triInitTable + jp StdInitFromTable + +.triInitTable + DB 4 ;initial facing + DB 4 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classTriling + DW TRILING_CINDEX + +TriCheck: + call GetHealth + or a + jr nz,.afterCheckSplit + + ;split into 3 trilings + call GetCurLocation + push bc + call GetAssociated + ld c,a + + ld b,3 +.createTrilings + call FindEmptyLocationAround1x1 + or a + jr z,.doneCreateTrilings + + push de + call CreateInitAndDrawObject + pop de + dec b + jr nz,.createTrilings + +.doneCreateTrilings + pop bc + call StandardDie + ret + +.afterCheckSplit + ld hl,.triCheckTable + jp StdCheckFromTable + +.triCheckTable + DB 12 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW .triSound + DB 25 ;fire delay + DW TrackEnemyVectorToState + +.triSound + DB 1,$43,$c0,$f0,$00,$c2 + +;----Triling---------------------------------------------------------- +TrilingInit: + ld hl,.trilingInitTable + jp StdInitFromTable + +.trilingInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classTri + DW TRI_CINDEX + +TrilingCheck: + call StdCheckDead + ret z + ld hl,.trilingCheckTable + call StdCheckFromTableNotDead + + call GetMisc ;mature into adult after 256 cycles + inc a + ld [hl],a + ret nz + + jp ChangeMyClassToAssociatedAndRedraw + +.trilingCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .trilingSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +.trilingSound + DB 1,$43,$c0,$f0,$00,$c4 + +;----Tree------------------------------------------------------------- +TreeInit: + ld hl,.treeInitTable + jp StdInitFromTable + +.treeInitTable + DB DIR_EAST ;initial facing + DB 8 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classTreeBullet ;associated bullet class ptr + DW TREEBULLET_CINDEX + +TreeCheck: + ld hl,.treeCheckTable + jp StdCheckFromTable + +.treeCheckTable + DB 0 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW treeFireSound + DB 10 ;fire delay + DW 0 + +TreeTalkerCheck: + ld hl,.treeTalkerCheckTable + jp TalkerCheckAfterSetupHL + +.treeTalkerCheckTable + DB 0 ;move delay + DW 0 + +;----Bush------------------------------------------------------------- +BushInit: + ld hl,.bushInitTable + jp StdInitFromTable + +.bushInitTable + DB DIR_EAST ;initial facing + DB 4 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classBushBullet ;associated bullet class ptr + DW TREEBULLET_CINDEX + +BushCheck: + ld hl,.bushCheckTable + jp StdCheckFromTable + +.bushCheckTable + DB 0 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW bushFireSound + DB 15 ;fire delay + DW 0 + +;----Needle----------------------------------------------------------- +NeedleInit: + ld hl,.needleInitTable + call StdInitFromTable + ld a,3 + call SetDestL ;bullet damage + xor a + call SetMoveLimit ;bullet color + xor a + jp SetMisc ;not triggered + +.needleInitTable + DB 4 ;initial facing + DB 8 ;health + DB GROUP_MONSTERC + DB 0 ;has bullet + +NeedleCheck: + call GetMisc ;triggered? + or a + jr z,.notTriggered + jp SuperFastBulletCheck +.notTriggered + ld hl,.needleCheckTable + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z + + call GetFacing + bit 2,a ;split tile? + jr nz,.noEnemy ;don't "fire" on the split tile + + xor a + ld [losLimit],a + ld a,4 +.lookInAllDirections + push af + call LookForEnemyInLOS + or a + jr nz,.foundEnemy + pop af + dec a + jr nz,.lookInAllDirections + jr .noEnemy + +.foundEnemy + pop af + ld a,1 + call SetMisc ;mark as triggered + + ld hl,.needleTriggeredSound + call PlaySound + + call .amFacingB + ret z + + ;close split tile or turn in dir + push bc + call StandardValidateMoveAndRedraw ;move in dir 'b' + pop bc + call .amFacingB + ret z + + ;closed split tile, now turn in dir + jp StandardValidateMoveAndRedraw ;move in dir 'b' + +.noEnemy + ;move forward if possible + call GetFacing + and %11 + ld b,a + xor a + call CheckDestEmpty + or a + jr z,.turnInRandomDir + jp StandardValidateMoveAndRedraw + +.turnInRandomDir + ld a,%11 + call GetRandomNumMask + ld b,a + jp StandardValidateMoveAndRedraw + +.amFacingB + call GetFacing ;turn to face enemy + and %11 + cp b + ret ;z=1 facing direction of enemy, z=0 not + +.needleCheckTable + DB 8 ;move delay + +.needleTriggeredSound + DB 1,$15,$00,$f0,$00,$c4 + +;----Bat-------------------------------------------------------------- +BatInit: + ld hl,.batInitTable + call StdInitFromTable + + ;countdown until turn invisible + ld a,15 + call GetRandomNumMask + add 10 + call SetMisc + + ld b,c ;this->assoc->assoc = this + call GetAssociated + ld c,a + call SetAssociated + + ret + +.batInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERC + DB 1 ;has bullet + DW classInvisibleBat + DW INVISIBLEBAT_CINDEX + +BatCheck: + call StdCheckDead + ret z + + ld hl,.batCheckTable + call StdCheckFromTableNotDead + + call GetAttackDelay ;attacked someone? + or a + jr z,.checkInvisible + + ld a,50 ;delay until invisible + call SetMisc + ret + +.checkInvisible + call GetMisc + dec a + ld [hl],a + ret nz + jp ChangeMyClassToAssociatedAndRedraw + +.batCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW batFireSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +batFireSound: + DB 1,$35,$00,$f0,$00,$c7 + +;----Burrower-------------------------------------------------------------- +BurrowerInit: + ld hl,.burrowerInitTable + call StdInitFromTable + + ld a,10 ;keep track of my health + call SetMisc + + ld b,c ;this->assoc->assoc = this + call GetAssociated + ld c,a + call SetAssociated + + ret + +.burrowerInitTable + DB 4 ;initial facing + DB 10 ;health (above also) + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classBurrowerDirt + DW BURROWER_DIRT_CINDEX + +BurrowerCheck: + ;burrow if I've taken damage + call GetHealth + ld b,a + call GetMisc + cp b + jr z,.normalCheck ;same health, no burrow + + ld a,64 ;cycles until unburrow + call SetMisc + + jp ChangeMyClassToAssociatedAndRedraw + +.normalCheck + ld hl,.burrowerCheckTable + jp StdCheckFromTable + +.burrowerCheckTable + DB 5 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .burrowerSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +.burrowerSound + DB 1,$2c,$c0,$f0,$00,$c4 + +;----BurrowerDirt---------------------------------------------------------- +BurrowerDirtInit: + ld hl,.burrowerDirtInitTable + jp StdInitFromTable + +.burrowerDirtInitTable + DB 4 ;initial facing + DB 10 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classBurrower + DW BURROWER_CINDEX + +BurrowerDirtCheck: + ;unburrow at end of 64 cycles + call GetMisc + dec [hl] + jr nz,.normalCheck + + call GetHealth ;track my health + call SetMisc + + jp ChangeMyClassToAssociatedAndRedraw + +.normalCheck + ld hl,.burrowerDirtCheckTable + jp StdCheckFromTable + +.burrowerDirtCheckTable + DB 7 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW nullSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +;----Dandelion-------------------------------------------------------- +DandelionInit: + ld hl,.dandelionInitTable + call StdInitFromTable + jp LinkAssocToMe + +.dandelionInitTable + DB 1 ;initial facing + DB 1 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classDandelionPuff + DW DANDELIONPUFF_CINDEX + +DandelionCheck: + call GetHealth + or a + ret nz + + call GetCurLocation + push bc + call GetAssociated + ld c,a + + ld b,4 +.createPuffs + call FindEmptyLocationAround1x1 + or a + jr z,.doneCreatePuffs + + push de + call CreateInitAndDrawObject + pop de + dec b + jr nz,.createPuffs + +.doneCreatePuffs + pop bc + + jp StdCheckDead + +;----Dandelion Puff--------------------------------------------------- +DandelionPuffInit: + ld hl,.dandelionPuffInitTable + call StdInitFromTable + ld a,255 ;countdown till take root + jp SetMisc + +.dandelionPuffInitTable + DB 4 ;initial facing + DB 1 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classDandelion + DW DANDELION_CINDEX + +DandelionPuffCheck: + call GetMisc + dec [hl] ;countdown till root + jr nz,.checkAttach + + ld a,[numFreeObjects] + cp (255-60) + jr nc,.takeRoot + + xor a + jp SetHealth + +.takeRoot + call MoveForwardIfSplit + jp ChangeMyClassToAssociatedAndRedraw + +.checkAttach + ld hl,.dandelionPuffCheckTable + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z +.checkAttack + ld a,1 + ld [losLimit],a + call LookForEnemyInLOS + or a + jr z,.noEnemy + +.enemyFound + xor a + call SetHealth ;die next time + ld hl,.dandelionPuffAttackSound + call PlaySound + ld a,[fireBulletLocation] ;location of enemy + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + ld a,MAPBANK + ld [$ff70],a + ld a,[hl] ;enemy class index + call EnsureTileIsHead + ld c,a + ld d,h + ld e,l + call FindObject + call GetPuffCount + cp 15 + ret z + add 1 + call SetPuffCount + ret + +.noEnemy + inc hl + inc hl + inc hl + inc hl + inc hl + jp StdMove + +.dandelionPuffCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW .dandelionPuffAttackSound + DB 1 ;fire delay + DW StdVectorToState + +.dandelionPuffAttackSound + DB 1,$7c,$80,$f4,$00,$84 + +;----Mouse------------------------------------------------------------ +MouseInit: + ld hl,.mouseInitTable + jp StdInitFromTable + +.mouseInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_HERO ;group + DB 1 ;has bullet + DW classUberMouse ;associated bullet class ptr + DW UBERMOUSE_CINDEX + +MouseCheck: + ;health >= 5? + call GetHealth + cp 5 + jr c,.mouseCheck + + ;want to become UberMouse + ld a,63 + call SetHealth + call GetFacing ;must not be split or sprite + and %10000100 + jr nz,.mouseCheck + + ;adjacent locations must be clear + call GetCurLocation + inc hl + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + or a + jr nz,.mouseCheck ;not empty + + ld a,[mapPitch] + add l + ld l,a + ld a,h + adc 0 + ld h,a + ld a,[hl-] + or a + jr nz,.mouseCheck + ld a,[hl] + or a + jr nz,.mouseCheck + + jp ChangeMyClassToAssociatedAndRedraw + +.mouseCheck + ld hl,.mouseCheckTable + jp StdCheckFromTable + +.mouseCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW .mouseFireSound + DB 4 ;fire delay + DW StdVectorToState + +.mouseFireSound + DB 1,$17,$80,$f0,$00,$c7 + + +;----Penguin---------------------------------------------------------- +PenguinInit: + ld hl,.penguinInitTable + jp StdInitFromTable + +.penguinInitTable + DB 4 ;initial facing + DB 5 ;health + DB GROUP_MONSTERB ;group + DB 0 ;has bullet + +PenguinCheck: + ld hl,.penguinCheckTable + jp StdCheckFromTable + +.penguinCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .penguinFireSound + DB 4 ;fire delay + DW TrackEnemyVectorToState + +.penguinFireSound + DB 1,$2e,$c0,$f0,$00,$c6 + +;----BIOS------------------------------------------------------------- +BIOSInit: + ld hl,.BIOSInitTable + jp StdInitFromTable + +.BIOSInitTable + DB 4 ;initial facing + DB 4 ;health + DB GROUP_MONSTERA ;group + DB 0 ;has bullet + +BIOSCheck: + ld hl,.BIOSCheckTable + jp StdCheckFromTable + +.BIOSCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .BIOSFireSound + DB 4 ;fire delay + DW TrackEnemyVectorToState + +.BIOSFireSound + DB 1,$01,$00,$f0,$00,$c4 + +;----Crouton Hulk----------------------------------------------------- +CroutonHulkInit: + ld hl,.croutonHulkInitTable + jp StdInitFromTable + +.croutonHulkInitTable + DB 4 ;initial facing + DB 10 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classCroutonBullet ;associated bullet class ptr + DW CROUTONBULLET_CINDEX + +CroutonHulkCheck: + ld hl,.croutonHulkCheckTable + jp StdCheckFromTable + +.croutonHulkCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW hulkFireSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +CroutonGruntInit: + ld hl,.croutonGruntInitTable + jp StdInitFromTable + +.croutonGruntInitTable + DB 4 ;initial facing + DB 5 ;health + DB GROUP_MONSTERA ;group + DB 0 ;has bullet + +;----Crouton Grunt---------------------------------------------------- +CroutonGruntCheck: + ld hl,.croutonGruntCheckTable + jp StdCheckFromTable + +.croutonGruntCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW gruntFireSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +;----Wolf------------------------------------------------------------- +WolfSheepInit: + ld hl,.wolfSheepInitTable + jp StdInitFromTable + +.wolfSheepInitTable + DB 4 ;initial facing + DB 3 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classWolf ;associated bullet class ptr + DW WOLF_CINDEX + +WolfInit: + ld hl,.wolfInitTable + call StdInitFromTable + + call LinkAssocToMe + + jp ChangeMyClassToAssociatedAndRedraw + +.wolfInitTable: + DB 4 ;initial facing + DB 3 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classWolfSheep ;associated bullet class ptr + DW SHEEP_CINDEX + +WolfCheck: + call StdCheckDead + ret z + + ld hl,.wolfCheckTable + call StdCheckFromTableNotDead + + call GetAttackDelay + or a + jr z,.checkChangeToSheep + + ld a,100 ;delay until I can change back + call SetMisc + ret + +.checkChangeToSheep + ;turn back into a sheep after bit + call GetMisc ;countdown until sheep + dec a + ld [hl],a + ret nz + jp ChangeMyClassToAssociatedAndRedraw + +.wolfCheckTable: + DB 2 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW wolfFireSound + DB 6 ;fire delay + DW TrackEnemyVectorToState + +WolfSheepCheck: + call StdCheckDead + ret z + + ld hl,.wolfSheepCheckTable + call StdCheckFromTableNotDead + + ;turn into a wolf if I attacked somebody + call GetAttackDelay ;attacked this round? + or a + ret z + + ;change into wolf + ld a,100 ;delay until I can change back + call SetMisc + jp ChangeMyClassToAssociatedAndRedraw + +.wolfSheepCheckTable: + DB 5 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW wolfFireSound + DB 6 ;fire delay + DW TrackEnemyVectorToState + +wolfFireSound: + DB 1,$1d,$40,$f2,$00,$82 + +WolfSheepTakeDamage: + call StdTakeDamage + + ;change into wolf + ld a,100 ;delay until I can change back + call SetMisc + jp ChangeMyClassToAssociatedAndRedraw + +;--------------------------------------------------------------------- +; LinkAssocToMe +;--------------------------------------------------------------------- +LinkAssocToMe: + push bc + ld b,c ;this->assoc->assoc = this + call GetAssociated + ld c,a + call SetAssociated + pop bc + ret + +;----Snake------------------------------------------------------------ +SnakeInit: + ld hl,.snakeInitTable + jp StdInitFromTable + +.snakeInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +SnakeCheck: + push bc + ld bc,ITEM_SNAKEBITEKIT + call HasInventoryItem + pop bc + jr z,.checkNoKit + +.checkWithKit + ld hl,.snakeCheckTable + jp StdCheckFromTable + +.checkNoKit + ld hl,.snakeCheckTableNoKit + jp StdCheckFromTable + +.snakeCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW .snakeFireSound + DB 4 ;fire delay + DW TrackEnemyVectorToState + +.snakeCheckTableNoKit + DB 3 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 20 ;bullet damage + DW .snakeFireSound + DB 4 ;fire delay + DW TrackEnemyVectorToState + +.snakeFireSound + DB 4,$00,$f3,$41,$80 + +;----Neanderthal------------------------------------------------------ +NeanderthalInit: + ld hl,.neanderthalInitTable + call StdInitFromTable + ld a,4 + jp SetMisc ;direction throwing enemy 4=none + +.neanderthalInitTable + DB 4 ;initial facing + DB 6 ;health + DB GROUP_MONSTERD ;group + DB 0 ;has bullet + +NeanderthalCheck: + ld hl,.neanderthalCheckTable + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z + call .neanderthalCheckAttack + ret z + call StdMove + ret + +.neanderthalCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .neanderthalAttackSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +.neanderthalCheckAttack + ;can I attack yet? + push hl + call DecrementAttackDelay + pop hl + or a + jr nz,.attackOkay + inc hl +.didntFindEnemy + inc hl + inc hl + inc hl + inc hl + jr .skipAttack + +.attackOkay + ld a,[hl+] + +.meleeOnly + ld a,1 + ld [losLimit],a + call LookForEnemyInLOS ;returns dir of enemy in b + or a + jr z,.didntFindEnemy + +.foundEnemy + + ;Fire instead of moving + ld a,[curObjWidthHeight] + push af + + ld a,[hl+] ;bullet damage + push hl + push af + + ld a,[hl+] ;hl = fire sound + ld h,[hl] + ld l,a + + pop af ;damage + call StdFireBullet ;b is direction to fire + pop hl + inc hl + inc hl + ld a,[hl+] ;delay + call SetAttackDelay + + ;throw enemy object away from us + push hl + ld a,[fireBulletLocation] + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + call ThrowObjAtHLInDirB + pop hl + + pop af + ld [curObjWidthHeight],a + + ;turn to face the direction we just fired + call GetFacing + and %11 + cp b + jr z,.skipMove ;no need to turn + + ld a,1 + ld [moveAlignPrecision],a + call StandardValidateMoveAndRedraw + + jr .skipMove + +.skipAttack + ld a,1 ;return nz (go ahead and move) + or a + ret + +.skipMove + xor a ;return z (skip move) + ret + +.neanderthalAttackSound + DB 1,$79,$c0,$f3,$00,$c3 + +ThrowObjAtHLInDirB: + push bc + push de + push hl + ldio a,[curObjWidthHeight] + push af + ld a,MAPBANK + ldio [$ff70],a + ldio a,[firstMonster] + ld c,a + ld a,[hl] + cp c + jr c,.done ;no monster here + + call EnsureTileIsHead + ld d,h + ld e,l + ld c,a + call GetFGAttributes + and FLAG_NOTHROW + jr nz,.done + + call FindObject + call SetObjWidthHeight + call StandardValidateMoveAndRedraw + call StandardValidateMoveAndRedraw + call PointToSpecialFlags + set OBJBIT_THROWN,[hl] + + ;set timer to current-1 to ensure this moves next check + ld hl,OBJ_FRAME + add hl,de + ld a,[hl] + and %11100111 + ld b,a + ld a,[objTimer60ths] + sub %00001000 + and %00011000 + or b + ld [hl+],a + ld [hl],1 ;can move next turn + +.done + pop af + ldio [curObjWidthHeight],a + pop hl + pop de + pop bc + ret + +;----Crow------------------------------------------------------------- +CrowInit: + ld hl,.crowInitTable + call StdInitFromTable + ld hl,0 + call SetFoodIndexRange + ret + +.crowInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +CrowCheck: + ld hl,.crowCheckTable + jp StdCheckFromTable + +.crowCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .crowSound + DB 20 ;fire delay + DW EatVectorToState + +.crowSound + DB 1,$4c,$80,$f0,$00,$c5 + +;----Scarecrow-------------------------------------------------------- +ScarecrowInit: + ld hl,.scarecrowInitTable + jp StdInitFromTable + +.scarecrowInitTable + DB 1 ;initial facing + DB 20 ;health + DB GROUP_MONSTERN ;group + DB 0 ;has bullet + +ScarecrowCheck: + ld hl,.crowCheckTable + jp StdCheckFromTable + +.crowCheckTable + DB 0 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW nullSound + DB 20 ;fire delay + DW 0 + +ScarecrowTakeDamage: + ;call GetFacing + ;xor %10 + ;call SetFacing + ;ld b,METHOD_DRAW + ;call CallMethod + jp StdTakeDamage2x2 + +;----Alligator-------------------------------------------------------- +AlligatorInit: + ld hl,.alligatorInitTable + jp StdInitFromTable +.alligatorInitTable + DB 4 ;initial facing + DB 13 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +AlligatorCheck: + call StdCheckDead + ret z + + ;save original facing + call GetFacing + and %00000011 + push af + + ld hl,.alligatorCheckTable + call StdCheckFromTableNotDead + + ;if facing changes set move delay to 10 + call GetFacing + and %00000011 + pop bc + cp b + ret z + ld a,10 + call SetMoveDelay + ret + +.alligatorCheckTable + DB 2 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .alligatorAttackSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +.alligatorAttackSound + DB 1,$d9,$00,$f0,$00,$c4 + +;----Scorpion--------------------------------------------------------- +ScorpionInit: + ld hl,.scorpionInitTable + jp StdInitFromTable + +.scorpionInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERC + DB 0 ;has bullet + +ScorpionCheck: + ld hl,.scorpionCheckTable + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z + call .scorpionCheckAttack + ret z + call StdMove + ret + +.scorpionCheckAttack + ;can I attack yet? + push hl + call DecrementAttackDelay + pop hl + or a + jr nz,.attackOkay + inc hl +.didntFindEnemy + inc hl + inc hl + inc hl + inc hl + jr .skipAttack + +.attackOkay + ld a,[hl+] + +.meleeOnly + ld a,1 + ld [losLimit],a + call LookForEnemyInLOS ;returns dir of enemy in b + or a + jr z,.didntFindEnemy + +.foundEnemy + ;Fire instead of moving + ld a,[curObjWidthHeight] + push af + + ld a,[hl+] ;bullet damage + push hl + push af + + ld a,[hl+] ;hl = fire sound + ld h,[hl] + ld l,a + + pop af ;damage + call StdFireBullet ;b is direction to fire + pop hl + inc hl + inc hl + ld a,[hl+] ;delay + call SetAttackDelay + + ;freeze enemy + push bc + push de + push hl + ld a,[fireBulletLocation] + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call EnsureTileIsHead + ld d,h + ld e,l + ld c,a + call FindObject + + ;freeze the enemy for a bit + call GetHealth + or a + jr z,.afterFreeze + + ld a,60 + call SetMoveDelay + + call GetHealth ;deal 1 point of damage + dec a ;(so can't get stuck with Haiku) + call SetHealth + +.afterFreeze + pop hl + pop de + pop bc + + pop af + ld [curObjWidthHeight],a + + ;turn to face the direction we just fired + call GetFacing + and %11 + cp b + jr z,.skipMove ;no need to turn + + ld a,1 + ld [moveAlignPrecision],a + call StandardValidateMoveAndRedraw + + jr .skipMove + +.skipAttack + ld a,1 ;return nz (go ahead and move) + or a + ret + +.skipMove + xor a ;return z (skip move) + ret + +.scorpionCheckTable + DB 5 ;move delay + DB 1 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW scorpionFireSound + DB 15 ;fire delay + DW StdVectorToState + +scorpionFireSound: + DB 1,$3b,$c0,$f0,$00,$c4 + + +;----Bow-------------------------------------------------------------- +BowInit: + ld hl,.bowInitTable + jp StdInitFromTable + +.bowInitTable + DB 4 ;initial facing + DB 3 ;health + DB GROUP_MONSTERC + DB 1 ;has bullet + DW classArrowBullet + DW ARROWBULLET_CINDEX + +BowCheck: + ld hl,.bowCheckTable + jp StdCheckFromTable + +.bowCheckTable + DB 3 ;move delay + DB 2 ;attack type (0=none,1=melee,2=missile) + DB 2 ;bullet damage + DW bowFireSound + DB 8 ;fire delay + DW StdVectorToState + +bowFireSound: + DB 1,$25,$00,$f0,$00,$c3 + +;----Cowboy----------------------------------------------------------- +CowboyInit: + ld hl,.cowboyInitTable + jp StdInitFromTable + +.cowboyInitTable + DB 4 ;initial facing + DB 4 ;health + DB GROUP_MONSTERM ;friends + DB 1 ;has bullet + DW classCowboyBullet + DW COWBOYBULLET_CINDEX + +CowboyCheck: + ld hl,.cowboyCheckTable + jp StdCheckFromTable + +.cowboyCheckTable + DB 3 ;move delay + DB 2 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW cowboyFireSound + DB 6 ;fire delay + DW StdVectorToState + +cowboyFireSound: + DB 4,$00,$f2,$42,$80 + +AngryCowboyCheck: + ld hl,.cowboyCheckTable + jp StdCheckFromTable + +.cowboyCheckTable + DB 2 ;move delay + DB 2 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW cowboyFireSound + DB 6 ;fire delay + DW TrackEnemyVectorToState + +;----Crouton Doctor / Guard------------------------------------------- +CroutonDoctorInit: + ld hl,.croutonDoctorInitTable + jp StdInitFromTable + +.croutonDoctorInitTable + DB 4 ;initial facing + DB 3 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classCroutonBullet ;associated bullet class ptr + DW CROUTONBULLET_CINDEX + +CroutonDoctorCheck: + ld hl,.croutonDoctorCheckTable + jp StdCheckFromTable + +.croutonDoctorCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW guardFireSound + DB 6 ;fire delay + DW TrackEnemyVectorToState + +;----Crouton Wizard--------------------------------------------------- +CroutonWizardInit: + ld hl,.croutonWizardInitTable + jp StdInitFromTable + +.croutonWizardInitTable + DB 4 ;initial facing + DB 3 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classWizardBullet ;associated bullet class ptr + DW WIZARDBULLET_CINDEX + +CroutonWizardCheck: + ld hl,.croutonWizardCheckTable + jp StdCheckFromTable + +.croutonWizardCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW .wizardFireSound + DB 6 ;fire delay + DW TrackEnemyVectorToState + +.wizardFireSound + DB 1,$34,$40,$f6,$00,$81 + +;----Big Bee Hive----------------------------------------------------- +BigBeeHiveCheck: + ;randomly create a bee every so often + ld a,127 + call GetRandomNumMask + or a + jr nz,.afterCreateBee + + ld a,[numFreeObjects] + cp (255-32) + jr c,.afterCreateBee + + call FindEmptyLocationAround2x2 + ld a,h + or a + jr z,.afterCreateBee + + push bc + push de + ld bc,classBee + call FindClassIndex + or a + jr z,.afterCreateObject + ld c,a + call CreateInitAndDrawObject +.afterCreateObject + pop de + pop bc + +.afterCreateBee + ld hl,.bigBeeHiveCheckTable + jp StdCheckFromTable + +.bigBeeHiveCheckTable + DB 0 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW beeSound + DB 20 ;fire delay + DW 0 + +;----Sheep------------------------------------------------------------ +SheepCheck: + call GetHealth + or a + jr nz,.afterChangeToDrumstick + + call GetCurLocation + push hl + call StandardDie + pop hl + + ld bc,classDrumstickBG + call FindClassIndex + push af + ld a,MAPBANK + ldio [$ff70],a + pop af + ld [hl],a + + jp ResetMyBGSpecialFlags + +.afterChangeToDrumstick + jp GenericCheck + +;----Chicken---------------------------------------------------------- +ChickenInit: + ld hl,.chickenInitTable + jp StdInitFromTable + +.chickenInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERB ;group + DB 1 ;has bullet + DW classEgg + DW EGG_CINDEX + +ChickenCheck: + ;lay egg? + ld a,255 + call GetRandomNumMask + or a + jr nz,.afterLayEgg + ldio a,[updateTimer] + and %11 + or a + jr nz,.afterLayEgg + ld a,[numFreeObjects] + cp 200 + jr c,.afterLayEgg + + push bc + call GetAssociated + ld c,a + call FindEmptyLocationAround1x1 + or a + jr z,.afterCreateEgg + push de + call CreateInitAndDrawObject + pop de +.afterCreateEgg + pop bc + +.afterLayEgg + ld hl,.chickenCheckTable + jp StdCheckFromTable + +.chickenCheckTable + DB 5 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW nullSound + DB 30 ;fire delay + DW StdVectorToState + +;----Wisp------------------------------------------------------------- +WispInit: + ld hl,.wispInitTable + jp StdInitFromTable + +.wispInitTable + DB 4 ;initial facing + DB 1 ;health + DB GROUP_MONSTERC ;group + DB 0 ;has bullet + +WispCheck: + ld hl,.wispCheckTable + call StdCheckDead + ret z + call StdCheckTimeToMove + ret z + call .wispCheckAttack + ret z + call StdMove + ret + +.wispCheckAttack + ;can I attack yet? + push hl + call DecrementAttackDelay + pop hl + or a + jr nz,.attackOkay + inc hl +.didntFindEnemy + inc hl + inc hl + inc hl + inc hl + jp .skipAttack + +.attackOkay + ld a,[hl+] + +.meleeOnly + ld a,1 + ld [losLimit],a + call LookForEnemyInLOS ;returns dir of enemy in b + or a + jr z,.didntFindEnemy + +.foundEnemy + ;Fire instead of moving + ld a,[curObjWidthHeight] + push af + + ld a,[hl+] ;bullet damage + push hl + push af + + ld a,[hl+] ;hl = fire sound + ld h,[hl] + ld l,a + + pop af ;damage + call StdFireBullet ;b is direction to fire + pop hl + inc hl + inc hl + ld a,[hl+] ;delay + call SetAttackDelay + + push bc + ;exchange enemy with another randomly selected wisp + ld a,c + call CountNumObjects + dec a + jr z,.afterExchange + call GetRandomNumZeroToN + + ld b,a + inc b + + push bc ;save my class and object + push de + + call GetFirst + dec b + jr z,.foundRemoteWisp + +.findWisp + call GetNextObject + dec b + jr nz,.findWisp + +.foundRemoteWisp + ;save remote wisp's class and object + push bc + push de + + call GetCurLocation + push hl + + call .wispRemove + + call GetFireTargetAsObject + call GetCurLocation + push hl + call .wispRemove + ld hl,[sp+2] ;other object's location + ld a,[hl+] + ld h,[hl] + ld l,a + call SetCurLocation + ld b,METHOD_DRAW + call CallMethod + + ;reset camera if it was the hero that was moved + LDHL_CURHERODATA HERODATA_OBJ + ld a,[hl+] + cp e + jr nz,.afterResetCamera + ld a,[hl+] + cp d + jr nz,.afterResetCamera + + call AdjustCameraToHero + call RestrictCameraToBounds + ld a,[desiredMapLeft] + ld [mapLeft],a + ld a,[desiredMapTop] + ld [mapTop],a +.afterResetCamera + + pop hl + pop de ;first location(discard) + + pop de ;first object + pop bc + call SetCurLocation + ld b,METHOD_DRAW + call CallMethod + +.exchangeDone + pop de + pop bc +.afterExchange + pop bc + + pop af + ld [curObjWidthHeight],a + + ;turn to face the direction we just fired + call GetFacing + and %11 + cp b + jr z,.skipMove ;no need to turn + + ld a,1 + ld [moveAlignPrecision],a + call StandardValidateMoveAndRedraw + + jr .skipMove + +.skipAttack + ld a,1 ;return nz (go ahead and move) + or a + ret + +.skipMove + xor a ;return z (skip move) + ret + +.wispCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW .wispFireSound + DB 4 ;fire delay + DW StdVectorToState + +.wispFireSound + DB 1,$75,$c0,$f0,$00,$c6 + +.wispRemove + call GetFGAttributes + and FLAG_2X2 + swap a + ldio [curObjWidthHeight],a + call GetFacing + push bc + ld c,a + call RemoveFromMap + pop bc + call GetFacing + and %11111011 ;turn off split + jp SetFacing + +;----GetFireTargetAsObject-------------------------------------------- +GetFireTargetAsObject: + ld a,[fireBulletLocation] + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call EnsureTileIsHead + ld d,h + ld e,l + ld c,a + jp FindObject + +;----Quatrain--------------------------------------------------------- +QuatrainInit: + ld hl,.quatrainInitTable + jp StdInitFromTable + +.quatrainInitTable + DB 4 ;initial facing + DB 10 ;health + DB GROUP_MONSTERA ;group + DB 0 ;has bullet + +QuatrainCheck: + ld hl,.quatrainCheckTable + jp StdCheckFromTable + +.quatrainCheckTable + DB 1 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW nullSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +;----Crouton Goblin--------------------------------------------------- +CroutonGoblinInit: + ld hl,.croutonGoblinInitTable + jp StdInitFromTable +.croutonGoblinInitTable + DB 4 ;initial facing + DB 1 ;health + DB GROUP_MONSTERA ;group + DB 0 ;has bullet + +CroutonGoblinCheck: + ld hl,.croutonGoblinCheckTable + jp StdCheckFromTable + +.croutonGoblinCheckTable + DB 2 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW goblinSound + DB 3 ;fire delay + DW TrackEnemyVectorToState + +;----General Gyro----------------------------------------------------- +GeneralGyroInit: + ld hl,.gyroInitTable + jp StdInitFromTable +.gyroInitTable + DB 4 ;initial facing + DB 63 ;health (max) + DB GROUP_MONSTERA ;group + DB 0 ;has bullet + +;----Crouton Artillery------------------------------------------------ +CroutonArtilleryInit: + ld hl,.croutonArtilleryInitTable + jp StdInitFromTable +.croutonArtilleryInitTable + DB 4 ;initial facing + DB 10 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classRocketBullet ;associated bullet class ptr + DW CROUTONROCKET_CINDEX + +CroutonArtilleryCheck: + call StdCheckDead + ret z + + ;save original facing + call GetFacing + and %00000011 + push af + + ld hl,.croutonArtilleryCheckTable + call StdCheckFromTableNotDead + + ;if facing changes set move delay to 15 + call GetFacing + and %00000011 + pop bc + cp b + ret z + ld a,15 + call SetMoveDelay + ret + +.croutonArtilleryCheckTable + DB 3 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 6 ;bullet damage + DW rocketFireSound + DB 10 ;fire delay + DW TrackEnemyVectorToState + +;----Teleport Cube---------------------------------------------------- +TeleportCubeInit: + ld hl,.cubeInitTable + call StdInitFromTable + jp LinkAssocToMe + +.cubeInitTable + DB 1 ;initial facing + DB 2 ;health + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classTeleportCube2 + DW TCUBE2_CINDEX + +TeleportCubeCheck: + call GetCurLocation + push hl + call StdCheckDead + pop hl + jr nz,.tick + + ;died because of being shot (was timer up?) + push hl + call GetMisc + pop hl + cp 254 + ret nz + + ;finished; resolve into one or more enemies + ld a,3 + call GetRandomNumMask + cp 2 + jr nc,.cluster + + ;one big enemy + or a + jr nz,.artillery + + ;create a hulk + ld bc,classCroutonHulk + jr .createSingle + +.artillery + ld bc,classCroutonArtillery +.createSingle + call FindClassIndex + ret z + ld c,a + jp CreateInitAndDrawObject + +.cluster + ;create a cluster of grunts or goblins + and 1 + jr nz,.goblins + + ld bc,classCroutonGrunt + jr .createCluster + +.goblins + ;goblins + ld bc,classCroutonGoblin +.createCluster + call FindClassIndex + ret z + ld c,a + call CreateInitAndDrawObject + inc hl + call CreateInitAndDrawObject + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + call CreateInitAndDrawObject + dec hl + jp CreateInitAndDrawObject + +.tick + call GetMisc + add 2 + ld [hl],a + cp 254 + jr nz,.notFinished + + xor a + call SetHealth + ret + +.notFinished + ;determine how fast we're flashing + ld a,[hl] + cp 226 + jr nc,.speed1 + cp 200 + jr nc,.speed2 + cp 150 + jr nc,.speed3 + cp 100 + jr nc,.speed4 +.speed5 + ldio a,[updateTimer] + and %11111 + jr .checkFlash + +.speed4 + ldio a,[updateTimer] + and %1111 + jr .checkFlash + +.speed3 + ldio a,[updateTimer] + and %111 + jr .checkFlash + +.speed2 + ldio a,[updateTimer] + and %11 + jr .checkFlash + +.speed1 + xor a + +.checkFlash + ret nz + + ld hl,.flashSound + call PlaySound + jp ChangeMyClassToAssociatedAndRedraw + +.flashSound + DB 1,$35,$40,$f0,$00,$c4 + +TeleportCubeCheck2: + call StdCheckDead + ret z + jp ChangeMyClassToAssociatedAndRedraw + +;----Dandelion Guard-------------------------------------------------- +DandelionGuardInit: + ld hl,.dandelionGuardInitTable + jp StdInitFromTable + +.dandelionGuardInitTable + DB 4 ;initial facing + DB 5 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classPansyBullet ;associated bullet class ptr + DW PANSYBULLET_CINDEX + +DandelionGuardCheck: + ld hl,.dandelionGuardCheckTable + jp StdCheckFromTable + +.dandelionGuardCheckTable + DB 3 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW .dandelionGuardFireSound + DB 8 ;fire delay + DW TrackEnemyVectorToState + +.dandelionGuardFireSound + DB 1,$32,$80,$f0,$00,$c3 + +;----B12 Soldier------------------------------------------------------ +B12SoldierInit: + ld hl,.b12SoldierInitTable + jp StdInitFromTable + +.b12SoldierInitTable + DB 4 ;initial facing + DB 8 ;health + DB GROUP_MONSTERB ;group + DB 1 ;has bullet + DW classB12SoldierBullet ;associated bullet class ptr + DW B12SOLDIERBULLET_CINDEX + +B12SoldierCheck: + ld hl,.b12SoldierCheckTable + jp StdCheckFromTable + +.b12SoldierCheckTable + DB 3 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW baFireSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +;----Big Spider------------------------------------------------------- +BigSpiderInit: + ld hl,.bigSpiderInitTable + jp StdInitFromTable + +.bigSpiderInitTable + DB 4 ;initial facing + DB 9 ;health + DB GROUP_MONSTERE ;group + DB 0 ;has bullet + +BigSpiderCheck: + ld hl,.bigSpiderCheckTable + jp StdCheckFromTable + +.bigSpiderCheckTable + DB 12 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW .bigSpiderSound + DB 5 ;fire delay + DW StdVectorToState + +.bigSpiderSound + DB $33,$80,$f0,$00,$c5 + +;----Little Spider---------------------------------------------------- +LittleSpiderInit: + ld hl,.littleSpiderInitTable + jp StdInitFromTable + +.littleSpiderInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERE ;group + DB 0 ;has bullet + +LittleSpiderCheck: + ld hl,.littleSpiderCheckTable + jp StdCheckFromTable + +.littleSpiderCheckTable + DB 10 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW .littleSpiderSound + DB 5 ;fire delay + DW StdVectorToState + +.littleSpiderSound + DB $33,$80,$f0,$60,$c5 + +;----Invisible Bat---------------------------------------------------- +InvisibleBatCheck: + call StdCheckDead + ret z + + ld hl,.invisibleBatCheckTable + call StdCheckFromTableNotDead + + ;make a noise every so often + ld hl,updateTimer + ld a,e + rrca + rrca + rrca + add [hl] + and %11111 + cp %10000 + jr nz,.checkAttack + + ld hl,batFireSound + call PlaySound + +.checkAttack + call GetAttackDelay ;attacked someone? + or a + ret z + + call ChangeMyClassToAssociatedAndRedraw + ld a,50 ;delay until invisible + jp SetMisc + +.invisibleBatCheckTable + DB 3 ;move delay + DB 1 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW batFireSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +InvisibleBatTakeDamage: + call StdTakeDamage + + call ChangeMyClassToAssociatedAndRedraw + ld a,50 ;delay until invisible + jp SetMisc + + +;----Slime------------------------------------------------------------ +SlimeInit: + call GetCurLocation + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl],a ;clear slime BG tile I'm on + + ld hl,.slimeInitTable + jp StdInitFromTable + +.slimeInitTable + DB 4 ;initial facing + DB 1 ;health + DB GROUP_MONSTERC + DB 0 ;has bullet + +SlimeCheck: + ld hl,.slimeCheckTable + jp StdCheckFromTable + +.slimeCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW .slimeFireSound + DB 20 ;fire delay + DW TrackEnemyVectorToState + +.slimeFireSound + DB 1,$35,$00,$f0,$00,$c7 + +;----Egg-------------------------------------------------------------- +EggInit: + ld hl,.eggInitTable + call StdInitFromTable + ld a,255 + jp SetMisc ;turns until hatch + +.eggInitTable + DB 1 ;initial facing + DB 2 ;health + DB GROUP_MONSTERN + DB 1 ;has bullet + DW classChicken + DW CHICKEN_CINDEX + +;----Monkey----------------------------------------------------------- +MonkeyInit: + push bc + push de + ld de,classSleepingMonkey + ld hl,MONKEY_CINDEX + ld a,1 + call LoadAssociatedClass + pop de + pop bc + + ld hl,.monkeyInitTable + jp StdInitFromTable + +.monkeyInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERD + DB 1 ;has bullet + DW classBananaBullet + DW BANANABULLET_CINDEX + +MonkeyCheck: + ld hl,.monkeyCheckTable + jp StdCheckFromTable + +.monkeyCheckTable + DB 3 ;move delay + DB 2 ;attack type (0=none,1=melee,2=missile) + DB 1 ;bullet damage + DW monkeyFireSound + DB 4 ;fire delay + DW TrackEnemyVectorToState + +monkeyFireSound: + DB 1,$57,$2a,$f3,$10,$c7 + +;----Duke------------------------------------------------------------- +DukeInit: + ld hl,.dukeInitTable + jp StdInitFromTable +.dukeInitTable + DB 4 ;initial facing + DB 63 ;health (max) + DB GROUP_MONSTERD ;group + DB 1 ;has bullet + DW classBananaBullet + DW BANANABULLET_CINDEX + +DukeCheck: + ld hl,.dukeCheckTable + jp StdCheckFromTable + +.dukeCheckTable + DB 5 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 3 ;bullet damage + DW monkeyFireSound + DB 3 ;fire delay + DW StdVectorToState + +;----Pig-------------------------------------------------------------- +PigCheck: + call GetHealth + or a + jr nz,.afterPorkProducts + + call GetCurLocation + push hl + call StandardDie + pop hl + + ld bc,classPorkBG + call FindClassIndex + ld b,a + ld a,MAPBANK + ldio [$ff70],a + ld a,2 + call GetRandomNumZeroToN + add b + ld [hl],a + + call ResetMyBGSpecialFlags + ret + +.afterPorkProducts + jp GenericCheck + + +EggCheck: + call GetHealth + or a + jr nz,.afterFried + + call GetCurLocation + push hl + call StandardDie + pop hl + + ld bc,classFriedEggBG + call FindClassIndex + push af + ld a,MAPBANK + ldio [$ff70],a + pop af + ld [hl],a + + call ResetMyBGSpecialFlags + ret + +.afterFried + call GetMisc + dec [hl] + jr nz,.notHatchedYet + + ld hl,.eggHatchSound + call PlaySound + jp ChangeMyClassToAssociatedAndRedraw + +.notHatchedYet + ld hl,.eggCheckTable + jp StdCheckFromTable + +.eggCheckTable + DB 0 ;move delay + DB 0 ;attack type (0=none,1=melee,2=missile) + DB 0 ;bullet damage + DW nullSound + DB 20 ;fire delay + DW 0 + +.eggHatchSound + DB 4,$1b,$f0,$62,$c0 + +;----Crouton Blower--------------------------------------------------- +BlowerInit: + ld hl,.blowerInitTable + jp StdInitFromTable + +.blowerInitTable + DB 4 ;initial facing + DB 4 ;health + DB GROUP_MONSTERA + DB 0 ;has bullet + +BlowerCheck: + call StdCheckDead + ret z + + ld hl,.blowerCheckTable + call StdCheckFromTableNotDead + + ;handle 'firing' ourselves + ;can we attack yet? + call DecrementAttackDelay + or a + ret z + + push de + call GetFacing + push af + and %11 + call GetLocInFront + pop af + rlca + and %110 + push hl + ld l,a + ld a,(mapOffsetNorth & $ff) + add l + ld l,a + ld h,((mapOffsetNorth>>8)&$ff) + ld a,[hl+] + ld e,a + ld a,[hl] + ld d,a + pop hl + + xor a + ld [losLimit],a + call ScanDirectionForEnemy ;returns dir of enemy in b + or a + jr z,.doneDE + + ;blow the enemy away from me + ld a,[fireBulletLocation] ;enemy's location + ld l,a + ld a,[fireBulletLocation+1] + ld h,a + pop de + call GetFacing + and %11 + call ShiftObjectInDirection + ld a,3 + call SetAttackDelay + ld hl,.blowerBlowSound + call PlaySound + ret + +.doneDE pop de + ret + +.blowerCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=none,1=melee,2=missile) + DB 2 ;bullet damage + DW gruntFireSound + DB 5 ;fire delay + DW TrackEnemyVectorToState + +.blowerBlowSound + DB 4,$00,$f5,$07,$80 + +;----Sleeping Monkey-------------------------------------------------- +SleepingMonkeyInit: + ld hl,.sleepingMonkeyInitTable + jp StdInitFromTable + +.sleepingMonkeyInitTable + DB 4 ;initial facing + DB 2 ;health (max) + DB GROUP_MONSTERD ;group + DB 1 ;has bullet + DW classMonkey + DW MONKEY_CINDEX + +SleepingMonkeyCheck: + ld a,[guardAlarm] + or a + jr z,.check + + call ChangeMyClassToAssociatedAndRedraw + ld de,classBananaBullet + ld hl,BANANABULLET_CINDEX + ld a,1 + jp LoadAssociatedClass + +.check + ld hl,.sleepingMonkeyCheckTable + jp StdCheckFromTable + +.sleepingMonkeyCheckTable + DB 0 ;move delay + DB 0 ;attack type (0=no attack,1=melee,2=missile) + DB 0 ;bullet damage + DW monkeyFireSound + DB 3 ;fire delay + DW 0 + +;----Bell------------------------------------------------------------- +BellInit: + ld hl,.bellInitTable + call StdInitFromTable + + jp LinkAssocToMe + +.bellInitTable + DB 1 ;initial facing + DB 63 ;health (max) + DB GROUP_MONSTERN ;group + DB 1 ;has bullet + DW classRingingBell + DW RINGINGBELL_CINDEX + +;----Banana Tree------------------------------------------------------ +BananaTreeInit: + ld hl,.bananaTreeInitTable + jp StdInitFromTable + +.bananaTreeInitTable + DB 1 ;initial facing + DB 6 ;health (max) + DB GROUP_MONSTERN ;group + DB 0 ;has bullet + +BananaTreeCheck: + ;regain 1 health every few seconds + ldio a,[updateTimer] + or a + jr nz,.check + + call GetHealth + cp 6 ;at max? + jr nc,.check + + inc a + call SetHealth +.check + jp DoNothingCheck + +BananaTreeTakeDamage: + ;create an adjacent banana that "fell off" + call FindEmptyLocationAround2x2 + or a + jr z,.takeDamage + + push bc + ld bc,classBananaBG + call FindClassIndex + push af + ld a,MAPBANK + ldio [$ff70],a + pop af + ld [hl],a + pop bc + call ResetMyBGSpecialFlags + +.takeDamage + jp StdTakeDamage2x2 + +;----Hermit Crab No Shell--------------------------------------------- +HermitNoShellInit: + ld hl,.hermitNoShellInitTable + call StdInitFromTable + + ;set misc to be class index of shell + ld bc,classHermitCrabShellBG + call FindClassIndex + jp SetMisc + +.hermitNoShellInitTable + DB 4 ;initial facing + DB 3 ;health (max) + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classHermitInShell + DW HERMITINSHELL_CINDEX + +HermitNoShellCheck: + ;standing on shell? + call GetFacing + bit 7,a ;must be sprite + jr z,.notOnShell + + call GetMisc + ld b,a + + call GetCurLocation + ld a,TILESHADOWBANK + ldio [$ff70],a + ld a,[hl] + cp b + jr nz,.notOnShell + + ;get in shell + ld [hl],0 ;clear out shell + push bc + call GetFacing + ld c,a + call RemoveFromMap + pop bc + + ld a,20 + call SetHealth + call ChangeMyClassToAssociatedAndRedraw + ret + +.notOnShell + ld hl,.hermitNoShellCheckTable + jp StdCheckFromTable + +.hermitNoShellCheckTable + DB 5 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW crabAttackSound + DB 4 ;fire delay + DW StdVectorToState + +crabAttackSound: + DB 1,$2c,$38,$f0,$00,$c6 + +;----Hermit Crab In Shell--------------------------------------------- +HermitInShellCheck: + ld hl,.hermitInShellCheckTable + jp StdCheckFromTable + +.hermitInShellCheckTable + DB 4 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW crabAttackSound + DB 4 ;fire delay + DW TrackEnemyVectorToState + +;----Crab / Crab Burrowing ------------------------------------------- +CrabInit: + ld hl,.crabInitTable + call StdInitFromTable + ld a,100 ;time till burrow + jp SetMisc + +.crabInitTable + DB 4 ;initial facing + DB 3 ;health (max) + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classCrabBurrowing + DW CRABBURROWING_CINDEX + +CrabCheck: + ;can't burrow if sprite + call GetFacing + bit 7,a + jr nz,.notBurrowing + + call GetMisc + dec [hl] + jr nz,.notBurrowing + + ;take another step if split tile + call MoveForwardIfSplit + jp ChangeMyClassToAssociatedAndRedraw + +.notBurrowing + ld hl,.crabCheckTable + jp StdCheckFromTable + +.crabCheckTable + DB 6 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 2 ;bullet damage + DW crabAttackSound + DB 1 ;fire delay + DW TrackEnemyVectorToState + +CrabBurrowingInit: + ld hl,.crabBurrowingInitTable + call StdInitFromTable + xor a + call SetMisc + + jp LinkAssocToMe + +.crabBurrowingInitTable + DB 4 ;initial facing + DB 3 ;health (max) + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classCrab + DW CRAB_CINDEX + +CrabBurrowingCheck: + ;fully burrowed yet? + call GetMisc + cp 100 + jr z,.burrowed + cp 5 + jr z,.burrowed + + inc [hl] + call GetFacing + ld c,a + jp RemoveFromMap + +.burrowed + call GetMisc ;time to unburrow? + cp 100 + jr nz,.notUnburrowing + + call GetCurLocation + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + or a + ret nz ;can't unburrow when someone's on top + + call GetFacing ;clear split bit + res 2,a + call SetFacing + jp ChangeMyClassToAssociatedAndRedraw + +.notUnburrowing + ;is an enemy on top of me? + call GetCurLocation + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + call IsMyEnemy + cp 1 + ret nz + + ;flag to unburrow next time + ld a,100 + jp SetMisc + + +;--------------------------------------------------------------------- +;MoveForwardIfSplit +;--------------------------------------------------------------------- +MoveForwardIfSplit: + call GetFacing + bit 2,a + ret z + and %11 + ld b,a + jp StandardValidateMoveAndRedraw + +;----UberMouse-------------------------------------------------------- +UberMouseCheck: + ld a,63 ;can never die + call SetHealth + ld hl,.uberMouseCheckTable + jp StdCheckFromTable + +.uberMouseCheckTable + DB 5 ;move delay + DB 1 ;attack type (0=no attack,1=melee,2=missile) + DB 5 ;bullet damage + DW .uberMouseFireSound + DB 2 ;fire delay + DW TrackEnemyVectorToState + +.uberMouseFireSound + DB 1,$17,$00,$f0,$00,$c6 + +;----Turret----------------------------------------------------------- +TurretInit: + ld hl,.turretInitTable + jp StdInitFromTable +.turretInitTable + DB 4 ;initial facing + DB 20 ;health (max) + DB GROUP_MONSTERA ;group + DB 1 ;has bullet + DW classTurretBullet + DW TURRETBULLET_CINDEX + +TurretCheck: + ld hl,.turretCheckTable + jp StdCheckFromTable + +.turretCheckTable + DB 2 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW .turretFireSound + DB 1 ;fire delay + DW 0 + +.turretFireSound + DB 1,$3b,$80,$f3,$00,$83 + ;DB 1,$fa,$80,$f3,$00,$84 + +;----Pansy------------------------------------------------------------ +PansyInit: + ld hl,.pansyInitTable + jp StdInitFromTable + +.pansyInitTable + DB 4 ;initial facing + DB 2 ;health + DB GROUP_MONSTERC ;group + DB 1 ;has bullet + DW classPansyBullet ;associated bullet class ptr + DW PANSYBULLET_CINDEX + +PansyCheck: + ld hl,.pansyCheckTable + jp StdCheckFromTable + +.pansyCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW pansyFireSound + DB 10 ;fire delay + DW TrackEnemyVectorToState + +HippiePansyCheck: + ld hl,.hippiePansyCheckTable + jp StdCheckFromTable + +.hippiePansyCheckTable + DB 4 ;move delay + DB 2 ;attack type (0=no attack,1=melee,2=missile) + DB 1 ;bullet damage + DW pansyFireSound + DB 10 ;fire delay + DW EatVectorToState + +;--------------------------------------------------------------------- +; ActorCheck +;--------------------------------------------------------------------- +ActorCheck: + push bc + push de + push hl + + ;am I dead? + call GetHealth + or a + jr nz,.checkTimeToMove + call StandardDie + jr .done + +.checkTimeToMove + ;time to move? + ld a,2 + call TestMove + or a + jr z,.skipMove ;timer lsb==frame lsb, don't move yet + + ;xor a + ld a,1 + ld [moveAlignPrecision],a + call ActorVectorToState + or a + jr z,.skipMove + call StandardValidateMoveAndRedraw +.skipMove + +.done pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: LookForEnemyInLOS +; Arguments: c - class index of object +; de - this +; Alters: af,b +; Returns: a - 1=enemy spotted, 0=no enemy +; b - direction of enemy +; [fireBulletLocation] +; loc adj to shooter to place bullet +;--------------------------------------------------------------------- +LookForEnemyInLOS: + push hl + + ;save my group and direction first + call GetGroup + ld [myGroup],a + + call GetAttackDirState + or a + jr nz,.scanEast + + ;de = north offset + push de + ld a,DIR_NORTH + ld [myFacing],a + call GetLocInFront + ld a,[mapOffsetNorth] ;get North offset + ld e,a + ld a,[mapOffsetNorth+1] + ld d,a + + call ScanDirectionForEnemy + or a + jr nz,.afterN2 + ldio a,[curObjWidthHeight] + cp 2 + jr z,.try2x2N + xor a + jr .afterN2 +.try2x2N + inc hl ;try again to the side + call ScanDirectionForEnemy + +.afterN2 + pop de + or a + jr nz,.foundEnemyN + jp .advanceState ;found a wall +.foundEnemyN + ld b,DIR_NORTH ;found enemy + jp .saveEnemyLocation + +.scanEast + ;Attack Dir State says look east? + cp 1 + jr nz,.scanSouth + + ;de = east offset + push de + ld a,DIR_EAST + ld [myFacing],a + call GetLocInFront + ld a,[mapOffsetEast] ;get East offset + ld e,a + ld a,[mapOffsetEast+1] + ld d,a + + call ScanDirectionForEnemy + or a + jr nz,.afterE2 + ldio a,[curObjWidthHeight] + cp 2 + jr z,.try2x2E + xor a + jr .afterE2 +.try2x2E + ;try again to the side + ld a,[mapOffsetSouth] + add l + ld l,a + ld a,[mapOffsetSouth+1] + adc h + ld h,a + call ScanDirectionForEnemy + +.afterE2 + pop de + or a + jr z,.advanceState ;found a wall + ld b,DIR_EAST ;found enemy + jr .saveEnemyLocation + +.scanSouth + ;Attack Dir State says look south? + cp 2 + jr nz,.scanWest + + ;de = south offset + push de + ld a,DIR_SOUTH + ld [myFacing],a + call GetLocInFront + ld a,[mapOffsetSouth] ;get South offset + ld e,a + ld a,[mapOffsetSouth+1] + ld d,a + + call ScanDirectionForEnemy + or a + jr nz,.afterS2 + ldio a,[curObjWidthHeight] + cp 2 + jr z,.try2x2S + xor a + jr .afterS2 +.try2x2S + inc hl ;try again to the side + call ScanDirectionForEnemy + +.afterS2 + pop de + or a + jr z,.scanWest ;found a wall + ld b,DIR_SOUTH ;found enemy + jr .saveEnemyLocation + +.scanWest + ;de = west offset + push de + ld a,DIR_WEST + ld [myFacing],a + call GetLocInFront + ld a,[mapOffsetWest] ;get West offset + ld e,a + ld a,[mapOffsetWest+1] + ld d,a + + call ScanDirectionForEnemy + or a + jr nz,.afterW2 + ldio a,[curObjWidthHeight] + cp 2 + jr z,.try2x2W + xor a + jr .afterW2 +.try2x2W + ;try again to the side + ld a,[mapOffsetSouth] + add l + ld l,a + ld a,[mapOffsetSouth+1] + adc h + ld h,a + call ScanDirectionForEnemy + +.afterW2 + pop de + or a + jr z,.advanceState ;found a wall + ld b,DIR_WEST ;found enemy + +.saveEnemyLocation + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + ld a,1 + jr .done + +.advanceState + ;no enemies found, look next direction next time + call GetAttackDirState + inc a + call SetAttackDirState + xor a + +.done + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: ScanDirectionForEnemy +; Arguments: c - class index of scanning object +; de - offset to scan in +; hl - starting location for scan +; [losLimit] - 1=1 tile, 0=infinite +; Returns: a - 1=enemy found, 0=no enemy +; [fireBulletLocation] - location of enemy if found +; Alters: af +;--------------------------------------------------------------------- +ScanDirectionForEnemy: + push bc + push hl + + ld a,MAPBANK + ld [$ff70],a + ldio a,[firstMonster] + ld b,a + + ld a,[losLimit] + cp 1 + jr nz,.loop + + ;one time only + ld a,[hl] + or a + jr z,.done + cp b + jr c,.returnFalse + call IsMyEnemy + and 1 ;mask out & ignore bullets + jr .done + + ;infinite until hit wall +.loop ld a,[hl] + or a + jr z,.nextLocation + cp b + jr c,.foundWall + + ;might be an enemy + push af + ld a,l + ld [fireBulletLocation],a + ld a,h + ld [fireBulletLocation+1],a + pop af + call IsMyEnemy + cp 2 + jr z,.restoreMapNextLocation ;is bullet, look past it + and 1 + jr .done ;is creature + +.restoreMapNextLocation + ld a,MAPBANK + ldio [$ff70],a +.nextLocation + add hl,de + jr .loop + +.foundWall + ;might be a shoot-over wall + push af + ld a,ZONEBANK + ldio [$ff70],a + pop af + bit 7,[hl] ;anything special here? + jr z,.returnFalse ;nope + call GetBGAttributes ;maybe... + and BG_FLAG_SHOOTOVER + jr z,.returnFalse ;still no + ld a,MAPBANK + ldio [$ff70],a + jr .nextLocation ;go back to looking + +.returnFalse + xor a +.done + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: IsMyEnemy +; Arguments: a - class index of potential enemy +; c - class index of object +; hl - map location +; Returns: a - 0=no enemy, 1=is enemy, 2=no enemy but is bullet +; (bullet coming towards me = 1) +; Alters: af +; Description: Follows tail tiles back to head (if need be) & figures +; out if this index is friend or foe +;--------------------------------------------------------------------- +IsMyEnemy: + push bc + push de + push hl + + push af + ldio a,[firstMonster] + ld b,a + pop af + cp b + jr c,.notEnemy + + call EnsureTileIsHead ;a = findHead(a) + ld c,a + ld d,h + ld e,l + call FindObject + + call GetFGAttributes + and FLAG_ISBULLET + jr nz,.specialCaseIsBullet + + call GetGroup + + ld b,a + ld a,[myGroup] + ld c,a + call GetFOF + xor 1 ;reverse return value + jr .done + +.specialCaseIsBullet + call GetFacing ;get bullets direction + add 2 ;reverse it + and %11 + ld hl,myFacing + cp [hl] ;coming towards me if same dir + jr z,.isEnemy + + ;no enemy but is bullet + ld a,2 + jr .done + +.notEnemy + ;not my enemy + xor a + jr .done + +.isEnemy + ld a,1 + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: EnsureTileIsHead +; Arguments: a - class index of tile (maybe adjoin ptr) +; hl - map location +; Returns: a - head of obj / class index +; hl - location of head +; Alters: af,hl +; Description: Follows tail tiles back to head (if need be) +;--------------------------------------------------------------------- +EnsureTileIsHead:: + push bc + push de + ld c,a + + ld d,h + ld e,l + + ld a,MAPBANK + ld [$ff70],a + +.checkIfFoundHead + ld a,c + cp CLASS_ADJOIN_N + jr c,.foundHeadTile + + jr z,.followTileToNorth + cp CLASS_ADJOIN_W + jr z,.followTileToWest + + di +.error jr .error ;no classes should adjoin east or south + +.followTileToNorth + ld a,[mapOffsetNorth] + ld l,a + ld a,[mapOffsetNorth+1] + ld h,a + add hl,de + ld d,h + ld e,l + ld c,[hl] + jr .checkIfFoundHead + +.followTileToWest + dec de + ld a,[de] + ld c,a + jr .checkIfFoundHead + +.foundHeadTile + ld h,d + ld l,e + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: StandardValidateMoveAndRedraw +; Arguments: b - direction to move +;--------------------------------------------------------------------- +StandardValidateMoveAndRedraw: + ld a,b + and %11 + ld b,a + call EnforceLegalMove + ld a,1 + call CheckDestEmpty + or a + ret z + call Move + call StandardRedrawNoCheckSprite + ret + +;--------------------------------------------------------------------- +; Routine: PlayerValidateMoveAndRedraw +; Arguments: b - desired move dir +; Returns: a - 1 if bumping into monster +; 0 otherwise +; Description: Additional functionality of changing map if player +; hits a wall flagged as an exit +;--------------------------------------------------------------------- +PlayerValidateMoveAndRedraw: + call EnforceLegalMove + ld a,1 + call CheckDestEmpty + or a + jr nz,.move + + ;can't move. Bumping into exit? + ld a,4 + call GetLocInFront + + ;can't be a monster + ld a,MAPBANK + ld [$ff70],a + ldio a,[firstMonster] + ld b,a + ld a,[hl] + cp b + jr c,.notAMonster + + ;return is monster unless it is a talker + call EnsureTileIsHead + ld b,a + ld a,[dialogBalloonClassIndex] + cp b + jr nz,.returnTrue + + xor a + ret + +.returnTrue + ld a,1 + ret + +.notAMonster + ;save monster(?) index in b + ;ld b,a + + ;switch to zone/exit map + ld a,ZONEBANK + ld [$ff70],a + + ;get & check exit at location in front + ld a,[hl] + and %01110000 ;clear off extraneous + xor %01110000 ;must be type "X" + ;jr nz,.checkBumpIntoMonster + jr nz,.checkBumpIntoAttackable + + ;have an exit! + ;save exit tile index + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + ld [exitTileIndex],a + call HandleExitFromMap + xor a + ret + +.move + call Move + call StandardRedrawNoCheckSprite + xor a + ret + + ;ld a,MAPBANK + ;ldio [$ff70],a + ;ld a,[firstMonster] + ;ld b,a + ;ld a,[hl] + ;cp b + ;jr c,.checkBumpIntoAttackable + ;ld a,1 + ;ret + +.checkBumpIntoAttackable + ld a,[bgFlags] + and BG_FLAG_ATTACKABLE + ret z + ld a,1 + ret + +;--------------------------------------------------------------------- +; Routines: StreamRedraw +; StreamCheck +; StreamDraw +; StreamDie +;--------------------------------------------------------------------- +StreamRedraw: + push bc + push de + push hl + + ld a,OBJBANK + ld [$ff70],a + + xor a + ld [fgFlags],a + + ld hl,OBJ_LIMIT ;get my color + add hl,de + ld b,[hl] + jp StreamDraw + +StreamCheck: + ;time to move? + ld a,1 + call TestMove + or a + jr z,.streamDone ;timer lsb==frame lsb, don't move yet + + call .streamMove + call .streamMove + call .streamMove + call StreamRedraw ;draw me please +.streamDone + ret + +.streamMove + push bc + push hl + + ldio a,[firstMonster] + ld b,a + + ld a,4 + call GetLocInFront ;4=in front, split included + or a + jr z,.keepGoing ;nothing in front + cp b ;is a monster or what? + jr c,.hitWall ;wall in front, bullet just dies + + ;object in front, hit it for damage but keep going next time + ld b,a ;monster index in b, loc in hl + ld a,1 ;one point of damage + ld [methodParamL],a + ld a,4 ;use direction of this object for expl + call HitObject + jr .done + +.hitWall + call StreamDie + call GetCurLocation ;move obj over wall + call GetFacing + and %11 + call AdvanceLocHLInDirection + call SetCurLocation + ld a,MAPBANK + ld [$ff70],a + xor a + ld [hl],a ;destroy bg tile at this loc + + ld b,24 ;initial frame + call HitWall + + ld hl,bigExplosionSound + call PlaySound + pop hl + pop bc + pop af ;return addr + ret + +.keepGoing + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME ;get current direction + add hl,de + ld a,[hl] + and %00000011 ;keep going same direction + ld b,a + + call Move + ;call StreamRedraw ;draw me please + +.done + pop hl + pop bc + ret + +StreamDraw: + jp StandardDraw + + ;call GetCurLocation + ;call GetFacing + ;add 2 + ;and %11 ;reverse facing + ;call AdvanceLocHLInDirection ;location behind head + ;call GetBaseTile + + + +StreamDie: + ld a,5 + ld [jiggleDuration],a + jp StandardDie + +;--------------------------------------------------------------------- +; Routine: BombLocation +; Arguments: b - damage +; hl - center of blast +; Returns: Nothing. +; Alters: af +; Description: Does 'b' damage in a cross shape spreading outward +; from center in a random radius of (2...b) horizontally +; and another random radius of (2...b) vertically. +; +; Uses $c000 as work RAM to collect locations and +; objects affected. +;--------------------------------------------------------------------- +BombLocation: + push bc + push de + push hl + + ld a,MAPBANK + ldio [$ff70],a + + ;save current object width & height + ldio a,[curObjWidthHeight] + push af + + xor a ;number of objects found + ld [$c000],a + + ld a,b + ld [fireBulletDamage],a + + ;limit b to 4 max + ld a,b + cp 5 + jr c,.bOkay + ld b,4 +.bOkay + + push hl + + ;----left/right----------------------------------------------- + ;get random radius 1...b + ld a,b + sub 2 + call GetRandomNumZeroToN + inc a + inc a + ld c,a ;c is original desired number of explosions + + ;find left and right boundaries + ld de,$ffff + call .numTilesUntilWall + cp c + jr c,.leftSideOkay + jr z,.leftSideOkay + ld a,c ;clip +.leftSideOkay + push af + + ld de,1 + call .numTilesUntilWall + cp c + jr c,.rightSideOkay + jr z,.rightSideOkay + ld a,c ;clip +.rightSideOkay + dec a + ld c,a + pop af + push af + add c + ld c,a + pop af + cpl + inc a + inc a + add l + ld l,a + + ;hl is at left side, c indiates num tiles until right side + ld de,1 + call .createExplosions + + pop hl + + ;----up/down-------------------------------------------------- + ;get random radius 1...b + ld a,b + sub 2 + call GetRandomNumZeroToN + inc a + inc a + ld c,a + + ;find top and bottom boundaries + ld a,[mapOffsetNorth] + ld e,a + ld a,[mapOffsetNorth+1] + ld d,a + call .numTilesUntilWall + cp c + jr c,.topSideOkay + jr z,.topSideOkay + ld a,c ;clip +.topSideOkay + ld b,c + dec a + ld c,a + or a + jr z,.topSideDone + + push hl +.adjustTopHL + add hl,de + dec a + jr nz,.adjustTopHL + + ;hl is at top side, c indiates num tiles until bottom side + ld a,[mapOffsetSouth] + ld e,a + ld a,[mapOffsetSouth+1] + ld d,a + call .createExplosions + pop hl +.topSideDone + + ld a,[mapOffsetSouth] + ld e,a + ld a,[mapOffsetSouth+1] + ld d,a + ld c,b + call .numTilesUntilWall + cp c + jr c,.bottomSideOkay + jr z,.bottomSideOkay + ld a,c ;clip +.bottomSideOkay + dec a + jr z,.bottomSideDone + ld c,a + + add hl,de + + ;hl is at top side, c indiates num tiles until bottom side + call .createExplosions +.bottomSideDone + + ;loop through list of objects recorded as being in bomb + ;blast and cause damage to each one + ld a,[$c000] + or a + jr z,.done + ld c,a + ld hl,$c001 + +.distributeDamageLoop + push bc + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl+] + ld e,a + ld a,[hl+] + ld d,a + ld a,[de] ;class index of target + ld c,a ;class index to look for + call FindObject + ld a,[fireBulletDamage] + ld [methodParamL],a + ld a,4 + ld [fireBulletDirection],a + ld b,METHOD_TAKE_DAMAGE + call CallMethod + pop bc + dec c + jr nz,.distributeDamageLoop + + ;ld hl,bombSound + ;call PlaySound + +.done + ;restore current object width and height + pop af + ldio [curObjWidthHeight],a + + pop hl + pop de + pop bc + ret + +.createExplosions + ld a,c + or a + ret z + + push bc + push de + push hl + +.createExplosionLoop + ld a,MAPBANK + ldio [$ff70],a + ldio a,[firstMonster] + ld b,a + ld a,[hl] + cp b + push de + push hl + jr c,.afterRecordObject + + call EnsureTileIsHead + + ;add location to list of locations if not already there + call .isLocationRecorded + or a + jr nz,.afterRecordObject + + ;record the location + ld a,[$c000] + push af + sla a ;times two + 1 + inc a + ld e,a + ld d,$c0 ;de = numObj*2 + 1 + ld a,l + ld [de],a + inc de + ld a,h + ld [de],a + pop af + inc a + ld [$c000],a ;one more in the list + +.afterRecordObject + pop hl + pop de + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + ld b,16 + call CreateExplosion + add hl,de + dec c + jr nz,.createExplosionLoop + + pop hl + pop de + pop bc + ret + +.isLocationRecorded + ;args: a - class + ; hl - cur location + ;returns: a - 1=in list, 0=not in list + push bc + push de + push hl + call EnsureTileIsHead + ld d,h + ld e,l + ld a,[$c000] ;num classes + or a + jr z,.inListDone ;no list - so not in list + ld c,a + ld hl,$c001 +.testInListLoop + ld a,[hl+] + cp e + jr nz,.continueInListLoop + ld a,[hl] + cp d + jr nz,.continueInListLoop + + ld a,1 ;is in list + jr .inListDone + +.continueInListLoop + inc hl + dec c + jr nz,.testInListLoop + + xor a + +.inListDone + pop hl + pop de + pop bc + ret + +.numTilesUntilWall + ;takes a location (hl), an offset (de), and returns how + ;many tiles (including the first) there are until a wall. + push bc + push hl + + ld a,MAPBANK + ldio [$ff70],a + + ldio a,[firstMonster] + ld b,a + + ld c,0 +.loop ld a,[hl] + or a + jr z,.keepCounting + cp b + jr c,.foundWall + +.keepCounting + inc c + add hl,de + jr .loop + +.foundWall + ;keep going if shoot-over type + push af + ld a,ZONEBANK + ldio [$ff70],a + pop af + bit 7,[hl] ;special? + jr z,.foundWallDone + call GetBGAttributes + bit BG_BIT_SHOOTOVER,a + jr z,.foundWallDone + ld a,MAPBANK ;keep looking + ldio [$ff70],a + jr .keepCounting + +.foundWallDone + ld a,c + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FindEmptyLocationAround1x1 +; Arguments: de - 1x1 object +; Returns: hl - empty location around object or $0000 if none +; a - 0 = no empty locations +; Alters: af,hl +;--------------------------------------------------------------------- +FindEmptyLocationAround1x1Loc: + push bc + jr FindEmptyLocationAround1x1Common + +FindEmptyLocationAround1x1: + push bc + + ;get my TL corner plus (-1,-1) + call GetCurLocation +FindEmptyLocationAround1x1Common: + call ConvertLocHLToXY + dec h + dec l + + ld b,0 +.outer + ld c,0 +.inner + push hl + ld a,h + add b + ld h,a + ld a,l + add c + ld l,a + call ConvertXYToLocHL + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + or a + jr nz,.notEmpty + + ld a,1 + pop bc + jr .done + +.notEmpty + pop hl + ld a,3 + inc c + cp c + jr nz,.inner + inc b + cp b + jr nz,.outer + + ld hl,0 + xor a + +.done + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FindEmptyLocationAround2x2 +; Arguments: de - 2x2 object +; Returns: hl - empty location around object or $0000 if none +; a - 0 if none empty +; Alters: af,hl +;--------------------------------------------------------------------- +FindEmptyLocationAround2x2: + push bc + + ;get my TL corner plus (-1,-1) + call GetCurLocation + call ConvertLocHLToXY + dec h + dec l + + ld b,0 +.outer + ld c,0 +.inner + push hl + ld a,h + add b + ld h,a + ld a,l + add c + ld l,a + call ConvertXYToLocHL + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + or a + jr nz,.notEmpty + + ld a,1 + pop bc + jr .done + +.notEmpty + pop hl + ld a,4 + inc c + cp c + jr nz,.inner + inc b + cp b + jr nz,.outer + + xor a + ld hl,0 + +.done + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetCurLocation +; Arguments: de - object +; Returns: hl - current location +; Alters: af +;--------------------------------------------------------------------- +GetCurLocation:: + ld a,OBJBANK + ld [$ff70],a + ld a,[de] + ld l,a + inc de + ld a,[de] + ld h,a + dec de + ret + +;--------------------------------------------------------------------- +; Routine: SetCurLocation +;--------------------------------------------------------------------- +SetCurLocation:: + ld a,OBJBANK + ld [$ff70],a + ld a,l + ld [de],a + inc de + ld a,h + ld [de],a + dec de + ret + +;--------------------------------------------------------------------- +; Routine: GetFacing +; Returns: current facing + split +; Alters: af +;--------------------------------------------------------------------- +GetFacing:: + push hl + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME + add hl,de + ld a,[hl] + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetFacing +; Arguments: a - byte to set facing to +; Alters: af,hl +;--------------------------------------------------------------------- +SetFacing:: + push af + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_FRAME + add hl,de + pop af + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: AdvanceLocHLInDirection +; Arguments: a - direction to advance in +;--------------------------------------------------------------------- +AdvanceLocHLInDirection: + bit 0,a + jr nz,.eastOrWest + + push de + + rlca + ld de,mapOffsetNorth ;de to correct map offset + add e + ld e,a + + ld a,[de] + inc de + add l + ld l,a + ld a,[de] + adc h + ld h,a + + pop de + ret + +.eastOrWest + bit 1,a + jr nz,.west + + inc hl + ret + +.west dec hl + ret + +;--------------------------------------------------------------------- +; Routine: SetGroup +; Arguments: a - group to set to (see object.asm for details) +; de - object +; Alters: af +; Returns: nothing +;--------------------------------------------------------------------- +SetGroup:: + push bc + push hl + + ld b,a + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_GROUP + add hl,de + ld a,[hl] + and %11110000 + or b + ld [hl],a + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetGroup +; Arguments: de - object +; Alters: af +; Returns: a - this object's group (see object.asm for details) +;--------------------------------------------------------------------- +GetGroup: + push hl + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_GROUP + add hl,de + ld a,[hl] + and %00001111 + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: GetActorDestZone +; Arguments: de - object +; Alters: af +; Returns: a - destination zone of DESTL/DESTH +;--------------------------------------------------------------------- +GetActorDestZone: + push hl + + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_DESTL + add hl,de + + ld a,[hl+] ;get location in hl + ld h,[hl] + ld l,a + + ld a,ZONEBANK + ld [$ff70],a + + ld a,[hl] + and %1111 + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetActorDestLoc +; aka SetFoodIndexRange +; Arguments: de - object +; hl - location / food range h=high index, l=low +; Alters: af +; Returns: nothing +;--------------------------------------------------------------------- +SetActorDestLoc:: +SetFoodIndexRange:: + push bc + push hl + + ld b,h + ld c,l + + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_DESTL + add hl,de + + ld [hl],c + inc hl + ld [hl],b + + xor a + call SetState + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetActorDestLoc +; Arguments: de - object +; Alters: af, hl +; Returns: hl - location +;--------------------------------------------------------------------- +GetActorDestLoc: + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_DESTL + add hl,de + ld a,[hl+] + ld h,[hl] + ld l,a + ret + +;--------------------------------------------------------------------- +; Routine: GetDestL +; GetDestH +; Arguments: de - object +; Returns: a - contents of DESTL/DESTH +; Alters: af,hl +;--------------------------------------------------------------------- +GetDestL:: + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_DESTL + add hl,de + ld a,[hl] + ret + +GetDestH:: + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_DESTH + add hl,de + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routine: SetDestL +; SetDestH +; Arguments: a - value to set to +; de - object +; Returns: Nothing. +; Alters: af,hl +;--------------------------------------------------------------------- +SetDestL:: + push af + ld a,OBJBANK + ldio [$ff70],a + pop af + ld hl,OBJ_DESTL + add hl,de + ld [hl],a + ret + +SetDestH:: + push af + ld a,OBJBANK + ldio [$ff70],a + pop af + ld hl,OBJ_DESTH + add hl,de + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: SetMisc +; GetMisc +; Arguments: a - value to set to (SetMisc) +; de - object +; Returns: a - retrieved value (GetMisc) +; Alters: af,hl +;--------------------------------------------------------------------- +SetMisc:: + push af + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_MISC + add hl,de + pop af + ld [hl],a + ret + +GetMisc:: + ld a,OBJBANK + ldio [$ff70],a + ld hl,OBJ_MISC + add hl,de + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routine: SetSpriteLo +; Alters: af +; Arguments: a - loptr to sprite +; de - object +;--------------------------------------------------------------------- +SetSpriteLo: + push hl + ld h,a + ld a,OBJBANK + ld [$ff70],a + ld a,h + ld hl,OBJ_SPRITELO + add hl,de + ld [hl],a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: GetSpriteLo +; Arguments: de - object +; Returns: a - loptr to sprite +; Alters: af +;--------------------------------------------------------------------- +GetSpriteLo: + push hl + + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_SPRITELO + add hl,de + ld a,[hl] + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: GetSpritePtrInHL +; Arguments: de - object +; Returns: hl - loptr to sprite +; Alters: af +;--------------------------------------------------------------------- +GetSpritePtrInHL: + call GetSpriteLo + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + ret + +;--------------------------------------------------------------------- +; Routine: GetBulletDamage +; Returns: this.destL +; Alters: a,hl +;--------------------------------------------------------------------- +GetBulletDamage: + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_DESTL + add hl,de + ld a,[hl] + ret + + +;--------------------------------------------------------------------- +; Routine: GetFGAttributes +; Arguments: c - class index +; Alters: af +; Returns: a - attributes for given class index +; [fgFlags] copy of attributes +; +; Returns full set of attributes including: +; [2:0] - color FLAG_PALETTE +; [4] - isBullet FLAG_ISBULLET +; [5] - is2x2 FLAG_2X2 +; [6] - noRotate FLAG_NOROTATE +;--------------------------------------------------------------------- +GetFGAttributes:: + push hl + ld a,TILEINDEXBANK + ldio [$ff70],a + ld l,c + ld h,((fgAttributes>>8) & $ff) + ld a,[hl] + ld [fgFlags],a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetFGAttributes +; Arguments: a - new attributs +; c - class index +; Alters: af +;--------------------------------------------------------------------- +SetFGAttributes:: + push hl + push af + ld a,TILEINDEXBANK + ldio [$ff70],a + ld l,c + ld h,((fgAttributes>>8) & $ff) + pop af + ld [hl],a + pop hl + ret + + +;--------------------------------------------------------------------- +; Routine: GetFGTileMapping +; Arguments: c - class index +; Returns: a - base fg tile for given class index +; Alters: af +;--------------------------------------------------------------------- +GetFGTileMapping: + push hl + + ld a,TILEINDEXBANK + ld [$ff70],a + + ld l,c + ld h,((fgTileMap>>8) & $ff) + + ld a,[hl] + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetupHeroData +; Arguments: c - class index +; Returns: hl - ptr to hero0_data or hero1_data +; Alters: af,hl +;--------------------------------------------------------------------- +SetupHeroData: + ld a,[hero0_index] + cp c + jr nz,.hero1 + ld hl,hero0_data + ret + +.hero1 + ld hl,hero1_data + ret + +;--------------------------------------------------------------------- +; Routine: GetHeroData +; Arguments: a - data offset (e.g. HERODATA_HEALTH) +; hl - ptr to hero0_data or hero1_data +; Returns: a - 8-bit value +; Alters: af +;--------------------------------------------------------------------- +GetHeroData: + push de + push hl + + ld d,0 + ld e,a + add hl,de + ld a,[hl] + + pop hl + pop de + ret + +;--------------------------------------------------------------------- +; Routine: SetHeroData +; Arguments: a - data to set +; b - data offset (e.g. HERODATA_HEALTH) +; hl - ptr to hero0_data or hero1_data +; Returns: a - 8-bit value +; Alters: af +;--------------------------------------------------------------------- +SetHeroData: + push de + push hl + + ld d,0 + ld e,b + add hl,de + ld [hl],a + + pop hl + pop de + ret + +;--------------------------------------------------------------------- +; Routine: HealthSparks +; Arguments: a - cur health +; b - max health +; de - this +; Returns: Nothing. +; Alters: af, hl +; Description: Makes a spark every often if lower than half +; health, twice as often if lower than 1/4 health, +; like crazy if lower than 1/8 health or at 1 +;--------------------------------------------------------------------- +HealthSparks: + push bc + push de + + srl b ;half max health + cp b + jr z,.atHalfHealth + jr nc,.done ;greater than half health + + srl b ;1/4 max + cp b + jr z,.atQuarterHealth + jr nc,.atHalfHealth + + srl b ;1/8 max + cp b + jr z,.atEighthHealth + jr nc,.atQuarterHealth + +.atEighthHealth + ;at 1/8 health + call GetState + add 1 + call SetState + and %00000001 + jr .spark + +.atQuarterHealth + call GetState + add 1 + call SetState + and %00000111 + jr .spark + +.atHalfHealth + call GetState + add 1 + call SetState + and %00001111 + +.spark + or a + jr nz,.done + + call GetFGAttributes + and %111 + ld [bulletColor],a + call GetCurLocation + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + ld b,72 ;initial spark frame + call CreateExplosion + + ;hl points to explosion object + push de + call IndexToPointerDE + call GetSpriteLo + ld h,((spriteOAMBuffer>>8) & $ff) + ld l,a + pop de + + ;add +4 y if split north/south + push hl + push hl + call GetFacing + pop hl + bit 2,a + jr z,.afterSplit + + bit 0,a + jr z,.splitNS + + inc hl ;split e/w + +.splitNS + ld a,[hl] + add 4 + ld [hl],a +.afterSplit + pop hl + + ;offset by random +/- 0-3 pixels + ld a,%111 + call GetRandomNumMask + add [hl] ;sprite y pos + sub 4 + ld [hl+],a + ld a,%111 + call GetRandomNumMask + add [hl] ;sprite x pos + sub 4 + ld [hl],a + +.done + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ShiftObjectInDirection +; Arguments: a - direction to shift object +; hl - location of object +; Alters: af, [curObjWidthHeight] +; Returns: Nothing. +;--------------------------------------------------------------------- +ShiftObjectInDirection:: + push bc + push de + push hl + + ld b,a + + ldio a,[curObjWidthHeight] + push af + + ld a,MAPBANK + ldio [$ff70],a + + ld a,[hl] + call EnsureTileIsHead + ld d,h + ld e,l + + ld c,a + ld a,[hero0_index] + cp c + jr z,.isPlayer + ld a,[hero1_index] + cp c + jr z,.isPlayer + + call FindObject + call SetObjWidthHeight + call StandardValidateMoveAndRedraw + + pop af + ldio [curObjWidthHeight],a + + pop hl + pop de + pop bc + ret + +.isPlayer + call FindObject + call PlayerValidateMoveAndRedraw + + pop af + ldio [curObjWidthHeight],a + + pop hl + pop de + pop bc + ret + + +nullSound: + DB 0 + +;channel 1 effects +pansyFireSound: + DB 1,$72,$80,$f7,$00,$84 +baFireSound: + DB 1,$3b,$40,$f3,$00,$84 +bsFireSound: + DB 1,$4c,$40,$f3,$00,$87 +bigLaserSound:: + DB 1,$3d,$80,$f6,$00,$86 +disappearSound:: + DB 1,$72,$80,$f5,$00,$c2 +goblinSound: + DB 1,$11,$80,$f0,$00,$c1 +rocketFireSound: + DB 1,$25,$00,$f4,$00,$81 +hulkFireSound: + DB 1,$31,$c0,$f0,$00,$c1 +gruntFireSound: + DB 1,$21,$e0,$f8,$50,$80 +haikuSound: + DB 1,$9c,$48,$f2,$d0,$c7 +guardFireSound: + DB 1,$31,$80,$f0,$00,$c1 +treeFireSound: + DB 1,$4d,$c0,$f0,$00,$c5 +bushFireSound: + DB 1,$4d,$c0,$f0,$00,$c4 +beeSound: + DB 1,$f7,$00,$f3,$00,$83 +eatSound: + DB 1,$5a,$80,$f2,$00,$84 + + +;low frogger 1,$23,$20,$af,$00,$81 + +;channel 4 effects +stdExplosionSound: + DB 4,$00,$c3,$44,$80 +bigExplosionSound:: + DB 4,$00,$f3,$81,$80 +closeGateSound:: + DB 4,$00,$f4,$4f,$80 +bombSound:: + DB 4,$00,$f6,$90,$80 + + + +;SECTION "AlignedClassTables",ROMX[$7F00],BANK[CLASSROM] +;--------------------------------------------------------------------- +SECTION "AlignedClassTables",ROM0[$200] +;--------------------------------------------------------------------- +stdStateTable: + ;$7f00 + DW SetupRandomMoveState, MoveToZone, TryRight, TryFwdAfterRight + DW TryLeft, TryFwdAfterLeft, RandomMove, MoveFwdThenState1 + DW TryLeftFirst, TryFwdAfterLeftFirst, TryRightSecond + DW TryFwdAfterRightSecond, NoMove, NoMove, NoMove, NoMove + +eatStateTable: + ;$7f20 + ;DW EatOrTrack, MoveToZone, TryRight, TryFwdAfterRight + ;DW TryLeft, TryFwdAfterLeft, RandomMove, MoveFwdThenState1 + ;DW TryLeftFirst, TryFwdAfterLeftFirst, TryRightSecond + ;DW TryFwdAfterRightSecond, NoMove, NoMove, NoMove, NoMove + DW EatOrTrackState,EatOrTrackState,EatOrTrackState,EatOrTrackState + DW EatOrTrackState,EatOrTrackState,EatOrTrackState,EatOrTrackState + DW EatOrTrackState,EatOrTrackState,EatOrTrackState,EatOrTrackState + DW EatOrTrackState,EatOrTrackState,EatOrTrackState,EatOrTrackState + +explosionFrameTable: + ;$7f40 + DB 0,8,0,8,0,0,0,0 ;pattern numbers + DB %00000000,%00000000,%01000000,%00100000 ;base attributes + DB %00000000,%01000000,%00100000,%01100000 + +trackEnemyStateTable: + ;$7f50 + DW SetupTrackEnemy, MoveToZone, TryRight, TryFwdAfterRight + DW TryLeft, TryFwdAfterLeft, RandomMove, MoveFwdThenState1 + DW TryLeftFirst, TryFwdAfterLeftFirst, TryRightSecond + DW TryFwdAfterRightSecond, NoMove, NoMove, NoMove, NoMove + +getLocSplitTable: + ;$7f70 + DB 0 ;%00 00 Facing: N Check: N + DB 0 ;%00 01 Facing: N Check: E + DB 1 ;%00 10 Facing: N Check: S + DB 0 ;%00 11 Facing: N Check: W + DB 0 ;%01 00 Facing: E Check: N + DB 1 ;%01 01 Facing: E Check: E + DB 0 ;%01 10 Facing: E Check: S + DB 0 ;%01 11 Facing: E Check: W + DB 0 ;%10 00 Facing: S Check: N + DB 0 ;%10 01 Facing: S Check: E + DB 1 ;%10 10 Facing: S Check: S + DB 0 ;%10 11 Facing: S Check: W + DB 0 ;%11 00 Facing: W Check: N + DB 1 ;%11 01 Facing: W Check: E + DB 0 ;%11 10 Facing: W Check: S + DB 0 ;%01 11 Facing: W Check: W + + +actorStateTable: + ;$7f80 + DW SetupMoveToLoc, MoveToZone, TryRight, TryFwdAfterRight + DW TryLeft, TryFwdAfterLeft, RandomMove, MoveFwdThenState1 + DW TryLeftFirst, TryFwdAfterLeftFirst, TryRightSecond + DW TryFwdAfterRightSecond, NoMove, NoMove, NoMove, NoMove + +fleeStateTable: + ;$7fa0 + DW ScardieFlee, MoveToZone, TryRight, TryFwdAfterRight + DW TryLeft, TryFwdAfterLeft, RandomMove, MoveFwdThenState1 + DW TryLeftFirst, TryFwdAfterLeftFirst, TryRightSecond + DW TryFwdAfterRightSecond, NoMove, NoMove, NoMove, NoMove + +ladyBulletStateTable: + ;$7fc0 + DW LadyBulletMove, MoveToZone, TryRight, TryFwdAfterRight + DW TryLeft, TryFwdAfterLeft, RandomMove, MoveFwdThenState1 + DW TryLeftFirst, TryFwdAfterLeftFirst, TryRightSecond + DW TryFwdAfterRightSecond, NoMove, NoMove, NoMove, NoMove + + ;$7fe0 diff --git a/Source/class.inc b/Source/class.inc new file mode 100644 index 0000000..57044ca --- /dev/null +++ b/Source/class.inc @@ -0,0 +1,206 @@ +;1.2.2000 by Abe Pralle + +;vector offsets +METHOD_INIT EQU 0 +METHOD_DRAW EQU 2 +METHOD_CHECK EQU 4 +METHOD_TAKE_DAMAGE EQU 6 +METHOD_DIE EQU 8 + +BGACTION_HIT EQU 0 +BGACTION_MOVEOVER EQU 1 + +;object offsets +OBJ_IPOS EQU 0 +OBJ_JPOS EQU 1 +OBJ_FRAME EQU 2 +OBJ_MOVE EQU 3 +OBJ_LIMIT EQU 4 +OBJ_HEALTH EQU 5 +OBJ_DESTZONE EQU 6 +OBJ_MISC EQU 7 +OBJ_STATE EQU 8 +OBJ_GROUP EQU 9 +OBJ_DESTL EQU 10 +OBJ_DESTH EQU 11 +OBJ_SPRITELO EQU 12 +OBJ_FIRETIMER EQU 13 +OBJ_NEXT EQU 15 +OBJ_BYTES EQU 16 + +OBJBIT_THROWN EQU 7 + +;Flags (FGAttributes) +FLAG_PALETTE EQU %00000111 +FLAG_ISBULLET EQU %00010000 +FLAG_2X2 EQU %00100000 +FLAG_NOROTATE EQU %01000000 +FLAG_NOTHROW EQU %10000000 + +BIT_ISBULLET EQU 4 +BIT_2X2 EQU 5 +BIT_NOROTATE EQU 6 +BIT_NOTHROW EQU 7 + +;Groups +GROUP_FFA EQU 0 +GROUP_HERO EQU 1 +GROUP_MONSTERA EQU 2 +GROUP_MONSTERB EQU 3 +GROUP_MONSTERC EQU 4 +GROUP_MONSTERD EQU 5 +GROUP_MONSTERE EQU 6 +GROUP_MONSTERF EQU 7 +GROUP_MONSTERG EQU 8 +GROUP_MONSTERH EQU 9 +GROUP_MONSTERI EQU 10 +GROUP_MONSTERJ EQU 11 +GROUP_MONSTERK EQU 12 +GROUP_MONSTERL EQU 13 +GROUP_MONSTERM EQU 14 +GROUP_MONSTERN EQU 15 +FOF_FRIEND EQU 1 +FOF_ENEMY EQU 0 + +;misc defines +CLASS_EXPLOSION EQU 255 ;$ff + +;class fns +EXPORT ConvertLocHLToXY +EXPORT ConvertXYToLocHL +EXPORT ConvertLocHLToSpriteCoords + +EXPORT classDoNothing +EXPORT classDoNothing2 +EXPORT classDoNothing3 +EXPORT classHeroIdle +EXPORT classGeneric +EXPORT classTalker +EXPORT classBAPlayer +EXPORT classBSPlayer +EXPORT classPansy +EXPORT classBigLongLaser +EXPORT classExplosion +EXPORT classLadyFlower +EXPORT classCaptainFlour +EXPORT classCroutonHulk +EXPORT classCroutonGrunt +EXPORT classB12Soldier +EXPORT classActor +EXPORT classActorSpeed1 +EXPORT classActor2x2 +EXPORT classGuard + +;global class methods +EXPORT SuperInit +EXPORT SuperDie +EXPORT RemoveFromMap +EXPORT GetCurZone +EXPORT SetState +EXPORT SetPuffCount +EXPORT GetPuffCount +EXPORT AmAtLocation +EXPORT IsActorAtDest +EXPORT SetAttackDelay +EXPORT GetAttackDelay +EXPORT GetHealth +EXPORT SetHealth +EXPORT SetDestL +EXPORT SetDestH +EXPORT GetDestL +EXPORT GetDestH +EXPORT SetMisc +EXPORT GetMisc +EXPORT CreateExplosion +EXPORT GetCurLocation +EXPORT SetCurLocation +EXPORT GetFacing +EXPORT SetFacing +EXPORT SetGroup +EXPORT GetGroup +EXPORT SetActorDestLoc +EXPORT SetFoodIndexRange +EXPORT GetBGAttributes +EXPORT GetFGAttributes +EXPORT SetFGAttributes +EXPORT ShiftObjectInDirection + +;objList vars and functions +EXPORT headTable +EXPORT tailTable +EXPORT AddObjectsToObjList +EXPORT IndexToPointerDE +EXPORT IndexToPointerHL +EXPORT PointerDEToIndex +EXPORT PointerHLToIndex +EXPORT ResetList +EXPORT CreateObject +EXPORT CreateInitAndDrawObject +EXPORT DeleteObject +EXPORT IterateAllLists +EXPORT IterateList +EXPORT FindObject +EXPORT CallMethod +EXPORT SetObjWidthHeight +EXPORT IterateMaxObjects +EXPORT AllocateSprite +EXPORT FreeSprite +EXPORT CreateMetaSprite +EXPORT CreateMetaSpriteUsingMask +EXPORT ScrollMetaSprite +EXPORT SetMetaSpritePos +EXPORT FreeMetaSprite +EXPORT DeleteObjectsOfClass +EXPORT DeleteObjectsOfClassIndex +EXPORT GetFirst +EXPORT GetNextObject +EXPORT GetNext +EXPORT GetAssociated +EXPORT GetHead +EXPORT GetTail +EXPORT SetHead +EXPORT SetNext +EXPORT InitFOF +EXPORT SetFOF +EXPORT GetFOF +EXPORT LinkRemakeLists +EXPORT GetClass +EXPORT GetFGMapping +EXPORT SetFGMapping +EXPORT GetBGMapping +EXPORT SetBGMapping +EXPORT GetMyHero + +EXPORT classTable +EXPORT objects +EXPORT objExists +EXPORT objClassLookup + +EXPORT colorTable +EXPORT oldZone +EXPORT firstFreeObj +EXPORT curObjIndex +EXPORT nextObjIndex +EXPORT iterateNext +EXPORT oamFindPos +EXPORT numFreeSprites + +EXPORT GetClassMethodTable +EXPORT InstanceOf +EXPORT SetAssociated +EXPORT CountNumObjects +EXPORT ClassIndexIsHeroType + +BA_CINDEX EQU 2054 +BS_CINDEX EQU 2056 +HAIKU_CINDEX EQU 2058 +BABULLET_CINDEX EQU 2130 +FLOWER_CINDEX EQU 2136 +FLOUR_CINDEX EQU 2138 +BSBULLET_CINDEX EQU 2218 +PANSYBULLET_CINDEX EQU 2132 + +FREEVERSE_CINDEX EQU 2292 +CS_CINDEX EQU 2256 +RA_CINDEX EQU 2254 + diff --git a/Source/defs.inc b/Source/defs.inc new file mode 100644 index 0000000..6119e08 --- /dev/null +++ b/Source/defs.inc @@ -0,0 +1,688 @@ +INCLUDE "Source/class.inc" + +DEBUG EQU 0 +EMULATORCOMPATIBLE EQU 1 + +ENV_NONE EQU 0 +ENV_RAIN EQU 1 +ENV_SNOW EQU 2 +ENV_WINDYSNOW EQU 3 +ENV_DIRT EQU 4 +ENV_CLOUDS EQU 5 +ENV_COUNTER EQU 6 +ENV_DISCO EQU 7 + +HERODATASIZE EQU 16 + +HERODATA_DATA EQU 0 +HERODATA_JOY EQU 0 +HERODATA_INDEX EQU 1 +HERODATA_OBJ EQU 2 +HERODATA_BULLET_INDEX EQU 4 +HERODATA_CLASS EQU 5 +HERODATA_ENTERDIR EQU 7 +HERODATA_ENTERLOC EQU 8 +HERODATA_I EQU 10 +HERODATA_J EQU 11 +HERODATA_TYPE EQU 12 +HERODATA_HEALTH EQU 13 +HERODATA_MOVED EQU 14 ;to help with strafe etc +HERODATA_PUFFCOUNT EQU 15 + +DLG_BORDER EQU %00000001 +DLG_PRESSB EQU %00000010 +DLG_WAITRELEASE EQU %00000100 +DLG_NOCLEAR EQU %00001000 +DLG_BRAINIAC EQU %00010000 +DLG_CLEARSKIP EQU %00100000 + +DLG_BORDER_BIT EQU 0 +DLG_PRESSB_BIT EQU 1 +DLG_WAITRELEASE_BIT EQU 2 +DLG_NOCLEAR_BIT EQU 3 +DLG_BRAINIAC_BIT EQU 4 +DLG_CLEARSKIP_BIT EQU 5 +;dialog settings are tweaked in CheckSkip + +JOY_START EQU $80 +JOY_SELECT EQU $40 +JOY_B EQU $20 +JOY_A EQU $10 +JOY_DOWN EQU $08 +JOY_UP EQU $04 +JOY_LEFT EQU $02 +JOY_RIGHT EQU $01 + +JOY_START_BIT EQU 7 +JOY_SELECT_BIT EQU 6 +JOY_B_BIT EQU 5 +JOY_A_BIT EQU 4 +JOY_DOWN_BIT EQU 3 +JOY_UP_BIT EQU 2 +JOY_LEFT_BIT EQU 1 +JOY_RIGHT_BIT EQU 0 + +FIRSTOBJTILE EQU 160 +TOTALOBJTILE EQU 80 +TOTALTILES EQU ((FIRSTOBJTILE - TOTALOBJTILE) - 1) + +;reserved classes indicate that a tile in the map is part of a larger +;creature. If a tile were "CLASS_ADJOIN_N", for example, then the tile +;to the north would be either the actual monster or a pointer indicating +;which direction to look next +CLASS_ADJOIN_N EQU $fc +CLASS_ADJOIN_E EQU $fd +CLASS_ADJOIN_S EQU $fe +CLASS_ADJOIN_W EQU $ff + +DIR_NORTH EQU 0 +DIR_EAST EQU 1 +DIR_SOUTH EQU 2 +DIR_WEST EQU 3 + +EXIT_N EQU 1 +EXIT_E EQU 2 +EXIT_S EQU 3 +EXIT_W EQU 4 +EXIT_U EQU 5 +EXIT_D EQU 6 +EXIT_X EQU 7 + +;RAM banks +MAPBANK EQU 1 +TILEINDEXBANK EQU 2 +OBJLISTBANK EQU 2 +OBJBANK EQU 3 +TILESHADOWBANK EQU 4 +ATTRSHADOWBANK EQU 5 +ZONEBANK EQU 6 +WAYPOINTBANK EQU 7 +LEVELSTATEBANK EQU 7 +FADEBANK EQU 7 +MUSICBANK EQU 7 +FLIGHTCODEBANK EQU 7 + +;ROM banks +;0 - HOME: All map- and gfx-loading routines are here as well as the +; main control structures. The class vector table is also +; stored here. +;1 - CLASS: All class+object methods for the main game are here. This +; bank is switched in after a level has been loaded. +;2 - Tile0: First set of tile bitmap data and attribute tables. +;3 - Map0: First set of level data +CLASSROM EQU 1 +OBJROM EQU 1 +BGTILEROM1 EQU 2 +BGTILEROM2 EQU 5 +FGTILEROM EQU 3 +MAP0ROM EQU 4 + +FX_FADE EQU 1 + +;Flags (BGAttributes) +BG_FLAG_SPECIAL EQU %00111000 +BG_FLAG_WALKOVER EQU %00001000 +BG_FLAG_SHOOTOVER EQU %00010000 +BG_FLAG_ATTACKABLE EQU %00100000 + +BG_BIT_WALKOVER EQU 3 +BG_BIT_SHOOTOVER EQU 4 +BG_BIT_ATTACKABLE EQU 5 + +;Game State Flags +HERO_BA_FLAG EQU %00000001 +HERO_CS_FLAG EQU %00000001 + +HERO_BS_FLAG EQU %00000010 +HERO_RA_FLAG EQU %00000010 +HERO_FREEVERSE_FLAG EQU %00000010 + +HERO_HAIKU_FLAG EQU %00000100 +HERO_FLOUR_FLAG EQU %00001000 +HERO_FLOWER_FLAG EQU %00010000 +HERO_GRENADE_FLAG EQU %00100000 + +HERO_BA_BIT EQU 0 +HERO_BS_BIT EQU 1 +HERO_HAIKU_BIT EQU 2 +HERO_FLOUR_BIT EQU 3 +HERO_FLOWER_BIT EQU 4 +HERO_GRENADE_BIT EQU 5 + +;link cable codes +LTRUE EQU 1 +LSYNCHREADY EQU 1 +LSYNCHWAIT EQU 2 +LNULL EQU $40 ;control code %01000000 = no buttons +LGETGAMESTATE EQU $81 +LGETMAPINDEX EQU $82 +LUPDATESTATE EQU $83 +LUPDATEHERO EQU $84 +LSYNCHRONIZE EQU $85 +LYANKPLAYER EQU $86 ;yank player to specified map +LTERMINATE EQU $87 ;terminate the current link +LRESYNCHRONIZE EQU $88 +LGETRANDOMSEED EQU $89 +LLOCKHEROES EQU $8a +LCHANGEAPPXMAP EQU $8b +LADDINVITEM EQU $8c +LREMINVITEM EQU $8d +LUPDATEMEMORY EQU $8e +LLINKTEST EQU $90 +LNOLINK EQU $ff + +;main.asm +EXPORT encodeControlByteTable +EXPORT decodeControlByteTable + +;user.asm +EXPORT SetActiveROM +EXPORT LongCall +EXPORT LongCallNoArgs +EXPORT WaitFade +EXPORT GetInput +EXPORT VWait +EXPORT UpdateObjects +EXPORT RedrawMap +EXPORT HandleRemoteInput +EXPORT TransmitByte +EXPORT ReceiveByte +EXPORT ExchangeByte +EXPORT TransmitData +EXPORT ReceiveData +EXPORT TransmitCompressedData +EXPORT ReceiveCompressedData +EXPORT CheckSimultaneousLCC +EXPORT YankRemotePlayer +EXPORT RemoveRemoteHero +EXPORT DebugMesg +EXPORT DebugVal +EXPORT SetDialogSkip +EXPORT SetDialogForward +EXPORT ClearDialogSkipForward +EXPORT ClearSkipForward +EXPORT SetSkipStackPos +EXPORT OnHBlank +EXPORT CinemaOnHBlank +EXPORT HOffsetOnHBlank +EXPORT SeasonsOnHBlank +EXPORT UpdateObjTimers +EXPORT InstallHBlankHandler +EXPORT PlaySample +EXPORT samplePlaying +EXPORT sampleBank +EXPORT sampleAddress +EXPORT sampleMask +EXPORT AddAppomattoxIfPresent +EXPORT Lookup8 +EXPORT Lookup16 +EXPORT LookupIndexOfData8 +EXPORT FindFirstBGLoc +EXPORT LinkTransmitMemoryLocation + +EXPORT curInput0 +EXPORT curInput1 +EXPORT dialogJoyIndex +EXPORT dialogSpeakerIndex +EXPORT getLocInitFacing +EXPORT losLimit +EXPORT longCallTempA +EXPORT amChangingMap +EXPORT curHeroAddressL +EXPORT heroesPresent +EXPORT vblankTimer +EXPORT backBufferReady +EXPORT backBufferDestHighByte +EXPORT paletteBufferReady +EXPORT dmaLoad +EXPORT randomLoc +EXPORT jiggleDuration +EXPORT jiggleType +EXPORT transmitACK +EXPORT hblankVector + +EXPORT objTimerBase +EXPORT objTimer60ths +EXPORT heroTimerBase +EXPORT heroTimer60ths +EXPORT levelCheckSkip +EXPORT dialogSettings +EXPORT fadeRange +EXPORT moveAlignPrecision +EXPORT fireBulletDirection +EXPORT fireBulletDamage +EXPORT fireBulletSound +EXPORT fireBulletLocation +EXPORT explosionInitialFrame +EXPORT myGroup +EXPORT myFacing +EXPORT secondChoiceDirection + +EXPORT curLevelIndex +EXPORT curLevelStateIndex +EXPORT timeToChangeLevel +EXPORT mapTotalSize +EXPORT mapExitLinks +EXPORT specialFX +EXPORT dmaLoadSrc0 +EXPORT dmaLoadDest0 +EXPORT dmaLoadLen0 +EXPORT dmaLoadSrc1 +EXPORT dmaLoadDest1 +EXPORT dmaLoadLen1 +EXPORT bgFlags +EXPORT baMoved +EXPORT bsMoved +EXPORT heroJoyIndex +EXPORT myJoy +EXPORT levelCheckStackPos +EXPORT displayType +EXPORT scrollSprites +EXPORT heroesIdle +EXPORT allIdle +EXPORT dialogIdleSettings +EXPORT canJoinMap +EXPORT checkTemp +EXPORT metaSprite_y +EXPORT metaSprite_x +EXPORT metaSprite_first_x + +EXPORT curJoy0 +EXPORT hero0_data +EXPORT hero0_index +EXPORT hero0_object +EXPORT hero0_bullet_index +EXPORT hero0_class +EXPORT hero0_enterLevelFacing +EXPORT hero0_enterLevelLocation +EXPORT hero0_i +EXPORT hero0_j +EXPORT hero0_type +EXPORT hero0_health +EXPORT hero0_moved +EXPORT hero0_puffCount + +EXPORT curJoy1 +EXPORT hero1_data +EXPORT hero1_index +EXPORT hero1_object +EXPORT hero1_bullet_index +EXPORT hero1_class +EXPORT hero1_enterLevelFacing +EXPORT hero1_enterLevelLocation +EXPORT hero1_i +EXPORT hero1_j +EXPORT hero1_type +EXPORT hero1_health +EXPORT hero1_moved +EXPORT hero1_puffCount + +EXPORT levelVars + +EXPORT linkBailOut + +EXPORT musicEnabled +EXPORT musicOverride1 +EXPORT musicOverride4 +EXPORT musicBank +EXPORT musicNoteCountdownInit +EXPORT musicNoteCountdown +EXPORT musicTrack1Pos +EXPORT musicTrack2Pos +EXPORT musicTrack3Pos +EXPORT musicTrack4Pos +EXPORT musicInstrument1 +EXPORT musicInstrument2 +EXPORT musicInstrument3 +EXPORT musicInstrument4 +EXPORT musicWaveform +EXPORT musicStack +EXPORT curTrackStackL +EXPORT musicStackL1 +EXPORT musicStackL2 +EXPORT musicStackL3 +EXPORT musicStackL4 +EXPORT musicRegisters +EXPORT musicAddress + +EXPORT numFreeObjects +EXPORT fgFlags +EXPORT lineZeroHorizontalOffset +EXPORT exitTileIndex + +EXPORT hblankWinOn +EXPORT hblankWinOff +EXPORT hblankFlag + +;gfx.asm +EXPORT LoadNextLevel +EXPORT temp +EXPORT drawMapTemp +EXPORT SpriteDMAHandler +EXPORT InitGfx +EXPORT DisplayOff +EXPORT VMemCopy +EXPORT MemSet +EXPORT MemCopy +EXPORT InitDMALoad +EXPORT WaitDMALoad +EXPORT DMALoad +EXPORT SetupCommonColor +EXPORT AddHL16 +EXPORT AddDE16 +EXPORT GenerateFacings +EXPORT LoadSprites +EXPORT LoadFont +EXPORT PrepareForInitialMapDraw +EXPORT DrawMapToBackBuffer +EXPORT DrawCinemaToBackBuffer +EXPORT AdjustCameraToHero +EXPORT GentleCameraAdjust +EXPORT RestrictCameraToBounds +EXPORT ScrollToCamera +EXPORT ScrollSpritesLeft +EXPORT ScrollSpritesRight +EXPORT ScrollSpritesUp +EXPORT ScrollSpritesDown +EXPORT GetRandomNumZeroToN +EXPORT GetRandomNumMask +EXPORT SetupFadeFromWhite +EXPORT SetupFadeFromStandard +EXPORT FadeCommonSetPaletteToWhite +EXPORT FadeCommonSetPaletteToBlack +EXPORT FadeCommonSetPaletteToBlackBGOnly +EXPORT SetupFadeToWhite +EXPORT SetupFadeToStandard +EXPORT SetupFadeFromBlack +EXPORT BlackoutPalette +EXPORT SetupFadeToBlack +EXPORT SetupFadeFromBlackBGOnly +EXPORT SetupFadeToBlackBGOnly +EXPORT SetupFadeFromSaturated +EXPORT SetupFadeToGamePalette +EXPORT SetupFadeToHalfbrite +EXPORT FadeCommonCopyPalette +EXPORT CopyPalette64 +EXPORT CopyPalette32 +EXPORT InstallGamePalette +EXPORT FadeInit +EXPORT FadeStep +EXPORT LighteningOut +EXPORT LighteningIn +EXPORT GetRedComponent +EXPORT GetGreenComponent +EXPORT GetBlueComponent +EXPORT SetRedComponent +EXPORT SetGreenComponent +EXPORT SetBlueComponent +EXPORT PlaySound +EXPORT PlaySoundChannel1 +EXPORT PlaySoundChannel2 +EXPORT PlaySoundChannel3 +EXPORT PlaySoundChannel4 + +EXPORT WaitInput +EXPORT WaitInputZero +EXPORT WaitInputClick +EXPORT CreateBigExplosion +EXPORT BlitMap +EXPORT LCheckGetVectorToState +EXPORT SaveIdle +EXPORT RestoreIdle +EXPORT MakeIdle +EXPORT MakeNonIdle +EXPORT UseAlternatePalette +EXPORT UpdateDialogBalloons +EXPORT DisableDialogBalloons +EXPORT ResetFreeSprites +EXPORT UpdateEnvEffect +EXPORT SetEnvEffect + +EXPORT CheckEachHero +EXPORT RemoveHero +EXPORT SetRespawnMap +EXPORT SetJoinMap +EXPORT SetLinkBailOutAddress +EXPORT SetHBlankHandler +EXPORT GetMethodAddrFromPointer +EXPORT CallBGAction + +EXPORT ResetSprites + +;cinema.asm +EXPORT LoadCinemaBG +EXPORT LoadCinemaSprite +EXPORT LoadCinemaTextBox +EXPORT CinemaBlitRect +EXPORT CinemaSpotAnimationRandomVerticalFrames +EXPORT CinemaSpotAnimationRandomHorizontalFrames +EXPORT StdWaitDialogNoClear +EXPORT StdWaitDialog + +;cinema character animation routines +EXPORT AnimateSkippy +EXPORT AnimateFlour +EXPORT AnimateHaiku +EXPORT AnimateBRAINIAC +EXPORT AnimateLadyFlower +EXPORT AnimateFlourDriving +EXPORT AnimateBS +EXPORT AnimateBA +EXPORT AnimateLadyFlowerDistress +EXPORT AnimateCaptainGunpoint +EXPORT State0To1 + + +;map.asm +EXPORT BGTiles1024 +EXPORT LoadMap +EXPORT MapCoordsToIndex +EXPORT SetupMapVarsFromWidthPitchAndHeight +EXPORT ParseMap +EXPORT ClearBackBuffer +EXPORT SetBGSpecialFlags +EXPORT ResetMyBGSpecialFlags +EXPORT CallMapInit +EXPORT LoadAssociatedClass +EXPORT SaveFGTileInfo +EXPORT RestoreFGTileInfo +EXPORT PrepSetupHero +EXPORT PrepSetupHeroBC +EXPORT SetupHero +EXPORT FindExitLocation +EXPORT FindClassIndex +EXPORT ChangeClass +EXPORT ChangeFirstClass +EXPORT ChangeMyClass +EXPORT ChangeMyClassAndRedraw +EXPORT ChangeMyClassToAssociatedAndRedraw +EXPORT RemoveObjectFromList +EXPORT AddObjectToList +EXPORT CopyMapMethodToRAM +EXPORT HandleExitFromMap +EXPORT HasInventoryItem +EXPORT AddInventoryItem +EXPORT GetFirstInventoryIndex +EXPORT GetNextInventoryIndex +EXPORT RemoveInventoryItem +EXPORT GuestContinueSynchronization + +EXPORT map +EXPORT zoneBuffer +EXPORT backBuffer +EXPORT attributeBuffer +EXPORT tileShadowBuffer +EXPORT attributeShadowBuffer +EXPORT gamePalette +EXPORT objBackBuffer +EXPORT objAttributeBuffer +EXPORT mapOffsetNorth +EXPORT mapOffsetEast +EXPORT mapOffsetSouth +EXPORT mapOffsetWest +EXPORT mapWidth +EXPORT mapPitch +EXPORT mapPitchMinusOne +EXPORT mapPitchMinusOneComplement +EXPORT mapSkip +EXPORT mapHeight +EXPORT numClasses +EXPORT firstHero +EXPORT numFGTiles +EXPORT fgDestPtr +EXPORT firstMonster +EXPORT mapColor +EXPORT mapLeft +EXPORT mapTop +EXPORT mapRight +EXPORT mapBottom +EXPORT mapRightPlusOne +EXPORT mapBottomPlusOne +EXPORT mapMaxLeft +EXPORT mapMaxTop +EXPORT camera_i; +EXPORT camera_j; +EXPORT distToWall_N +EXPORT distToWall_E +EXPORT distToWall_S +EXPORT distToWall_W + +EXPORT curROMBank +EXPORT updateTimer +EXPORT curObjWidthHeight +EXPORT scrollSpeed + +EXPORT gameState +EXPORT heroesAvailable +EXPORT heroesUsed +EXPORT heroesLocked +EXPORT appomattoxMapIndex +EXPORT respawnMap +EXPORT joinMap +EXPORT guardAlarm +EXPORT amLinkMaster +EXPORT lastLinkAction +EXPORT checkInputInMainLoop +EXPORT amShowingDialog +EXPORT gameStatePad + +EXPORT desiredMapLeft +EXPORT desiredMapTop +EXPORT curPixelOffset_x +EXPORT curPixelOffset_y +EXPORT desiredPixelOffset_x +EXPORT desiredPixelOffset_y +EXPORT scrollAccelState_x +EXPORT scrollAccelState_y + +EXPORT tempL,tempH +EXPORT delTempL,delTempH + +EXPORT methodParamL +EXPORT methodParamH +EXPORT bulletDirection +EXPORT bulletLocation +EXPORT bulletColor +EXPORT bulletClassIndex +EXPORT bulletDamage + +EXPORT inventory +EXPORT dialogNPC_speakerIndex +EXPORT dialogNPC_heroIndex +EXPORT dialogBalloonClassIndex +EXPORT envEffectType +EXPORT bsUpgrades +EXPORT baUpgrades +EXPORT haikuUpgrades + +EXPORT mapBank +EXPORT mapContents +EXPORT mapState +EXPORT mapDialogClassIndex +EXPORT mapHeroZone + +EXPORT dialogBank +EXPORT classLookup + +EXPORT bgTileMap +EXPORT bgAttributes +EXPORT fgTileMap +EXPORT fgAttributes +EXPORT spritesUsed +EXPORT associatedIndex +EXPORT flightCode +EXPORT fadeCurPalette +EXPORT fadeFinalPalette +EXPORT fadeCurRGB +EXPORT fadeDelta +EXPORT fadeError +EXPORT fadeSteps +EXPORT fadeStepsToGo + +EXPORT FOFTable +EXPORT wayPointList +EXPORT pathList +EXPORT pathMatrix +EXPORT levelState +EXPORT heroState + +EXPORT rainbowColors +EXPORT horizontalOffset + +EXPORT levelCheckRAM +levelCheckADDR EQU $c900 +EXPORT spriteOAMBuffer + +EXPORT ShowTitle +EXPORT SetSpeakerToFirstHero +EXPORT SetSpeakerFromHeroIndex +EXPORT SetPressBDialog +EXPORT CheckDialogContinue +EXPORT ShowDialogNPC +EXPORT ShowDialogHero +EXPORT ShowDialogAtTop +EXPORT ShowDialogAtTopNoWait +EXPORT ShowDialogAtTopCommon +EXPORT ShowDialogAtBottom +EXPORT ShowDialogAtBottomNoWait +EXPORT ShowDialogAtBottomCommon +EXPORT ShowDialogWait +EXPORT ClearGTXLine +EXPORT WriteGTXLine +EXPORT ClearDialog +EXPORT GfxBlitBackBufferToWindow +EXPORT GfxShowStandardTextBox +EXPORT CheckSkip +EXPORT Delay + +;music.asm +EXPORT InitMusic +EXPORT PlayMusic +EXPORT StopMusic +EXPORT IsCurMusic + +EXPORT beehive_gbm +EXPORT hoedown_gbm +EXPORT alarm_gbm +EXPORT intro_cinema_gbm +EXPORT bs_gbm +EXPORT lady_flower_gbm +EXPORT main_in_game_gbm +EXPORT haiku_gbm +EXPORT moon_base_ba_gbm +EXPORT moon_base_haiku_gbm +;EXPORT shroom_gbm +EXPORT cowboy_gbm +EXPORT frosty_gbm +EXPORT fgbwar_gbm +EXPORT wedding_gbm +EXPORT takeoff_gbm +EXPORT spaceish_gbm +EXPORT death_gbm +EXPORT jungle_gbm +EXPORT mysterious_gbm + +EXPORT GetNumObjects + +INCLUDE "Source/macro.inc" + diff --git a/Source/gfx.asm b/Source/gfx.asm new file mode 100644 index 0000000..4a023e3 --- /dev/null +++ b/Source/gfx.asm @@ -0,0 +1,7718 @@ +;*************************************************************************** +;* gfx.asm - graphics support routines +;* 12.17.99 by Abe Pralle +;* +;*************************************************************************** + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/start.inc" + +MAX_PER_TURN EQU 32 + + + +FAST_SCROLL_THRESHOLD EQU 2 + + +SECTION "Graphics",ROM0 +;--------------------------------------------------------------------- +; Routine: InitGfx +; Description: Sets up some basic graphics stuff - One time +;--------------------------------------------------------------------- +InitGfx:: + push bc + push de + push hl + + ;set up game state + ld a,$ff + ld [amLinkMaster],a + xor a + ld [lastLinkAction],a + ld [amChangingMap],a + ld [heroesPresent],a + + ld a,(hero0_data & $ff) + ld [curHeroAddressL],a + + ld a,(HERO_BA_FLAG | HERO_BS_FLAG | HERO_HAIKU_FLAG) + ld [heroesAvailable],a + + xor a + ld [heroesUsed],a + ld [randomLoc],a + ldio [musicEnabled],a + ld [musicBank],a + ld [musicAddress],a + ld [musicAddress+1],a + ld [heroesLocked],a + ld [hero0_puffCount],a + ld [hero1_puffCount],a + ld [inLoadMethod],a + + ld c,16 + ld hl,inventory +.clearInventory + ld [hl+],a + dec c + jr nz,.clearInventory + +;ld a,%10100001 +;ld [inventory],a +;ld a,%00000011 +;ld [inventory+1],a + + xor a + ld [musicOverride1],a + ld [musicOverride4],a + + ld a,64 + ld [fadeRange],a + + ld a,APPOMATTOXMAPINDEX + ld [appomattoxMapIndex],a + + ld a,BANK(init_flightCodes) + call SetActiveROM + ld a,FLIGHTCODEBANK + ld bc,256 + ld de,flightCode + ld hl,init_flightCodes + call MemCopy + + xor a + ldio [dmaLoad],a + ld [displayType],a + + ld a,1 + ldio [curROMBank],a + + call DisplayOff + call SetupSpriteHandler + + ;sound off + xor a + ldio [$ff26],a + + ;envelopes to zero + xor a + ldio [$ff12],a ;zero envelope all instruments + ldio [$ff17],a + ldio [$ff1c],a + ldio [$ff21],a + + ;turn on sound master control + ld a,$80 + ldio [$ff26],a + ld a,$ff + ldio [$ff24],a ;full volume both channels + ldio [$ff25],a ;all sounds to both channels + + ;setup vector to hblank + ld a,$c3 + ld [hblankVector],a ;opcode of jp + ld hl,OnHBlank + ld a,l + ld [hblankVector+1],a + ld a,h + ld [hblankVector+2],a + + ;enable VBlank interrupts + ld a,[$ffff] + or 1 + ld [$ffff],a + + ;turn LCD on + ld a,%11000011 + ld [$ff40], a ;lcdc control + + ;clear all level states to zero + ld a,LEVELSTATEBANK + ld [$ff70],a + ld c,0 ;loop 256 times + ld hl,levelState + xor a +.clearStateLoop + ld [hl+],a + dec c + jr nz,.clearStateLoop + + ld a,1 ;fade from white the first time + ld [standardFadeColor],a + + ;enable interrupts + ei + + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: VMemCopy +; Arguments: a - VRAM bank of destination +; c - length in multiples of 16 bytes +; de - dest +; hl - source +; Alters: af +; [$ff4f] VRAM bank +; Description: Copies bytes from source to destination in VRAM. +; If screen is active it utilizes DMA loading, otherwise +; a normal copy is performed. DMA copies exceeding +; 2048 bytes may produce weird results. +;--------------------------------------------------------------------- +VMemCopy:: + push bc + push de + push hl + push af + + ;test if screen is on + ldio a,[$ff40] + and %10000000 + jr nz,.screenIsOn + +.screenIsOff + pop af + ldio [$ff4f],a ;switch VRAM bank + +.setLoop + ld b,16 +.bytesLoop + ld a,[hl+] + ld [de],a + inc de + dec b + jr nz,.bytesLoop + + dec c + jr nz,.setLoop + jr .done + +.screenIsOn ;copy using DMA + pop af + call InitDMALoad + call WaitDMALoad + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: MemSet +; Arguments: a - RAM bank of destination +; bc - length in bytes +; d - byte to set to +; hl - dest +; Alters: af +; [$ff70] RAM bank +; Description: Sets each byte in the range to be the specified value. +;--------------------------------------------------------------------- +MemSet:: + push bc + push de + push hl + + ldio [$ff70],a + +.loop ld a,d + ld [hl+],a + dec bc + xor a + cp b + jr nz,.loop + cp c + jr nz,.loop + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: MemCopy +; Arguments: a - RAM bank +; bc - non-zero length in bytes +; de - destination starting address +; hl - source start address +; Alters: af +; [$ff70] RAM bank +; Description: Copies each of "bc" # of bytes from source to dest. +; Alters the RAM bank to specified but does not revert +; to original during or after copying. +;--------------------------------------------------------------------- +MemCopy:: + push bc + push de + push hl + + ldio [$ff70],a ;set RAM + +.copy ld a,[hl+] + ld [de],a + inc de + xor a + dec bc + cp b + jr nz,.copy + cp c + jr nz,.copy + + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: InitDMALoad +; Arguments: a - VRAM bank of destination +; c - length in multiples of 16 bytes +; de - dest +; hl - source +; Alters: af +; Description: Preps appropriate variables for DMA transfer to take +; place on VBlank. Note may be called multiple times +; (er, twice) to set up values for bank 0 and bank 1 +; transfer. Note that transfers for bank 0 and bank 1 +; combined should not exceed 2048 bytes (and perhaps +; a bit less) +;--------------------------------------------------------------------- +InitDMALoad:: + or a + jr nz,.prepBank1 + +.prepBank0 + ld a,l + ld [dmaLoadSrc0],a + ld a,h + ld [dmaLoadSrc0+1],a + + ld a,e + ld [dmaLoadDest0],a + ld a,d + ld [dmaLoadDest0+1],a + + ld a,c + dec a + ld [dmaLoadLen0],a + + ldio a,[dmaLoad] + or 1 + ldio [dmaLoad],a + ret + +.prepBank1 + ld a,l + ld [dmaLoadSrc1],a + ld a,h + ld [dmaLoadSrc1+1],a + + ld a,e + ld [dmaLoadDest1],a + ld a,d + ld [dmaLoadDest1+1],a + + ld a,c + dec a + ld [dmaLoadLen1],a + + ldio a,[dmaLoad] + or 2 + ldio [dmaLoad],a + ret + +;--------------------------------------------------------------------- +; Routine: WaitDMALoad +; Alters: af +;--------------------------------------------------------------------- +WaitDMALoad:: + push bc + push de + push hl +.wait + ldio a,[dmaLoad] + and %11 + jr nz,.wait + + call GetInput + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: DMALoad +; Arguments: a - VRAM bank of destination +; c - byte length / 16 +; hl - source +; de - dest +; Alters: af +; Description: Combines InitDMALoad and WaitDMALoad. +;--------------------------------------------------------------------- +DMALoad:: + call InitDMALoad + call WaitDMALoad + ret + +;--------------------------------------------------------------------- +; Routine: DisplayOff +; Arguments: +; Alters: af +; Description: Waits for VBlank then turns of the display +;--------------------------------------------------------------------- +DisplayOff:: + ;skip if the display is off already + ld a,[$ff40] + and %10000000 + ret z + + ;turn display off + ld a,[$ffff] ;get interrupts enabled + push af ;save original value + and %11111110 ;turn off vblank interrupt + ld [$ffff],a ;"interrupt THIS!" +.wait ld a,[$ff44] ;get line being drawn + cp 144 ;wait until line is >= 144 + jr c,.wait + ld a,[$ff40] ;LCDC register + and %01111111 ;turn off screen + ld [$ff40],a + pop af ;retrieve original interrupt settings + ld [$ffff],a + +.waitVRAM + ld a,[$ff41] ;STAT register + and %00000010 ;bit 1 needs to be zero to access VRAM + jr nz,.waitVRAM + ret + +;--------------------------------------------------------------------- +; Subroutine: LoadNextLevel +; Arguments: +; Alters: af +; Description: Does all the prep work of setting up the next level +; based on arguments stored in memory +;--------------------------------------------------------------------- +LoadNextLevel:: + push bc + push de + push hl + +.reload + ld a,1 + ld [amChangingMap],a + + ;xor a + ;ld [timeToChangeLevel],a + + ;save old level's level state + ld a,LEVELSTATEBANK + ld [$ff70],a + ld a,[curLevelStateIndex] + ld l,a + ld h,((levelState>>8) & $ff) + ldio a,[mapState] + or a + jr nz,.stateNotZero + ld a,1 +.stateNotZero + ld [hl],a + + ;clear joystick input + xor a + ld [curJoy0],a + ld [curJoy1],a + ldio [jiggleDuration],a + ld [jiggleType],a ;normal jiggle + + call PrepLevel + ld a,[timeToChangeLevel] + or a + jr nz,.reload + + ;set interrupt controller flag so the interrupt will happen + ld a,[$ffff] ;interrupt enable control register + or %00000011 ;enable vblank and hblank interrupts + ld [$ffff],a ;store that back in the IEC + + call DrawMapToBackBuffer + + ;ld b,METHOD_CHECK + ;call IterateAllLists + + ;initialize some values + xor a + ldio [backBufferReady],a + + xor a + ld [amChangingMap],a + + ei ;enable interrupts + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: PrepLevel +; Description: Sets up some basic graphics stuff +;--------------------------------------------------------------------- +PrepLevel:: + push bc + push de + push hl + + ;reset some stuff + xor a + ld [levelCheckSkip],a + ld [levelCheckSkip+1],a + ld [levelCheckSkip+2],a + ld [levelCheckSkip+3],a + ld a,MAX_PER_TURN + ld [iterateNumObjects],a + + ld hl,timeToChangeLevel + ld a,[hl] + ld [hl],0 + cp 2 ;2=skip init & load in next + jp z,.loadMap + + ;restore default vector to hblank + ld hl,OnHBlank + call InstallHBlankHandler + + xor a + ldh [$ff43], a ;set screen offsets to 0 + ldh [$ff42], a + + xor a + ldh [$ff4a], a ;set window offsets to 7,0 + ld a,7 + ldh [$ff4b], a + + xor a + ld [specialFX],a + ld [paletteBufferReady],a + ld [mapColor],a + ld [mapColor+1],a + ld [bgAttributes],a + ld [bgTileMap],a + ld [checkInputInMainLoop],a + ld [dialogJoyIndex],a + ld [heroJoyIndex],a + ld [hero0_index],a + ld [hero1_index],a + ld [heroesIdle],a + ld [allIdle],a + ld [mapDialogClassIndex],a + ld [dialogSettings],a ;no border, no press B + ld [amShowingDialog],a + ld [objTimerBase],a + ld [objTimer60ths],a + ld [heroTimerBase],a + ld [heroTimerBase],a + ld [lineZeroHorizontalOffset],a + ld [samplePlaying],a + ld [guardAlarm],a + ld [dialogNPC_speakerIndex],a + ld [dialogNPC_heroIndex],a + ld [dialogBalloonClassIndex],a + ld [envEffectType],a + + ;clear the horizontal offsets + ld bc,144 + ld d,0 + ld hl,horizontalOffset + ld a,TILEINDEXBANK + call MemSet + + ld a,1 + ld [canJoinMap],a + + ld de,0 + call SetDialogSkip + call SetDialogForward + + ;--------------------------- + xor a + ;turn all sounds off + ldio [$ff12],a ;sound 1 envelope + ldio [$ff17],a ;sound 2 envelope + ldio [$ff1a],a ;sound 3 output + ldio [$ff21],a ;sound 4 envelope + + ld a,$ff + ld [$ff24],a ;full volume both channels + ;--------------------------- + + ld a,$ff + ld [dialogSpeakerIndex],a + + ;ld a,$21 ;fast=2, slow=1 + ;ld a,$22 ;fast=2, slow=2 + ld a,$42 + ldio [scrollSpeed],a + + ;set up each entry of bgTileMap to be its own index for a + ;speed trick in the map redraw + ld c,0 + ld hl,bgTileMap + xor a +.initBGTileMap + ld [hl+],a + inc a + dec c + jr nz,.initBGTileMap + + ld a,%00100111 ;background palette colors + ld [$ff47],a + + ld a,1 + ld [scrollSprites],a + + call LoadGraphics + + ;go back to VRAM bank zero + xor a ;Switch to tile map + ld [$ff00+$4f],a ;(VRAM bank 0) + + call SetupGamePalettes + + ;load in inventory items tiles 246-254 + ld a,BANK(BGTiles1024) + call SetActiveROM + ld a,1 + ;xor a + ld c,9 ;#characters + ld de,$8f60 + ld hl,BGTiles1024+$3f70 + call VMemCopy + + call LoadFont + + ld a,1 + ld c,1 ;1 character + ld de,$8ff0 + ld hl,blankTileData + call VMemCopy + + ;set up hblank interrupt + ld a,143 + ld [$ff45],a ;set lyc + xor a + ld [hblankFlag],a ;don't show dialog window + ld a,[$ff0f] ;clear LCDC interrupt flag + and %11111101 + ld [$ff0f],a + + ld a,119 + ldio [hblankWinOn],a + ld a,143 + ldio [hblankWinOff],a + + ld a,%00001100 ;setup stat for lyc = ly + ld [$ff41],a + + ld a,[$ffff] ;enable hblank interrupt + or %00000010 + ld [$ffff],a + + ld a,$98 + ld [backBufferDestHighByte],a + + call ResetSprites + +.loadMap + ; load in a map + ld a,BANK(ResetList) + call SetActiveROM + call ResetList + call ClearFGBGFlags + + ld hl,curLevelIndex + ld a,[hl+] + ld h,[hl] + ld l,a + call LoadMap + +.done + pop hl + pop de + pop bc + ret + +LoadFont:: + ;load in font into $8c80 (tiles 200-253) + ld a,BANK(fontData) + call SetActiveROM + xor a + ld c,62 ;# characters + ld de,$8c00 + ld hl,fontData + jp VMemCopy + +;--------------------------------------------------------------------- +; Routine: SetupSpriteHandler +; Description: Copies the routine required for sprite DMA to high +; RAM and initializes the sprites to off +;--------------------------------------------------------------------- +SetupSpriteHandler:: + ld hl,oamHandlerStart ;src addr + ld de,SpriteDMAHandler ;dest addr + ld c,(oamHandlerFinish - oamHandlerStart) ;# of bytes + +.loop ld a,[hl+] + ld [de],a + inc de + + dec c + jr nz,.loop + + call ResetSprites + + ret + +oamHandlerStart: + ld a,((spriteOAMBuffer>>8) & $ff) ;addr of start (in $100's) + ld [$ff00+$46],a ;start sprite dma + ld a,$28 ;start a delay loop +.wait dec a + jr nz,.wait + ret +oamHandlerFinish: + + +;--------------------------------------------------------------------- +; Routine: SetupCommonColor +; Arguments: b - Color Spec for entry to set up +; de - color for entry +; Description: Sets all 8 palettes (bg AND sprite) to have the same +; colors for the specified entry. +; Note: The format specification should have bit 7 set so it +; auto-selects the next palette +;--------------------------------------------------------------------- +SetupCommonColor:: + push af + push bc + push hl + + ld a,FADEBANK + ld [$ff70],a + ld a,b + + ld h,((gamePalette>>8) & $ff) + and %00000110 ;color # * 2 + add (gamePalette & $ff) + ld l,a + + ld a,b + + ld c,16 + +.loop + ld a,e ;Get low byte of color + ld [hl+],a ;store it in game palette + + ld a,d ;Get high byte of color + ld [hl+],a ;store in game palette + + ld a,l ;skip next 3 colors in game palette + add 6 + ld l,a + + dec c + jr nz,.loop + + pop hl + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: SetupGamePalettes +; Description: Sets up [gamePalette] the in-game colors but sets +; the actual hardware to be all standard +;--------------------------------------------------------------------- +SetupGamePalettes: + push bc + push de + push hl + + ld a,FADEBANK + ld [$ff70],a + + ld a,%10000000 ;color specs + ld [$ff68],a + ld [$ff6a],a + + ld bc,$0000 ;standard fade color + ld hl,standardFadeColor + ld a,[hl] + ld [hl],0 + or a + jr z,.fadeColorSet + + ld bc,$7fff ;color 1 = white + +.fadeColorSet + ld hl,.stdPaletteData + ld de,gamePalette + ld a,32 ;set up 64 bytes (32 colors) + + +.loop push af + ld a,[hl+] + ld [de],a ;copy of palette + inc de + ld a,[hl+] + ld [de],a + inc de + + ld a,c + ld [$ff69],a ;bg palette + ld [$ff6b],a ;fg palette + + ld a,b + ld [$ff69],a ;bg palette + ld [$ff6b],a ;fg palette + + pop af + dec a + jr nz,.loop + +;repeat for FG colors + ld hl,.stdPaletteData + ld c,32 ;set up 64 bytes (32 colors) + +.loopFG ld a,[hl+] + ld [de],a ;copy of palette + inc de + ld a,[hl+] + ld [de],a + inc de + + dec c + jr nz,.loopFG + + pop hl + pop de + pop bc + + ret + +.stdPaletteData + DW $0000, $2108, $4210, $7fff ;Palette 0 (Grey) + DW $0000, $000A, $001f, $7fff ;Palette 1 (Red) + DW $0000, $5000, $7e00, $7fff ;Palette 2 (Blue) + DW $0000, $0140, $03e0, $7fff ;Palette 3 (Green) + DW $0000, $4008, $5192, $7fff ;Palette 4 (Purple) + DW $0000, $01cd, $03fe, $7fff ;Palette 5 (Yellow) + DW $0000, $00d1, $09ff, $7fff ;Palette 6 (Brown) + DW $0000, $4412, $799c, $7fff ;Palette 7 (Fuscia) + +;--------------------------------------------------------------------- +; Routines: IndexToPointerDE +; IndexToPointerHL +; Arguments: a - index 1-255 of object +; Returns: de/hl - pointer $d010-$dff0 to object +;--------------------------------------------------------------------- +IndexToPointerDE:: + swap a + jr z,.null + ld e,a + and %00001111 + add $d0 + ld d,a + ld a,e + and %11110000 + ld e,a + ret +.null + ld de,0 + ret + +IndexToPointerHL:: + swap a + jr z,.null + ld l,a + and %00001111 + add $d0 + ld h,a + ld a,l + and %11110000 + ld l,a + ret +.null + ld hl,0 + ret + + +SECTION "TileCopyRoutines",ROM0 +;--------------------------------------------------------------------- +; Routines: AddHL16 +; AddDE16 +; Alters: af, (hl or de) +;--------------------------------------------------------------------- +AddHL16:: + ld a,l + add 16 + ld l,a + ret nc + inc h + ret +AddDE16:: + ld a,e + add 16 + ld e,a + ret nc + inc d + ret + +;--------------------------------------------------------------------- +; Routines: TileIndexLToAddressHL +; TileIndexEToAddressDE +; Arguments: l/e - tile index (0-255) +; Returns: hl/de - address of tile index ($9000 +/- index*16) +;--------------------------------------------------------------------- +TileIndexLToAddressHL: + push af + + ;shift "l" 4 left and into a + xor a ;clear a to zero (new high byte) + sla l ;shift into carry + rla ;carry into a + sla l ;repeat total of 4 times + rla ;carry into a + sla l + rla + sla l + rla + or $90 ;add base addr of $9000 + cp $98 ;>=$9800? + jr c,.allSet + + sub $10 ;signed #'s means >$9800 should be $8800+ + +.allSet + ld h,a ;a into h; hl is now $9000+/-offset + + pop af + ret + +TileIndexEToAddressDE: + push af + + ;shift "e" 4 left and into a + xor a ;clear a to zero (new high byte) + sla e ;shift into carry + rla ;carry into a + sla e ;repeat total of 4 times + rla ;carry into a + sla e + rla + sla e + rla + or $90 ;add base addr of $9000 + cp $98 + jr c,.allSet + + sub $10 + +.allSet + ld d,a ;a into d; de is now $9000+/-offset + + pop af + ret + + +;--------------------------------------------------------------------- +; Routine: TileCopyRotateCCW +; Arguments: l - Source tile index (0-255) +; e - Dest tile index +; Description: Copies pixels from source tile to dest tile, rotating +; 90 degrees counter clock-wise in the process +; Note: Assumes VRAM to be already accessible +;--------------------------------------------------------------------- +TileCopyRotateCCW: + push af + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ;Set up outer loop + ld a,8 ;outer loop 8 times + + ;Beginning of outer loop / Set up inner loop +.outer1 push de ;save source start + push af ;save outer loop counter + ld a,8 ;inner loop 8 times + +.inner1 push af ;save loop counter on stack + ld a,[de] ;get next even byte + rrca + rl b + ld [de],a + inc de + ld a,[de] ;get next odd byte + rrca + rl c + ld [de],a + inc de + + pop af ;retrieve loop counter + dec a + jr nz,.inner1 + + + ld a,b ;save next two bytes of result + ld [hl+],a + ld a,c + ld [hl+],a + + pop af ;retrieve outer loop counter + pop de ;reset srcptr to start of tile + dec a + jr nz,.outer1 + + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routines: TileCopy +; TileCopyShiftLeft +; TileCopyShiftRight +; TileCopyShiftLeftOverlay +; TileCopyShiftRightOverlay +; TileCopyShiftUp +; TileCopyShiftDown +; Arguments: e - Source tile index (0-15) +; l - Dest tile index (0-15) +; Description: Copies tiles while shifting 4 pixels in the specified +; direction (except for plain TileCopy). Tile patterns +; should be stored in $c000-$c0ff. "Overlay" routines +; OR the source with the destination. +;--------------------------------------------------------------------- +TileCopy: + push af + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ld c,16 ;loop 16 times +.loop ld a,[de] ;get a byte + inc de + ld [hl+],a ;put it in dest + dec c + jr nz,.loop + + pop hl + pop de + pop bc + pop af + ret + +TileCopyShiftLeft: + push af + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ld c,16 ;loop 16 times +.loop ld a,[de] ;get a byte + inc de + swap a ;flip nibbles + and $f0 ;clear out lower four bits + ld [hl+],a ;put it in dest + dec c + jr nz,.loop + + pop hl + pop de + pop bc + pop af + ret + +TileCopyShiftRight: + push af + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ld c,16 ;loop 16 times +.loop ld a,[de] ;get a byte + inc de + swap a ;flip nibbles + and $0f ;clear out upper four bits + ld [hl+],a ;put it in dest + dec c + jr nz,.loop + + pop hl + pop de + pop bc + pop af + ret + +TileCopyShiftLeftOverlay: + push af + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ld c,16 ;loop 16 times +.loop ld a,[de] ;get a byte + inc de + swap a ;flip nibbles + and $f0 ;clear out lower four bits + or [hl] ;combine with dest + ld [hl+],a + dec c + jr nz,.loop + + pop hl + pop de + pop bc + pop af + ret + +TileCopyShiftRightOverlay: + push af + push bc + push de + push hl + + ;Get tile addresses + call TileCopyIndicesToAddresses + + ld c,16 ;loop 16 times +.loop ld a,[de] ;get a byte + inc de + swap a ;flip nibbles + and $0f ;clear out upper four bits + or [hl] ;combine with dest + ld [hl+],a + dec c + jr nz,.loop + + pop hl + pop de + pop bc + pop af + ret + +TileCopyIndicesToAddresses: + push bc + ld c,4 + ld h,0 + ld d,0 +.loop + sla l + rl h + sla e + rl d + dec c + jr nz,.loop + pop bc + ld a,((backBuffer>>8) & $ff) + add a,h + ld h,a + ld a,((backBuffer>>8) & $ff) + add a,d + ld d,a + ret + +TileCopyShiftUp: + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ld a,e ;source += 8 + add 8 + ld e,a + + ld c,8 ;loop 8 times +.loop ld a,[de] ;get a byte + inc de + ld [hl+],a ;put it in dest + dec c + jr nz,.loop + + ;clear 4 rows (8 bytes) + ld c,8 + xor a +.clear + ld [hl+],a + dec c + jr nz,.clear + + pop hl + pop de + pop bc + ret + +TileCopyShiftDown: + push bc + push de + push hl + + call TileCopyIndicesToAddresses + + ;clear 4 rows (8 bytes) + ld c,8 + xor a +.clear + ld [hl+],a + dec c + jr nz,.clear + + ld c,8 ;loop 8 times +.loop ld a,[de] ;get a byte + inc de + ld [hl+],a ;put it in dest + dec c + jr nz,.loop + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: DuplicateTilesToSpriteMem +; Arguments: a - number of tiles to duplicate (1+) +; c - index of first tile in tile mem +; Alters: af +; Description: Copies {a} number of tiles (a*16 bytes) from $c000 +; (backBuffer) to $8000 + c*16. +; Note: Uses current VRAM bank +;--------------------------------------------------------------------- +DuplicateTilesToSpriteMem: + push bc + push de + push hl + + ld b,a ;tiles remaining + + ;de = $8000 + c*16 + ld a,c + swap a + and %00001111 + add $80 + ld d,a + + ld a,c + swap a + and %11110000 + ld e,a + + ;hl = $c000 + ld hl,backBuffer + +.next_tile + ;tiles 128-255 are in VRAM shared between sprites and tiles + ;and do not need to be copied. + ld a,c + cp 128 + jr nc,.after_copy + + push bc + ld c,1 ;1*16 bytes + ld a,1 ;VRAM bank 1 + call VMemCopy + pop bc + +.after_copy + ;de+=16, hl+=16 + call AddHL16 + call AddDE16 + + ;tileNum++, tilesRemaining-- + inc c + dec b + jr nz,.next_tile + + pop hl + pop de + pop bc + ret + +IF 0 + push bc + push de + push hl + + ld b,a + ld l,c + call TileIndexLToAddressHL + +.next_tile + ld a,h + cp $90 + jr c,.no_copy_necessary + + ;dest addr = source addr - $1000 + ld a,h + sub $10 + ld d,a + ld e,l + + ;source addr + ld hl,$c000 + ld c,16 + +.copy ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.copy + jr .after_copy + +.no_copy_necessary + ld de,16 + add hl,de + +.after_copy + dec b + jr nz,.next_tile + + pop hl + pop de + pop bc + ret +ENDC + +;--------------------------------------------------------------------- +; Routine: GenerateFacings +; Arguments: a - index (0-255) of the first of two consecutive +; tiles (frame1 and frame2) which should be facing +; east. Tiles should be located at $c000 +; (backBuffer). +; [curObjWidthHeight] - copy of FG attribute flags +; Description: Creates the following tiles at $9000-$97ff (indices +; 0-127) and $8800-$8fff (128-255): +; a - North facing, frame 1 +; a+1 - Top half of North facing, frame 2 +; a+2 - Bottom half of North facing, frame 2 +; a+3...a+5 - East facing (frame1, left frame2, right +; frame2) +; +; Duplicates any tiles in area $9000-$9800 into +; $8000-$8800 for tile<->sprite purposes +;--------------------------------------------------------------------- +GenerateFacings:: + push af + push bc + push de + push hl + + ld c,a ;starting index + + ldio a,[curObjWidthHeight] ;retrieve flags + bit BIT_2X2,a + jr z,.generate1x1 + jp .generate2x2 + +.generate1x1 + ld a,[curObjWidthHeight] ;attribute flags + bit BIT_NOROTATE,a + jr nz,.createNonRotatedSprites + +.createRotatedSprites + ;create non-split frames for sprites + ld e,0 ;source index + ld l,2 ;dest index + call TileCopyRotateCCW + inc e + inc l + call TileCopyRotateCCW + jr .copyTilesToSpriteMem + +.createNonRotatedSprites + ;create non-split frames for sprites + ld e,0 ;source index + ld l,2 ;dest index + call TileCopy + inc e + inc l + call TileCopy + +.copyTilesToSpriteMem + ld a,4 + call DuplicateTilesToSpriteMem + + ;East-facing frames + ld e,0 ;source index in e + ld l,3 ;dest index in l + call TileCopy + inc e ;source to next frame + inc l ;set dest index to next frame + call TileCopyShiftRight + inc l + call TileCopyShiftLeft + + ld a,[curObjWidthHeight] ;attribute flags + bit BIT_NOROTATE,a + jr nz,.copyNorthNoRotate + + ;North facings + ld l,0 ;dest is +0 (North) + ld e,3 ;Set source ptr to +3 (East) + call TileCopyRotateCCW + inc e + inc l + inc l + call TileCopyRotateCCW + inc e + dec l + call TileCopyRotateCCW + jr .copyBufferToVMem + +.copyNorthNoRotate + ld e,1 + ld l,6 + call TileCopy + ld e,6 + ld l,1 + call TileCopyShiftDown + inc l + call TileCopyShiftUp + +.copyBufferToVMem + ;Copy 6 tiles beginning at $c000+ to $9000+(c*16). + ;Next location after $97f0 is $8800. + ld a,c + cp 122 ;122+6 < 128 + jr c,.copySet ;to $9000+ + + cp 128 + jr nc,.copySet ;to $8800+ + +.copyOneByOne ;split across different banks + ld e,c + call TileIndexEToAddressDE ;destination + ld hl,$c000 ;source + + ld b,6 ;tiles to copy + ld c,1 ;copy 16 bytes at a time + +.nextTile + ld a,1 ;VRAM Bank 1 + call VMemCopy + call AddDE16 + call AddHL16 + ld a,d + cp $98 + jr nz,.destPtrOkay + ld d,$88 +.destPtrOkay + dec b + jr nz,.nextTile + jp .done + +.copySet + ld e,a + call TileIndexEToAddressDE + ld hl,$c000 + ld c,6 ;6*16 + ld a,1 + call VMemCopy + jp .done + +.generate2x2 + ;East-facing 2x2 + ld e,0 ;source index in e + ld l,10 ;dest index in l + call TileCopy + inc e + inc l + call TileCopy + inc e + inc l + call TileCopy + inc e + inc l + call TileCopy + + inc e + inc l + call TileCopyShiftRight + inc l + call TileCopyShiftLeft + inc e + call TileCopyShiftRightOverlay + inc l + call TileCopyShiftLeft + + inc e + inc l + call TileCopyShiftRight + inc l + call TileCopyShiftLeft + inc e + call TileCopyShiftRightOverlay + inc l + call TileCopyShiftLeft + + ld e,10 + ld l,2 + call TileCopyRotateCCW + inc e + ld l,0 + call TileCopyRotateCCW + inc e + ld l,3 + call TileCopyRotateCCW + inc e + ld l,1 + call TileCopyRotateCCW + inc e + ld l,8 + call TileCopyRotateCCW + inc e + ld l,6 + call TileCopyRotateCCW + inc e + ld l,4 + call TileCopyRotateCCW + inc e + ld l,9 + call TileCopyRotateCCW + inc e + ld l,7 + call TileCopyRotateCCW + inc e + ld l,5 + call TileCopyRotateCCW + + ;Copy 20 tiles beginning at $c000+ to $9000+(c*16). + ;Next location after $97f0 is $8800. + ld a,c + cp 108 ;108+20 < 128 + jr c,.copySet20 ;to $9000+ + + cp 128 + jr nc,.copySet20 ;to $8800+ + +.copyOneByOne20 ;split across different banks + ld e,c + call TileIndexEToAddressDE ;destination + ld hl,$c000 ;source + + ld b,20 ;tiles to copy + ld c,1 ;copy 16 bytes at a time + +.nextTile20 + ld a,1 ;VRAM Bank 1 + call VMemCopy + call AddDE16 + call AddHL16 + ld a,d + cp $98 + jr nz,.destPtrOkay20 + ld d,$88 +.destPtrOkay20 + dec b + jr nz,.nextTile20 + jr .done + +.copySet20 + ld e,a + call TileIndexEToAddressDE + ld hl,$c000 + ld c,20 ;20*16 + ld a,1 + call VMemCopy + jp .done + +.done + pop hl + pop de + pop bc + pop af + ret + +SECTION "Graphics",ROM0 +;--------------------------------------------------------------------- +; Routine: LoadGraphics +; Arguments: +;--------------------------------------------------------------------- +LoadGraphics: + ld a,BANK(BGTiles) + call SetActiveROM + + ;switch to vram bank 1 + ld a,1 + ;ld [$ff4f],a + call .loadBlank + + ;switch to vram bank 0 + xor a + ;ld [$ff4f],a + call .loadBlank + + ;load 86 explosion sprites + ld a,MAP0ROM + call SetActiveROM + xor a + ld c,86 ;#sprites + ld de,$8000 + ld hl,explosionSprites + call VMemCopy + +IF 0 + ;load 80 explosion sprites + ld a,MAP0ROM + call SetActiveROM + ld hl,explosionSprites + ld de,$8000 + ld b,80 ;# sprites +.outer ld c,16 ;16 bytes each +.inner ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.inner + dec b + jr nz,.outer +ENDC + + ret + +.loadBlank + ;load a blank tile to tile 0 of VRAM bank "a" + ;xor a + ld c,1 ;1 tile + ld de,$9000 + ld hl,BGTiles ;1st tile is blank + call VMemCopy + ret + +IF 0 + ld hl,blankTile ;address to get graphics from + ld de, $9000 ;destination address (Tile VRAM) + ld c, 1 * 16 ;copy 1 tile of 16 bytes +.loop ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.loop + ret +ENDC + +;--------------------------------------------------------------------- +; Routine: LoadSprites +; Arguments: a - ROM bank containing sprites +; c - number of sprites to load +; hl - starting addr of sprites to load +; de - dest addr of sprites to load +; Alters: af +; Description: Loads specified number of sprites to VRAM bank 0 +; specified location. Switches back to CLASSROM when +; done. Must be done on VBLANK or when display is off +;--------------------------------------------------------------------- +LoadSprites:: + push bc + push de + push hl + + call SetActiveROM + xor a ;VRAM bank 0 + ld [$ff4f],a + +.outer ld b,16 ;copy 16 bytes +.inner ld a,[hl+] + ld [de],a + inc de + dec b + jr nz,.inner + dec c + jr nz,.outer + + ld a,CLASSROM + call SetActiveROM + + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: PrepareForInitialMapDraw +; Description: Sets relevant variables so the map can be drawn +;--------------------------------------------------------------------- +PrepareForInitialMapDraw:: + call AdjustCameraToHero + call RestrictCameraToBounds + + ld hl,mapLeft + ld a,[desiredMapLeft] + ld [hl+],a ;mapLeft + add 20 + ld [hl+],a ;mapRight + inc a + ld [hl+],a ;mapRightPlusOne + + ld a,[desiredMapTop] + ld [hl+],a ;mapTop + add 18 + ld [hl+],a ;mapBottom + inc a + ld [hl+],a ;mapBottomPlusOne + + xor a + ld [curPixelOffset_x],a + ld [curPixelOffset_y],a + ld [desiredPixelOffset_x],a + ld [desiredPixelOffset_y],a + ld [scrollAccelState_x],a + ld [scrollAccelState_y],a + + ;set up a table for speedy AI + ;east offset is +1 + ld a,1 + ld [mapOffsetEast],a ;low byte + xor a + ld [mapOffsetEast+1],a ;high byte + + ;west offset is -1 + ld a,$ff + ld [mapOffsetWest],a + ld [mapOffsetWest+1],a + + ;south offset is +pitch + xor a + ld [mapOffsetSouth+1],a + ld a,[mapPitch] + ld [mapOffsetSouth],a + + ;north offset is -pitch + cpl + inc a + ld [mapOffsetNorth],a + ld a,$ff + ld [mapOffsetNorth+1],a + + ret + +;--------------------------------------------------------------------- +; Routine: AdjustCameraToHero +; Arguments: None. +; Description: Centers camera on hero, then adjusts so that maximum +; amount of space on in all 4 directions is visible +; +;--------------------------------------------------------------------- +AdjustCameraToHero:: + ld a,[displayType] + or a + jr z,.mapType + + ;cinema type + xor a + ld [camera_i],a + ld [camera_j],a + ret + +.mapType + push bc + push de + push hl + + ld a,OBJBANK ;Get Location of hero + ld [$ff70],a + + ;hl = &heroX_object + LDHL_CURHERODATA HERODATA_OBJ + + ld a,[hl+] + ld e,a + ld a,[hl] + ld d,a + + ld a,[de] + ld l,a + ld [tempL],a + inc de + ld a,[de] + ld h,a + ld [tempH],a + + call ConvertLocHLToXY ;convert to x,y indices + ld a,h + ld [camera_i],a + ld a,l + ld [camera_j],a + ld a,MAPBANK + ld [$ff70],a + ldio a,[firstMonster] + ld c,a ;c class of first monster + + ;find nearest wall to the north of location + ld a,[tempL] ;hl will track location + ld l,a + ld a,[tempH] + ld h,a + ld b,0 ;b will track north offset + ld d,$ff ;de = -pitch + ld a,[mapPitch] + cpl + add 1 + ld e,a + push hl + +.nloop add hl,de + inc b + ld a,[hl] + or a + jr z,.nloop ;nothing at all here + cp c ;found something, check if monster + jr nc,.nloop ;don't count monsters + call GetBGAttributes + and (BG_FLAG_WALKOVER|BG_FLAG_SHOOTOVER) + ld a,MAPBANK + ldio [$ff70],a + jr nz,.nloop + + ;b is tile distance of closest wall to the north + pop hl ;retrieve original location + push bc ;save north count b + ld b,0 ;b counts clear tiles to south + ld d,0 ;de is offset to go south + ld a,[mapPitch] + ld e,a + push hl ;push original location again + +.sloop add hl,de + inc b + ld a,[hl] + or a + jr z,.sloop + cp c + jr nc,.sloop + call GetBGAttributes + and (BG_FLAG_WALKOVER|BG_FLAG_SHOOTOVER) + ld a,MAPBANK + ldio [$ff70],a + jr nz,.sloop + + ;now b is distance of closest wall to south + pop hl ;retrieve original location + ld a,b + pop bc ;retrieve north distance + ld c,a ;b=north, c=south dist + + ;---------------Scroll Camera South--------------------------- + ;while(s_dist >= 10 && n_dist<8){ + ; move camera to south; + ; south dist--; + ; north dist++; + ;} +.cam_south_loop + ld a,c ;s_dist >= 10? + cp 10 + jr c,.cam_south_loopDone + + ld a,b + cp 7 + jr nc,.cam_south_loopDone ;n_dist < 8? + + call .moveCameraSouth + jr .cam_south_loop + +.cam_south_loopDone + + ;---------------Scroll Camera North--------------------------- + ;while(n_dist >= 9 && s_dist<9){ + ; move camera to north; + ; south dist++; + ; north dist--; + ;} +.cam_north_loop + ld a,b ;n_dist >= 9? + cp 9 + jr c,.cam_north_loopDone + + ld a,c + cp 9 + jr nc,.cam_north_loopDone ;s_dist < 9? + + call .moveCameraNorth + jr .cam_north_loop + +.cam_north_loopDone + ld a,c ;save distances for later use + ld [distToWall_S],a + ld a,b + ld [distToWall_N],a + + ;---------------------------- + ; Handle east/west scrolling + ;---------------------------- + ld b,0 ;b counts clear tiles to west + ld d,h ;save hl in de + ld e,l + ldio a,[firstMonster] + ld c,a + dec hl + +.wloop inc b + ld a,[hl-] ;get location + or a + jr z,.wloop ;loop if empty + cp c + jr nc,.wloop ;loop if monster + call GetBGAttributes + and (BG_FLAG_WALKOVER|BG_FLAG_SHOOTOVER) + ld a,MAPBANK + ldio [$ff70],a + jr nz,.wloop + + ;now b is distance of closest wall to west + ld h,d ;set hl back to original location + ld l,e + ld d,b ;store west distance in d + ld b,0 + inc hl + +.eloop inc b + ld a,[hl+] ;get location + or a + jr z,.eloop ;loop if empty + cp c + jr nc,.eloop ;loop if monster + call GetBGAttributes + and (BG_FLAG_WALKOVER|BG_FLAG_SHOOTOVER) + ld a,MAPBANK + ldio [$ff70],a + jr nz,.eloop + + ;now b is distance of closest wall to east + ld c,b ;b=west, c=east dist + ld b,d + + ;---------------Scroll Camera East---------------------------- + ;while(e_dist >= 11 && w_dist<9){ + ; move camera to east; + ; east dist--; + ; west dist++; + ;} +.cam_east_loop + ld a,c ;e_dist >= 11? + cp 11 + jr c,.cam_east_loopDone + + ld a,b + cp 9 + jr nc,.cam_east_loopDone ;w_dist < 10? + + ld a,[camera_i] + inc a + ld [camera_i],a + dec c + inc b + jr .cam_east_loop + +.cam_east_loopDone + + ;---------------Scroll Camera West---------------------------- + ;while(w_dist >= 10 && e_dist<10){ + ; move camera to west; + ; east dist++; + ; west dist--; + ;} +.cam_west_loop + ld a,b ;w_dist >= 10? + cp 10 + jr c,.cam_west_loopDone + + ld a,c + cp 9 + jr nc,.cam_west_loopDone ;e_dist < 10? + + ld a,[camera_i] + dec a + ld [camera_i],a + inc c + dec b + jr .cam_west_loop + +.cam_west_loopDone + ld a,c ;save distances for later use + ld [distToWall_E],a + ld a,b + ld [distToWall_W],a + +.done + pop hl + pop de + pop bc + ret + +.moveCameraSouth + ld a,[camera_j] + inc a + ld [camera_j],a + dec c + inc b + ret + +.moveCameraNorth + ld a,[camera_j] + dec a + ld [camera_j],a + inc c + dec b + ret + +;--------------------------------------------------------------------- +; Routine: GentleCameraAdjust +; Arguments: None. +; Description: Adjusts the camera to the hero but then goes with the +; old camera position if it doesn't make much difference +;--------------------------------------------------------------------- +GentleCameraAdjust:: + ld a,[displayType] + or a + ret nz ;done if cinema display type + + push bc + push de + push hl + + ;save previous camera i,j + ld a,[camera_i] + ld b,a + ld a,[camera_j] + ld c,a + push bc + + call AdjustCameraToHero + + pop bc ;retrieve old camera coords + ld a,[camera_i] + cp b + jr z,.checkCamera_j ;new_i==old_i, don't bother + jr c,.new_i_lt_old_i + + ;new i > old i + sub b ;d = new_i - old_i + ld d,a + ld a,[distToWall_E] ;a = dist_E + offset + add d + cp 11 + jr c,.useOldCamera_i ;only good if east dist < 11 + jr .checkCamera_j + +.new_i_lt_old_i + ;new i < old i + sub b ;d = old_i - new_i + cpl + inc a + ld d,a + + ld a,[distToWall_W] + add d + cp 9 + jr c,.useOldCamera_i ;only good if west dist < 10 + jr .checkCamera_j + +.useOldCamera_i + ;we can use the old camera pos and be less jerky + ld a,b + ld [camera_i],a + +.checkCamera_j + ld a,[camera_j] + cp c + jr z,.done ;new_j==old_j, don't bother + jr c,.new_j_lt_old_j + + ;new j > old j + sub c ;d = new_j - old_j + ld d,a + ld a,[distToWall_S] ;a = dist_S + offset + add d + cp 10 + jr c,.useOldCamera_j ;only good if south dist < 10 + jr .done + +.new_j_lt_old_j + ;new j < old j + sub c ;d = old_j - new_j + cpl + inc a + ld d,a + + ld a,[distToWall_N] + add d + cp 9 + jr c,.useOldCamera_j ;only good if north dist < 9 + jr .done + +.useOldCamera_j + ;we can use the old camera pos and be less jerky + ld a,c + ld [camera_j],a + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: RestrictCameraToBounds +; Arguments: None. +;--------------------------------------------------------------------- +RestrictCameraToBounds:: + ld a,[displayType] + or a + jr nz,.cinemaType + + push hl + + ;set map left/right based on camera_i + ld a,[camera_i] + sub 9 + jr z,.left_le_0 + jr nc,.left_gt_0 + +.left_le_0 + ld a,1 ;set to 1 if < 1 + +.left_gt_0 + ld hl,mapMaxLeft + cp [hl] + jr z,.left_le_max + jr c,.left_le_max + + ld a,[hl] ;left = maxLeft + +.left_le_max + ld [desiredMapLeft],a + + ;now see about top/bottom boundaries using camera_j + ld a,[camera_j] + sub 8 + jr z,.top_le_0 + jr nc,.top_gt_0 + +.top_le_0 + ld a,1 ;set to one if less than one + +.top_gt_0 + ld hl,mapMaxTop + cp [hl] + jr z,.top_le_max + jr c,.top_le_max + + ld a,[hl] ;top = maxTop + +.top_le_max + ld [desiredMapTop],a + + pop hl + ret + +.cinemaType + push hl + + ;set map left/right based on camera_i + ld a,[camera_i] + sub 9 + jr z,.left_ge_0 + jr nc,.left_ge_0 + +.left_lt_0 + xor a ;set to 0 if < 0 + +.left_ge_0 + ld hl,mapMaxLeft + cp [hl] + jr z,.left_le_max2 + jr c,.left_le_max2 + + ld a,[hl] ;left = maxLeft + +.left_le_max2 + ld [desiredMapLeft],a + + ;now see about top/bottom boundaries using camera_j + ld a,[camera_j] + sub 8 + jr z,.top_ge_0 + jr nc,.top_ge_0 + +.top_lt_0 + xor a ;set to zero if less than zero + +.top_ge_0 + ld hl,mapMaxTop + cp [hl] + jr z,.top_le_max2 + jr c,.top_le_max2 + + ld a,[hl] ;top = maxTop + +.top_le_max2 + ld [desiredMapTop],a + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: ScrollToCamera +; Description: Scrolls from old camera view to new camera position. +; Increments of 2 pixels if difference < 4 tiles, +; increments of 4 pixels if >= 4 tiles +; Update: Uses [scrollSpeed][7:4] for fast, [3:0] slow +; instead of 4 and 2. +;--------------------------------------------------------------------- +ScrollToCamera:: + push bc + push de + push hl + + ;calculate tiles different in x & store in d + ld a,[mapLeft] + ld b,a + ld a,[desiredMapLeft] + sub b + jr nc,.gotPositiveXDiff + cpl + inc a +.gotPositiveXDiff + ld d,a + + ;calculate tiles different in y & store in e + ld a,[mapTop] + ld b,a + ld a,[desiredMapTop] + sub b + jr nc,.gotPositiveYDiff + cpl + inc a +.gotPositiveYDiff + ld e,a + + ;setup d,e with x-pixel step-size and max value + push de + ld a,d + cp FAST_SCROLL_THRESHOLD + jr c,.setupXForSlow + ld a,[scrollAccelState_x] + or a + jr z,.setupXForSlow + + ;get fast scroll speed in 9 + ldio a,[scrollSpeed] + swap a + and $0f + ld d,a + ;ld a,8 + ;sub d + ;ld e,a + ;ld d,4 + ;ld e,4 + + ;ld a,[desiredPixelOffset_x] ;make sure its a multiple of 4 + ;and %00000100 + ;ld [desiredPixelOffset_x],a + + jr .checkLeft +.setupXForSlow + ;get slow scroll speed in d + ldio a,[scrollSpeed] + and $0f + ld d,a + +.checkLeft + ;make sure current pixel offset is an even multiple of the speed + ;offset &= ~(speed - 1) + ;off mask off dec cpl + ;1 - and %111 0001 0000 1111 + ;2 - and %110 0010 0001 1110 + ;4 - and %100 0100 0011 1100 + ;8 - and %000 1000 0111 1000 + ld a,d + dec a + + ;first scroll sprites right by value to be masked off + ld e,a + ld hl,desiredPixelOffset_x + ld a,[hl] + and e + push de + ld d,a + call ScrollSpritesRight + pop de + ld a,e + cpl + and %00000111 + ld e,a + ld a,[hl] + and e + ld [hl],a + ld a,8 + sub d + ld e,a + + + ;ld a,[desiredPixelOffset_x] ;make sure its a multiple of 4 + ;and %00000100 + ;ld [desiredPixelOffset_x],a + + ld a,[mapLeft] + ld b,a + ld a,[desiredMapLeft] + cp b + jr z,.checkPixelOffset + + jr c,.desired_lt_current + jr .desired_gt_current + +.checkPixelOffset + ld a,[desiredPixelOffset_x] + or a + jr z,.x_offsetOkay + + push af + ld a,[scrollSprites] + or a + jr z,.afterScrollRight1 + call ScrollSpritesRight +.afterScrollRight1 + pop af + jr .scrollPixelsLeft + +.x_offsetOkay + ;reset accelleration if no scroll + xor a + ld [scrollAccelState_x],a + + jr .leftRightAdjustDone + +.desired_gt_current + ;desired is > current + ld a,[scrollSprites] + or a + jr z,.afterScrollSpritesLeft1 + call ScrollSpritesLeft +.afterScrollSpritesLeft1 + ld a,[desiredPixelOffset_x] + cp e + jr nc,.atMaxLeftPixelOffset + + add d + ld [desiredPixelOffset_x],a + jr .leftRightAdjustDone + +.atMaxLeftPixelOffset + ld hl,scrollAccelState_x + inc [hl] + xor a + ld [desiredPixelOffset_x],a + ld a,b + inc a + jr .recalcMapLeftRight + +.desired_lt_current + ld a,[scrollSprites] + or a + jr z,.afterScrollSpritesRight2 + call ScrollSpritesRight +.afterScrollSpritesRight2 + ld a,[desiredPixelOffset_x] + or a + jr z,.atMinLeftPixelOffset + +.scrollPixelsLeft + sub d + ld [desiredPixelOffset_x],a + + or a + jr nz,.leftRightAdjustDone + ld hl,scrollAccelState_x + inc [hl] + + jr .leftRightAdjustDone + +.atMinLeftPixelOffset + ld a,e + ld [desiredPixelOffset_x],a + ld a,b + dec a + +.recalcMapLeftRight + ld hl,mapLeft + ld [hl+],a ;mapLeft, mapRight, mapRight+1 + add 20 + ld [hl+],a + inc a + ld [hl+],a + +.leftRightAdjustDone + ;setup d,e with y-pixel step-size and max value + pop de + ld a,e + cp FAST_SCROLL_THRESHOLD + jr c,.setupYForSlow + or a + jr z,.setupYForSlow + + ldio a,[scrollSpeed] + swap a + and $0f + ld d,a + ld a,8 + sub d + ld e,a + ;ld d,4 + ;ld e,4 + ;ld a,[desiredPixelOffset_y] ;make sure its a multiple of 4 + ;and %00000100 + ;ld [desiredPixelOffset_y],a + jr .checkTop +.setupYForSlow + ldio a,[scrollSpeed] + and $0f + ld d,a + ld a,8 + sub d + ld e,a + ;ld d,2 + ;ld e,6 + +.checkTop + ;make sure current pixel offset is an even multiple of the speed + ;offset &= ~(speed - 1) + ;1 - and %111 0001 0000 1111 + ;2 - and %110 0010 0001 1110 + ;4 - and %100 0100 0011 1100 + ;8 - and %000 1000 0111 1000 + + ld a,d + dec a + + ;first scroll sprites down by value to be masked off to snap + ;them to the new grid + ld e,a + ld hl,desiredPixelOffset_y + ld a,[hl] + and e + push de + ld d,a + call ScrollSpritesDown + pop de + ld a,e + + cpl + and %00000111 + ld e,a + ld a,[hl] + and e + ld [hl],a + ld a,8 + sub d + ld e,a + + ld a,[mapTop] + ld b,a + ld a,[desiredMapTop] + cp b + jr z,.checkPixelOffsetTB + jr c,.desired_tb_lt_current + jr .desired_tb_gt_current + +.checkPixelOffsetTB + ld a,[desiredPixelOffset_y] + or a + jr z,.y_offsetOkay + + push af + ld a,[scrollSprites] + or a + jr z,.afterScrollSpritesDown1 + call ScrollSpritesDown +.afterScrollSpritesDown1 + pop af + jr .scrollPixelsUp + +.y_offsetOkay + ;reset accelleration if no scroll + xor a + ld [scrollAccelState_y],a + + jr .topBottomAdjustDone + +.desired_tb_gt_current + ;desired is > current + ld a,[scrollSprites] + or a + jr z,.afterScrollSpritesUp1 + call ScrollSpritesUp +.afterScrollSpritesUp1 + ld a,[desiredPixelOffset_y] + cp e + jr nc,.atMaxTopPixelOffset + + add d + ld [desiredPixelOffset_y],a + jr .topBottomAdjustDone + +.atMaxTopPixelOffset + ld hl,scrollAccelState_y + inc [hl] + + xor a + ld [desiredPixelOffset_y],a + ld a,b + inc a + jr .recalcMapTopBottom + +.desired_tb_lt_current + ld a,[scrollSprites] + or a + jr z,.afterScrollSpritesDown2 + call ScrollSpritesDown +.afterScrollSpritesDown2 + ld a,[desiredPixelOffset_y] + or a + jr z,.atMinTopPixelOffset + +.scrollPixelsUp + sub d + ld [desiredPixelOffset_y],a + + or a + jr nz,.topBottomAdjustDone + ld hl,scrollAccelState_y + inc [hl] + + jr .topBottomAdjustDone + +.atMinTopPixelOffset + ld a,e + ld [desiredPixelOffset_y],a + ld a,b + dec a + +.recalcMapTopBottom + ld hl,mapTop + ld [hl+],a ;mapTop, mapBottom, mapBottom+1 + add 18 + ld [hl+],a + inc a + ld [hl+],a + +.topBottomAdjustDone + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routines: ScrollSpritesLeft +; ScrollSpritesRight +; ScrollSpritesUp +; ScrollSpritesDown +; Arguments: d - pixels to scroll +; Alters: af +; Description: Scrolls each of the 40 sprites (if their y-pos!=0) +; "d" # of pixels in the desired direction. +;--------------------------------------------------------------------- +ScrollSpritesLeft:: + push af + push bc + push de + push hl + + xor a + sub d + ld d,a + jr ScrollSpritesLRCommon + +ScrollSpritesRight:: + push af + push bc + push de + push hl + +ScrollSpritesLRCommon: + ld hl,spriteOAMBuffer + ld bc,3 + ld e,40 + +.loop ld a,[hl+] + or a + jr z,.afterChange ;sprite inactive + + ld a,[hl] + add d + ld [hl],a + +.afterChange + add hl,bc + dec e + jr nz,.loop + +.done + pop hl + pop de + pop bc + pop af + ret + +ScrollSpritesUp:: + push af + push bc + push de + push hl + + xor a + sub d + ld d,a + jr ScrollSpritesUDCommon + +ScrollSpritesDown:: + push af + push bc + push de + push hl + +ScrollSpritesUDCommon: + ld hl,spriteOAMBuffer + ld bc,4 + ld e,40 + +.loop ld a,[hl] + or a + jr z,.afterChange ;sprite inactive + + add d + ld [hl],a + +.afterChange + add hl,bc + dec e + jr nz,.loop + +.done + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: DrawMapToBackBuffer +; Description: Sets relevant variables so the map can be drawn +; Note: Uses [temp] to store tile attributes +;--------------------------------------------------------------------- +DrawMapToBackBuffer:: + ld a,[displayType] + or a + jr z,.mapType + + jp DrawCinemaToBackBuffer + +.mapType + push bc + push de + push hl + + call SetupDrawCommon + +.outer push bc ;save vertical count "b" on stack + push de ;save starting ptr to dest (hl) and source (de) + push hl + +;----copy 21 bg tiles into backBuffer/attributeBuffer + ;save starting point, copy tile pattern numbers + push de + push hl + + ld a,MAPBANK + ld [$ff70],a + ld b,((bgTileMap>>8) & $ff) + + call .copy7BGTiles + call .copy7BGTiles + call .copy7BGTiles + + ;start over copying attributes + pop hl + pop de + push de + push hl + + ld a,h ;backBuffer -> attributeBuffer + add 3 + ld h,a + ld b,((bgAttributes>>8) & $ff) + call .copy7BGAttributes + call .copy7BGAttributes + call .copy7BGAttributes + + ;back to start again + pop hl + pop de + push de + push hl + + ;recopy FG tiles from shadow buffers + ld a,TILESHADOWBANK + ld [$ff70],a + + ldio a,[firstMonster] + ld b,a + + call .copy7FGTiles + call .copy7FGTiles + call .copy7FGTiles + + pop hl + pop de + + ld a,MAPBANK + ld [$ff70],a + ld a,h + add 3 + ld h,a + + call .copy7FGAttributes + call .copy7FGAttributes + call .copy7FGAttributes + + ;row done + +;---begin old code 3-------------------------------------------------- +IF 0 + + ;copy tile patterns & attributes for any BG tiles to --------- + ;tile & attribute shadow buffers + + ;save starting point + push de + push hl + + ;use hl for map source / shadow buffer dest + ld h,d + ld l,e + + ;setup loop + ld a,MAPBANK + ld [$ff70],a + ldio a,[firstMonster] + ld b,a + ld c,21 + +.copyBGTiles + ld a,[hl] + cp b + jr c,.isBGTile + inc hl + dec c + jr nz,.copyBGTiles + jr .copyBGTilesDone + +.isBGTile + ld d,((bgTileMap>>8) & $ff) + ld e,a + ld a,TILESHADOWBANK + ld [$ff70],a + ld a,[de] + ld [hl],a + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld d,((bgAttributes>>8) & $ff) + ld a,[de] + and %00000111 + ld [hl+],a + ld a,MAPBANK + ld [$ff70],a + dec c + jr nz,.copyBGTiles + +.copyBGTilesDone + ;retrieve starting point & save again + pop hl + pop de + push de + push hl + + ;copy set of 21 bytes from TILESHADOWBANK to backBuffer + ld a,TILESHADOWBANK + ld [$ff70],a + call .copy21 + + ;retrieve starting point + pop hl + pop de + + ;copy set of 21 bytes from ATTRSHADOWBANK to backBuffer + ld a,h + add 3 + ld h,a + ld a,ATTRSHADOWBANK + ld [$ff70],a + call .copy21 + +ENDC + ;row done +;----end old code 3--------------------------------------------------- + + +;------begin old code 2----------------------------------------------- +IF 0 + ;copy tile pattern numbers from map/buffer to backBuffer + ld a,MAPBANK + ld [$ff70],a + ldio a,[firstMonster] ;get index of first fg class + ld b,a + ld c,21 + push de + push hl + +.copyTileNumbers + ld a,[de] ;next class number from map + cp b + jr nc,.isFGTile + + ;lookup tile used for background + push bc + ld b,((bgTileMap>>8) & $ff) + ld c,a + ld a,[bc] + ld [hl+],a + inc de + pop bc + + dec c + jr nz,.copyTileNumbers + jr .setupCopyAttributes + +.isFGTile + ;lookup class number in tile shadow buffer + ;push bc + ld a,TILESHADOWBANK + ld [$ff70],a + ld a,[de] + inc de + ld [hl+],a + ld a,MAPBANK + ld [$ff70],a + dec c + jr nz,.copyTileNumbers + +.setupCopyAttributes + pop hl ;go back to start of line + pop de + ld a,h ;copy to attributeBuffer + add 3 + ld h,a + ld c,21 ;loop 21 times + +.copyAttributes + ld a,[de] ;next class number from map + cp b + jr nc,.isFGAttribute + + ;BG Attribute + push bc + ld b,((bgAttributes>>8) & $ff) + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + inc de + pop bc + dec c + jr nz,.copyAttributes + jr .rowDone + +.isFGAttribute + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] + ld [hl+],a + inc de + ld a,MAPBANK + ld [$ff70],a + dec c + jr nz,.copyAttributes + +.rowDone +ENDC +;------end old code 2----------------------------------------------- + + +;old loop code +;-------old code begin------------------------------------------------ +IF 0 + ld a,MAPBANK ;set RAM bank to the map bank + ld [$ff70],a + ld c,21 ;times to loop horizontally + +.inner push bc + ld a,[de] ;load a tile index from level map + cp b ;index of first monster + jr c,.isBGTile ;< first monster + +.isFGTile + ;retrieve FG tile info from shadow buffers parallel to main map + ld a,ATTRSHADOWBANK ;set RAM bank to the attribute shadow bank + ld [$ff70],a + ld a,[de] ;attributes + ldio [temp],a + ld a,TILESHADOWBANK ;set RAM bank to the tile shadow bank + ld [$ff70],a + ld a,[de] ;tile to draw + inc de + ld [hl],a ;store tile in backBuffer + ld a,MAPBANK ;set RAM bank to the map bank + ld [$ff70],a + jr .gotTile + +.isBGTile + inc de + or a + jr z,.isNullTile + ld c,a + ;ld a,TILEINDEXBANK ;select RAM bank of tile index maps + ;ld [$ff70],a + ld b,((bgAttributes>>8)&$ff) + ld a,[bc] ;attributes for this tile + and %00000111 ;get palette only + ldio [temp],a ;store for later + ld b,((bgTileMap>>8)&$ff) ;get ptr to tile to draw in bc + ld a,[bc] ;get tile to draw + ld [hl],a ;store tile in backBuffer + jr .gotTile + +.isNullTile + ld [temp],a ;attributes zero + ld [hl],a ;store tile in backBuffer + +.gotTile + push hl + ld a,h + add 3 ;768 bytes to get from backbuffer to attr buffer + ld h,a + + ld a,[temp] ;get attributes for this tile + ld [hl],a ;store attribute in buffer + + pop hl ;back to map buffer + +.afterDrawTile + inc hl + + ;inner loop termination test + pop bc + dec c + jr nz,.inner +ENDC +;-------old code end-------------------------------------------------- + + pop hl ;retrieve initial pointers + pop de + + ld a,[mapPitch] ;mapPtr += mapPitch + add e + ld e,a + jr nc,.hlNoCarry + inc d +.hlNoCarry + + ld a,32 ;bgTileMapPtr += 32 + add l + ld l,a + jr nc,.deNoCarry + inc h +.deNoCarry + + ;loop the outer loop again? + pop bc + dec b + jr nz,.outer + + call PostDrawCommon + +.done ;map is drawn, bitch + ld a,MAPBANK ;set RAM bank to the map bank + ld [$ff00+$70],a + + pop hl + pop de + pop bc + ret + +.copy7BGTiles + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + ld [hl+],a + ret + +.copy7BGAttributes + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ld a,[de] + inc de + ld c,a + ld a,[bc] + and %00000111 + ld [hl+],a + ret + +.copy7FGTiles + ld a,[hl] + cp b + jr c,.notMonster0 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster0 + inc hl + inc de + ld a,[hl] + cp b + jr c,.notMonster1 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster1 + inc hl + inc de + ld a,[hl] + cp b + jr c,.notMonster2 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster2 + inc hl + inc de + ld a,[hl] + cp b + jr c,.notMonster3 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster3 + inc hl + inc de + ld a,[hl] + cp b + jr c,.notMonster4 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster4 + inc hl + inc de + ld a,[hl] + cp b + jr c,.notMonster5 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster5 + inc hl + inc de + ld a,[hl] + cp b + jr c,.notMonster6 + ld a,[de] ;get monster tile + ld [hl],a +.notMonster6 + inc hl + inc de + ret + +.copy7FGAttributes + ld a,[de] + cp b + jr c,.fgNotMonster0 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster0 + inc hl + inc de + ld a,[de] + cp b + jr c,.fgNotMonster1 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster1 + inc hl + inc de + ld a,[de] + cp b + jr c,.fgNotMonster2 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster2 + inc hl + inc de + ld a,[de] + cp b + jr c,.fgNotMonster3 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster3 + inc hl + inc de + ld a,[de] + cp b + jr c,.fgNotMonster4 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster4 + inc hl + inc de + ld a,[de] + cp b + jr c,.fgNotMonster5 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster5 + inc hl + inc de + ld a,[de] + cp b + jr c,.fgNotMonster6 + ld a,ATTRSHADOWBANK + ld [$ff70],a + ld a,[de] ;get monster tile + ld [hl],a + ld a,MAPBANK + ld [$ff70],a +.fgNotMonster6 + inc hl + inc de + ret + +IF 0 +;loop unrolled for max speed +.copy21 + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ret +ENDC + +SetupDrawCommon: + ;set VRAM bank to zero + ld a,MAPBANK + ld [$ff00+$4f],a + + ;find address to start getting tile indices from + ld a,[mapPitchMinusOne] + ld c,a + ld a,[mapTop] + ld e,a + xor a + +.jTimesPitch + sla e ;times two + rla ;carry from low bit into high bit + srl c ;c is pitch-1, counter of how many times to shift + jr nz,.jTimesPitch + ld d,a ;high byte into d; de is now == j * pitch + + ld a,[mapLeft] + add e + ld e,a ;de is now (j*pitch) + i + ld hl,map ;add in base address of map + add hl,de + ld d,h + ld e,l + + ;get memory address of backBuffer in hl + ld hl,backBuffer + + ;start looping + ld b,19 ;times to loop vertically + ret + +PostDrawCommon: + ;if the map is scrolled as far as possible right and/or down we + ;need to clear the right and/or bottom border so the jiggle effect + ;won't look goofy + ld a,[mapMaxLeft] + ld b,a + ld a,[mapLeft] + cp b + jr c,.rightBorderOkay + + ;set up vertical loop clearing tiles to zero + ld hl,(backBuffer + 20) + ld de,32 + ld c,19 + xor a + +.vloop ld [hl],a + add hl,de + dec c + jr nz,.vloop + +.rightBorderOkay + ;does bottom border need clearing? + ld a,[mapMaxTop] + ld b,a + ld a,[mapTop] + cp b + jr c,.done + + ;set up horizontal loop clearing tiles to zero + ld hl,(backBuffer + (32*18)) + ld c,21 + xor a + +.hloop ld [hl+],a + dec c + jr nz,.hloop + +.done + ret + + +;--------------------------------------------------------------------- +; Routine: DrawCinemaToBackBuffer +; Alters: af +; Description: Sets relevant variables so the map can be drawn +; Note: Uses [temp] to store tile attributes +;--------------------------------------------------------------------- +DrawCinemaToBackBuffer:: + push bc + push de + push hl + + call SetupDrawCommon + +.outer push de ;save starting ptr to dest (hl) and source (de) + push hl + ld c,21 ;times to loop horizontally + +.inner push bc + ;retrieve tile info from shadow buffers parallel to main map + ld a,ATTRSHADOWBANK ;set RAM bank to the attribute shadow bank + ld [$ff70],a + ld a,[de] ;attributes + ldio [temp],a + ld a,TILESHADOWBANK ;set RAM bank to the tile shadow bank + ld [$ff70],a + ld a,[de] ;tile to draw + inc de + + ld [hl],a ;store tile in backBuffer + push hl + ld a,h + add 3 ;768 bytes to get from backbuffer to attr buffer + ld h,a + ld a,[temp] ;get attributes for this tile + ld [hl],a ;store attribute in buffer + pop hl ;back to map buffer +.afterDrawTile + inc hl + + ;inner loop termination test + pop bc + dec c + jr nz,.inner + + pop hl ;retrieve initial pointers + pop de + + ld a,[mapPitch] ;mapPtr += mapPitch + add e + ld e,a + jr nc,.hlNoCarry + inc d +.hlNoCarry + + ld a,32 ;bgTileMapPtr += 32 + add l + ld l,a + jr nc,.deNoCarry + inc h +.deNoCarry + + ;loop the outer loop again? + dec b + jr nz,.outer + + call PostDrawCommon + +.done ;map is drawn, bitch + ld a,MAPBANK ;set RAM bank to the map bank + ld [$ff00+$70],a + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ShowTitle +; Arguments: de - pointer to text +; Description: Shows the text centered on-screen and waits until +; the user presses a button to continue. +; Alters: a,hl +;--------------------------------------------------------------------- +ShowTitle:: + push bc + + ld a,[de] ;length of text + inc de + ld c,a + ld hl,spriteOAMBuffer+3 + +.loop + xor a ;sprite attributes + ld [hl-],a + ld a,[de] ;letter + inc de + ld [hl-],a + ld a,16 ;calculate x coordinate + sub c + sla a ;times 8 for pixels + sla a + sla a + ld [hl-],a ;y coordinate + ld a,80 + ld [hl],a + ld a,l ;add 7 to hl + add 7 + ld l,a + ld a,h + adc 0 + ld h,a + + dec c + jr nz,.loop + + pop bc + ret + +;--------------------------------------------------------------------- +; Routines: SetSpeakerToFirstHero +; Arguments: None. +; Returns: c - index of first hero present +; [dialogSpeakerIndex] +; [dialogJoyIndex] +; Alters: af, c +; Description: Finds the first hero on the map and sets up +; some dialog parameters based on who it is. +;--------------------------------------------------------------------- +SetSpeakerToFirstHero:: + push de + push hl + xor a + ld hl,hero0_index + call .setParameters + or a + jr nz,.done + + ld a,1 + ld hl,hero1_index + call .setParameters + +.done + pop hl + pop de + ret + +.setParameters + ld [dialogJoyIndex],a + ld a,[hl-] ;get hero index + or a ;non-zero? + ret z ;not present + + ld c,a ;class index + ld de,HERODATA_TYPE + add hl,de + ld a,[hl] + ld [dialogSpeakerIndex],a ;flag indicating speaker + ld a,1 ;operation successful + ret + +;--------------------------------------------------------------------- +; Routines: SetSpeakerFromHeroIndex +; Arguments: c - index of speaking hero +; Returns: [dialogSpeakerIndex] +; [dialogJoyIndex] +; Alters: af +; Description: +;--------------------------------------------------------------------- +SetSpeakerFromHeroIndex:: + push de + push hl + + ld hl,hero0_index + ld a,[hl-] + cp c + ld a,0 + jr nz,.setHero1 + + call .setParameters + jr .done + +.setHero1 + ld a,1 + ld hl,hero1_data + call .setParameters + +.done + pop hl + pop de + ret + +.setParameters + ld [dialogJoyIndex],a + ld de,HERODATA_TYPE + add hl,de + ld a,[hl] + ld [dialogSpeakerIndex],a ;flag indicating speaker + ret + + +;--------------------------------------------------------------------- +; Routine: SetPressBDialog +;--------------------------------------------------------------------- +SetPressBDialog: + ld a,DLG_BORDER | DLG_PRESSB + ld [dialogSettings],a + ret + +;--------------------------------------------------------------------- +; Routine: SetDialogJoy:: +; Arguments: None. +; Returns: hl - pointer to appropriate joy inputs +; Alters: af,hl +;--------------------------------------------------------------------- +SetDialogJoy:: + ld a,[displayType] + cp 1 + jr z,.cinemaType + ld a,[canJoinMap] + cp 2 ;asynchronous join? + jr z,.cinemaType + + ld hl,curInput0 + ld a,[dialogJoyIndex] + or a + ret z + inc hl + ret + +.cinemaType + ld hl,myJoy + ret + +;--------------------------------------------------------------------- +; Routine: CheckDialogContinue +; Arguments: None. +; Returns: a - 1 if done (B is pressed), 0 if not done +; Alters: af +; Description: Calls CheckDialogSkip and then sees if button B of +; the speaker's joystick is pressed. +;--------------------------------------------------------------------- +CheckDialogContinue:: + push hl + call CheckSkip + + call SetDialogJoy + + ld a,[dialogSettings] + and DLG_WAITRELEASE + jr nz,.waitRelease + + ld a,[hl] + and JOY_B + jr z,.returnFalse + + ld hl,dialogSettings + set DLG_WAITRELEASE_BIT,[hl] + jr .returnFalse + +.waitRelease + ld a,[hl] + and JOY_B + jr nz,.returnFalse + + ld hl,dialogSettings + res DLG_WAITRELEASE_BIT,[hl] + + bit DLG_CLEARSKIP_BIT,[hl] + jr z,.afterClearSkip + + res DLG_CLEARSKIP_BIT,[hl] + push hl + ld de,0 + call SetDialogSkip + pop hl + +.afterClearSkip + bit DLG_NOCLEAR_BIT,[hl] + res DLG_NOCLEAR_BIT,[hl] + jr nz,.returnTrue + + call ClearDialog + +.returnTrue + ld a,1 + jr .done + + +.returnFalse + xor a +.done + pop hl + ret + +;--------------------------------------------------------------------- +; Routines: ShowDialogAtTop +; ShowDialogAtTopNoWait +; ShowDialogAtBottom +; ShowDialogAtBottomNoWait +; ClearDialog +; Arguments: [dialogBank] - bank containing text +; c - class index of speaking character +; de - pointer to gtx text +; Description: Shows the text centered at the top or bottom dialog +; bar & waits until the user presses a button to +; continue. +; Alters: none +; Note: Format of gtx: +; BYTE number of lines +; REPT[nLines]: +; BYTE spaces to center +; BYTE num chars in line +; BYTE[nChars] characters +;--------------------------------------------------------------------- +ShowDialogNPC:: + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + ld a,[dialogNPC_speakerIndex] + ld c,a + call ShowDialogAtTop + call ClearDialog + ret + +ShowDialogHero:: + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + call ClearDialog + ret + +ShowDialogAtTop:: + ld a,[dialogBank] + push af + push bc + push de + push hl + + call ChooseFromDialogAlternates + + ld b,0 ;lines to skip at top + call ShowDialogCommon + call ShowDialogAtTopCommon + call ShowDialogWait + + pop hl + pop de + pop bc + pop af + ret + +ShowDialogAtTopNoWait:: + ld a,[dialogBank] + push af + push bc + push de + push hl + + call ChooseFromDialogAlternates + + ld b,0 ;lines to skip at top + call ShowDialogCommon + call ShowDialogAtTopCommon + + pop hl + pop de + pop bc + pop af + ret + +ShowDialogAtTopCommon:: + call DrawDialogBorderAtBottom + call GfxBlitBackBufferToWindow + + xor a + ldh [$ff4a], a ;set window y position + + ld a,[de] ;number of lines + rlca ;times 8 = pixels for window + rlca + rlca + add 7 + ld [hblankWinOff],a + + ld a,143 + ld [hblankWinOn],a + + ld a,[hblankFlag] + bit 1,a + jr nz,.afterSetLYC + + ld a,143 + ld [$ff45],a ;lyc + ld a,[hblankFlag] + +.afterSetLYC + or %10 ;allow window to show + ld [hblankFlag],a + + ld a,OBJROM + call SetActiveROM + ret + +ShowDialogAtBottom:: + ld a,[dialogBank] + push af + push bc + push de + push hl + + call ChooseFromDialogAlternates + + ld b,1 ;lines to skip at top + call ShowDialogCommon + call ShowDialogAtBottomCommon + call ShowDialogWait + + pop hl + pop de + pop bc + pop af + ret + +ShowDialogAtBottomNoWait:: + ld a,[dialogBank] + push af + push bc + push de + push hl + + call ChooseFromDialogAlternates + + ld b,1 ;lines to skip at top + call ShowDialogCommon + call ShowDialogAtBottomCommon + + pop hl + pop de + pop bc + pop af + ret + +ShowDialogAtBottomCommon:: + call DrawDialogBorderAtTop + call GfxBlitBackBufferToWindow + + ld a,143 + ld [hblankWinOff],a + + ;set window y pos. Req'd for actual GBC, not emulator + ld a,[de] ;# lines + cpl + add 1+17 ;(max lines) - (text lines+1) + rlca + rlca + rlca ;times 8 + ldh [$ff4a], a ;set window y position + + ld a,[de] ;number of lines + rlca ;times 8 = pixels for window + rlca + rlca + add 8 + cpl ;make negative (+1), subtract from 143 + add 144 ;+1 2's compl, +143 + ld [hblankWinOn],a + + ld a,[hblankFlag] + bit 1,a + jr nz,.afterSetLYC + + ld a,[hblankWinOn] + ld [$ff45],a ;lyc + ld a,[hblankFlag] + +.afterSetLYC + or %10 ;allow window to show + ld [hblankFlag],a + + ld a,OBJROM + call SetActiveROM + ret + +ClearDialog:: + push af + xor a + ld [amShowingDialog],a + + ld a,[hblankFlag] ;turn off dialog box and window + and %11111101 + ld [hblankFlag],a + call VWait + ;call InstallGamePalette + ld a,1 + ldio [paletteBufferReady],a + call VWait + pop af + ret + +ShowDialogWait:: + ;change both heroes to idle + ld a,[heroesIdle] + push af + ld a,1 + ld [heroesIdle],a + + call .waitInputZero + +.wait + call UpdateObjects + call RedrawMap + call CheckDialogContinue + or a + jr z,.wait + + ;call .waitInput + ;call .waitInputZero + + pop af + ld [heroesIdle],a + + ret + +.waitInputZero +DialogWaitInputZero:: + call UpdateObjects + call RedrawMap + ld h,((curInput0>>8) & $ff) + ld a,[dialogJoyIndex] + add (curInput0 & $ff) + ld l,a + ld a,[hl] + and %11110000 + jr nz,DialogWaitInputZero + ret + + +;--------------------------------------------------------------------- +; Routines: ShowDialogCommon +; Arguments: a - bank message is in +; b - lines to skip at top +; c - class index of speaking character +; de - pointer to gtx text beginning with #lines +; Description: +; Alters: af +; Note: Format of gtx: +; BYTE number of lines +; REPT[nLines]: +; BYTE spaces to center +; BYTE num chars in line +; BYTE[nChars] characters +;--------------------------------------------------------------------- +ShowDialogCommon:: + push de + push bc ;save class index of speaking character + + call SetActiveROM + + ld a,1 + ld [amShowingDialog],a + + ;wait until the backbuffer is blitted +.waitBackBuffer + ldio a,[backBufferReady] + or a + jr z,.canMessWithBackBuffer + + call VWait + jr .waitBackBuffer + +.canMessWithBackBuffer + ;clear the backbuffer and attribute buffer for given #lines + ld a,[de] ;b = number of lines + 1 + add 1 + ld b,a + ld hl,backBuffer + +.clearLines + call ClearGTXLine + push bc + ld bc,32 + add hl,bc + pop bc + dec b + jr nz,.clearLines + ;xor a +;.outer1 ld c,32 +;.inner1 ld [hl+],a + ;dec c + ;jr nz,.inner1 + ;dec b + ;jr nz,.outer1 + + ;ld a,[de] ;b = number of lines + 1 + ;add 1 + ;ld b,a + ;ld hl,attributeBuffer + ;xor a +;.outer2 ld c,32 +;.inner2 ld [hl+],a + ;dec c + ;jr nz,.inner2 + ;dec b + ;jr nz,.outer2 + + ;adjust hl down a line? + pop bc + push bc + ld hl,backBuffer + bit 0,b + jr z,.hlOkay + ld bc,32 + add hl,bc +.hlOkay + + ;for each line of text... + ld a,[de] ;b = number of lines + inc de + ld b,a + +.line + call WriteGTXLine + + ;go to next line + dec b + jr nz,.line + + ;retrieve class index of speaking character and + ;blit that tile to the top-left corner of the buffer + pop bc + call DrawTileToTLCorner + ;call GfxBlitBackBufferToWindow + pop de + ret + +;--------------------------------------------------------------------- +; Routine: ClearGTXLine +; Arguments: +; hl - backbuffer location to draw at +; Alters: af +;--------------------------------------------------------------------- +ClearGTXLine:: + push bc + push hl + + push hl + + ;clear backbuffer + xor a + ld c,32 +.loop ld [hl+],a + dec c + jr nz,.loop + + ;clear attr buffer + xor a + pop hl + ld bc,$300 + add hl,bc + ld c,32 +.loop2 ld [hl+],a + dec c + jr nz,.loop2 + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: WriteGTXLine +; Arguments: de - pointer to gtx text beginning with centerSpaces +; hl - location to draw at +; Alters: hl,de +;--------------------------------------------------------------------- +WriteGTXLine:: + ;advance hl spaces required to center text + push bc + ld b,0 + ld a,[de] + inc de + ld c,a + add hl,bc + + ;get the char count for this line + ld a,[de] + inc de + ld c,a + or a + jr z,.afterLoop + + ;copy the characters to the buffer +.loop ld a,[de] + inc de + ld [hl+],a + dec c + jr nz,.loop + +.afterLoop + ;advance hl to next line + ld a,l + and ~31 + add 32 + ld l,a + ld a,0 + adc h + ld h,a + + pop bc + ret + + +GfxBlitBackBufferToWindow:: + ;xor a + ;ld c,38 ;38*16 = 608 + ;ld de,$9c00 ;dest = window map memory + ;ld hl,$c000 ;source + ;call VMemCopy + ;ret + + ld a,$9c ;copy to window map memory + ldio [backBufferDestHighByte],a + ld a,1 + ldio [backBufferReady],a +.vwait call VWait + ldio a,[backBufferReady] ;wait until buffer is copied + or a + jr nz,.vwait + ld a,$98 ;go back to copying to bg map memory + ldio [backBufferDestHighByte],a + ret + +GfxShowStandardTextBox:: + ;set interrupt to turn window off at bottom of screen + ld a,143 + ld [hblankWinOff],a + + ;set window y pos. Req'd for actual GBC, not emulator + ld a,96 + ldh [$ff4a], a ;set window y position + ld [hblankWinOn],a + + ld a,[hblankFlag] + bit 1,a + jr nz,.afterSetLYC + + ld a,[hblankWinOn] + ld [$ff45],a ;lyc + ld a,[hblankFlag] + +.afterSetLYC + or %10 ;allow window to show + ld [hblankFlag],a + ret + +DrawDialogBorderAtTop: + push hl + ld hl,$c000 ;9c00 + call DrawDialogBorder + pop hl + ret + +DrawDialogBorderAtBottom: + push de + push hl + ld hl,$c000 ;9c00 + ld a,[de] ;num lines + ld d,a + xor a + srl d + rra + srl d + rra + srl d + rra + ld e,a + add hl,de + call DrawDialogBorder + pop hl + pop de + ret + +DrawDialogBorder: + push bc + push hl + + ld a,[dialogSettings] + and DLG_BORDER + jr z,.done + + ;draw border at edge + push hl + + ;xor a + ;ldio [$ff4f],a ;VRAM bank + + ld c,20 + ld a,252 +.drawBorder + ld [hl+],a + dec c + jr nz,.drawBorder + + dec hl + ld a,[dialogSettings] + and DLG_PRESSB + jr z,.clearBG + + ld [hl],253 + +.clearBG + pop hl + + ;clear bg attributes + ld bc,$300 + add hl,bc + + ;ld a,1 + ;ldio [$ff4f],a ;VRAM bank + + ld c,20 + xor a +.clearBGLoop + ld [hl+],a + dec c + jr nz,.clearBGLoop + +.done + pop hl + pop bc + ret + +DrawTileToTLCorner: ;class index in c, 1 line down in b +.drawTile + ld hl,backBuffer + bit 0,b + jr z,.hlOkay + ld l,32 +.hlOkay + ld a,c + or a + jr z,.useNullTile ;use null tile + + ld a,TILEINDEXBANK + ld [$ff70],a + + ld b,((fgAttributes>>8) & $ff) + ld a,[bc] + bit 5,a ;2x2 monster? + jr nz,.speaker2x2 + + and %00000111 + or %00001000 ;coming from bank 1 + ld h,((attributeBuffer>>8) & $ff) + ld [hl],a + + ld h,((backBuffer>>8) & $ff) + ld b,((fgTileMap>>8) & $ff) + ld a,[bc] ;a is tile to draw + add 3 ;get right-facing + ld [hl],a + + ret + +.speaker2x2 + and %00000111 ;color + or %00001000 ;coming from bank 1 + push hl + push hl + ld h,((attributeBuffer>>8) & $ff) + ld [hl+],a + ld [hl+],a + push de + ld de,30 + add hl,de + pop de + ld [hl+],a + ld [hl-],a + + ld h,((backBuffer>>8) & $ff) + ld b,((fgTileMap>>8) & $ff) + ld a,[bc] ;a is tile to draw + add 12 ;get right-facing + ld [hl+],a + inc a + ld [hl+],a + pop hl + sub 3 + ld [hl+],a + inc a + ld [hl+],a + pop hl + + ;kludge for two-color BRAINIAC + ld a,[dialogSettings] + bit DLG_BRAINIAC_BIT,a + ret z + + res DLG_BRAINIAC_BIT,a + ld [dialogSettings],a + ld h,((attributeBuffer>>8) & $ff) + inc hl + ld a,8+3 ;green color from bank 1 + ld [hl],a + push de + ld de,32 + add hl,de + pop de + ld [hl+],a + + ret + + +.useNullTile + xor a + ld [hl],a + ld h,((attributeBuffer>>8) & $ff) + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: ChooseFromDialogAlternates +; Arguments: de - pointer to gtx text +; Returns: de - adjusted pointer +; Alters: de +; Description: de points to start of an indeterminate number of +; byte triplets of the form: +; [mask] [offsetL] [offsetH] +; This routine finds a mask that (when ANDed) matches +; the value in [dialogSpeakerIndex] and jumps to the +; gtx alternate beginning at the given offset. The +; offset given for the cursor being at a position of +; 1 past [offsetH] of the matching triplet. +;--------------------------------------------------------------------- +ChooseFromDialogAlternates: + push af + push bc + push hl + + call SetActiveROM + + ld h,d + ld l,e + + ld a,[dialogSpeakerIndex] + ld c,a + +.attemptMatch + ld a,[hl+] ;mask + and c + jr nz,.foundMatch + + inc hl ;skip offset to look at next mask + inc hl + jr .attemptMatch + +.foundMatch + ld a,[hl+] ;retrieve offset to start of gtx proper + ld e,a + ld a,[hl+] + ld d,a + add hl,de + + ld d,h + ld e,l + + pop hl + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: CheckSkip +; Arguments: None. +; Returns: Nothing. +; Alters: af +; Description: Intended for use in cinemas and in-game dialog, +; resets the pc and sp to an address set with +; SetDialogSkip. Sets to the skip address if start is +; pushed, to fast-forward address if B is pushed. +;--------------------------------------------------------------------- +CheckSkip:: + push hl + + ld a,[displayType] + cp 1 + jr z,.cinemaType + ld a,[canJoinMap] ;asynchronous join? + cp 2 + jr z,.cinemaType + + ld hl,curInput0 + ld a,[dialogJoyIndex] ;0 or 1 + add l + ld l,a + jr .afterSetJoy + +.cinemaType + ld hl,myJoy + +.afterSetJoy + ld a,[hl] ;get the input + and JOY_START + jr nz,.startPressed + + ld a,[hl] + and JOY_B + jr z,.done ;no buttons pushed + +.abPressed + push hl + ld hl,levelCheckSkip ;fast forward address + jr .restore + +.startPressed + push hl + ld hl,levelCheckSkip+2 ;skip address + +.restore + ld a,[hl] + or a + jr nz,.addressOkay + inc hl + ld a,[hl-] + or a + jr nz,.addressOkay + + pop hl + jr .done + +.addressOkay + ;make the class/object ROM the current + ld a,OBJROM + call SetActiveROM + xor a + ld e,[hl] + ld [hl],a + inc hl + ld d,[hl] + ld [hl],a + pop hl + cp d + jr nz,.addrOkay + cp e + jr z,.done ;null address + +.addrOkay + ld a,$f0 + call WaitInputZero + + ;reset all one-shot dialog options + ld hl,dialogSettings + res DLG_BRAINIAC_BIT,[hl] + res DLG_NOCLEAR_BIT,[hl] + res DLG_CLEARSKIP_BIT,[hl] + + ;restore stack pointer + ld a,[levelCheckStackPos] + ld l,a + ld a,[levelCheckStackPos+1] + ld h,a + ld sp,hl + + ;push return address on stack and go there + push de + ret + +.done + pop hl + ret + + +;--------------------------------------------------------------------- +; Routine: Delay +; Arguments: a - number of 1/60 seconds to delay +; Alters: af +; Description: Updates and displays objects for specified number of +; 1/60 seconds. Jumps to [levelCheckSkip] if start +; button is pressed if addr is non-null. +;--------------------------------------------------------------------- +Delay:: + push bc + push de + push hl + + +.delay push af + call UpdateObjects + call RedrawMap + + call CheckSkip +.keepGoing + pop af + dec a + jr nz,.delay + +.waitBlit + ldio a,[backBufferReady] + or a + jr nz,.waitBlit + + ;if we're in a cinema and we get a YANK from the remote player + ;then we need to kill into the cinema script + ld a,[timeToChangeLevel] + or a + jr z,.done + + ld a,[inLoadMethod] + or a + jr z,.done + + call BlackoutPalette + ld a,[loadStackPosL] + ld l,a + ld a,[loadStackPosH] + ld h,a + ld sp,hl + jp AfterLoadLevelMethod + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetRandomNumZeroToN +; Arguments: a - maximum desired random number "N" +; Returns: a - random number between 0 and N +; Alters: af +;--------------------------------------------------------------------- +GetRandomNumZeroToN:: + or a + ret z + + push bc + push hl + + inc a + jr z,.handleFF + ld b,a ;b is N + + PUSHROM + ld a,BANK(randomTable) + call SetActiveROM + + ld hl,randomLoc + inc [hl] + ld l,[hl] + ld h,((randomTable>>8) & $ff) + + ld a,[hl] + bit 7,b + jr nz,.loop ;N+1>=128 + + ;divide raw number by two until it's less than limit*2 + ld c,b + sla c ;c = (limit * 2) + 1 + inc c +.fastReduce + cp c ;a < limit*2 + 1? + jr c,.loop ;yes, go to slower precision work + srl a ;a/=2 + jr .fastReduce + +.loop cp b ;subtract N while r > N + jr c,.done + sub b + jr .loop + +.done + ld b,a + POPROM + ld a,b + pop hl + pop bc + ret + +.handleFF + PUSHROM + ld a,BANK(randomTable) + call SetActiveROM + + ld hl,randomLoc + inc [hl] + ld l,[hl] + ld h,((randomTable>>8) & $ff) + + ld a,[hl] + ld b,a + POPROM + ld a,b + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetRandomNumMask +; Arguments: a - bit mask for random number +; Returns: a - random number +; Alters: af +;--------------------------------------------------------------------- +GetRandomNumMask:: + push bc + push hl + + ld b,a ;b is bitmask + + PUSHROM + ld a,BANK(randomTable) + call SetActiveROM + + ld hl,randomLoc + inc [hl] + ld l,[hl] + ld h,((randomTable>>8) & $ff) + + ld a,[hl] + and b + +.done + ld b,a + POPROM + ld a,b + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeFromWhite +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeFromWhite:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set cur palette to be all white + ld hl,fadeCurPalette + call FadeCommonSetPaletteToWhite + + ;set final palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +FadeCommonSetPaletteToWhite:: + ld c,64 +.loop + ld a,$ff + ld [hl+],a + ld a,$7f + ld [hl+],a + dec c + jr nz,.loop + ret + +CopyPalette64:: +FadeCommonCopyPalette:: + push bc + push de + push hl + ld a,FADEBANK + ld [$ff70],a + ld c,128 +.loop ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.loop + pop hl + pop de + pop bc + ret + +CopyPalette32:: + push bc + push de + push hl + ld a,FADEBANK + ld [$ff70],a + ld c,64 +.loop ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.loop + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: InstallGamePalette +; Arguments: None. +; Alters: af +; Description: Sets gamePalette to be installed to the hardware +; on the next VBlank. +;--------------------------------------------------------------------- +InstallGamePalette:: + push hl + push de + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld a,1 + ldio [paletteBufferReady],a +.wait + ldio a,[paletteBufferReady] ;wait for vblank to install it + or a + jr nz,.wait + + pop de + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeToWhite +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeToWhite:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette to be all white + ld hl,fadeFinalPalette + call FadeCommonSetPaletteToWhite + + ;set cur palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeFromBlack +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeFromStandard:: +SetupFadeFromBlack:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set cur palette to be all white + ld hl,fadeCurPalette + call FadeCommonSetPaletteToBlack + + ;set final palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeToBlack +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeToStandard:: +SetupFadeToBlack:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette to be all black + ld hl,fadeFinalPalette + call FadeCommonSetPaletteToBlack + + ;set cur palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +FadeCommonSetPaletteToBlack:: + ld c,64 + xor a +.loop + ld [hl+],a + ld [hl+],a + dec c + jr nz,.loop + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeFromBlackBGOnly +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeFromBlackBGOnly:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + ;set cur palette to be all black + ld hl,fadeCurPalette + call FadeCommonSetPaletteToBlackBGOnly + + ;set final palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ld a,32 + ld [fadeRange],a + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: BlackoutPalette +; Arguments: +; Alters: af +; Description: Sets fadeCurPalette and final palette to all black +;--------------------------------------------------------------------- +BlackoutPalette:: + push bc + push de + push hl + + ld a,FADEBANK + ld [$ff70],a + + ld hl,fadeFinalPalette + call FadeCommonSetPaletteToBlack + + ld hl,fadeCurPalette + call FadeCommonSetPaletteToBlack + + ;turn off any existing fade + ld hl,specialFX + res 0,[hl] ;reset fade bit + + ;install the current palette on the next VBlank + ld a,1 + ldio [paletteBufferReady],a +.wait + ldio a,[paletteBufferReady] ;wait for vblank to install it + or a + jr nz,.wait + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeToBlackBGOnly +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeToBlackBGOnly:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ;set final palette BG Colors to be all black + ld hl,fadeFinalPalette + call FadeCommonSetPaletteToBlackBGOnly + + ;set cur palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + ld a,32 + ld [fadeRange],a + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +FadeCommonSetPaletteToBlackBGOnly:: + ld c,32 + xor a +.loop + ld [hl+],a + ld [hl+],a + dec c + jr nz,.loop + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeFromSaturated +; Arguments: a - steps +; b - amount of saturation (white) to start at +; Alters: af +;--------------------------------------------------------------------- +SetupFadeFromSaturated:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;copy game palette to starting palette and ending palette + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + ld l,b ;saturation + + ;add saturation to each color + ld h,64 +.setup call FadeCommonGetColor + dec de + dec de + call GetRedComponent + call .saturate + call SetRedComponent + call GetGreenComponent + call .saturate + call SetGreenComponent + call GetBlueComponent + call .saturate + call SetBlueComponent + + ;save color + ld a,c + ld [de],a + inc de + ld a,b + ld [de],a + inc de + + dec h + jr nz,.setup + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +.saturate + add l + bit 7,l + jr nz,.satneg + cp 32 ;over the limit? + ret c + + ld a,$1f + ret + +.satneg + xor a + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeToGamePalette +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeToGamePalette:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette to be current game palette + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetupFadeToHalfbrite +; Arguments: a - steps +; Alters: af +;--------------------------------------------------------------------- +SetupFadeToHalfbrite:: + push bc + push de + push hl + + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette to be halfbrite game palette + ld hl,gamePalette + ld de,fadeCurPalette + ld c,64 +.copyHalfbrite + push bc + ld a,[hl+] + ld c,a + ld a,[hl-] + ld b,a + call GetRedComponent + srl a + call SetRedComponent + call GetGreenComponent + srl a + call SetGreenComponent + call GetBlueComponent + srl a + call SetBlueComponent + ld a,c + ld [hl+],a + ld a,b + ld [hl+],a + pop bc + dec c + jr nz,.copyHalfbrite + + ;set cur palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FadeCommonGetColor +; Arguments: de - ptr to next color +; Returns: bc - next color +; Alters: af,de +;--------------------------------------------------------------------- +FadeCommonGetColor: + ld a,[de] + inc de + ld c,a + ld a,[de] + inc de + ld b,a + ret + +;--------------------------------------------------------------------- +; Routine: FadeInit +; Arguments: a - number of steps +; [fadeCurPalette], [fadeFinalPalette] already setup +; with palettes to fade between +; Alters: af +; Description: Sets up and uses fadeDelta[32*3] +; and fadeError[32*3]. +; FadeStep must then be called every vblank until +; [specialFX:0] becomes zero. +;--------------------------------------------------------------------- +FadeInit:: + push bc + push de + push hl + + ld [fadeSteps],a + ld [fadeStepsToGo],a + + ld a,FADEBANK + ld [$ff70],a + + ;for each color component, difference is (c2-c1) + ;subtract each element of fadeCurPalette from fadeFinalPalette + ;and store separate RGB offsets in fadeDelta. + ;fadeCurPalette RGB elements in fadeCurRGB. + + ;clear out fadeError and fadeDelta + ld hl,fadeError + ld de,fadeDelta + ld c,192 + xor a +.clearError + ld [hl+],a + ld [de],a + inc de + dec c + jr nz,.clearError + + ;begin by storing each color component of each color in + ;fadeCurPalette into fadeDelta + ld a,64 + ld hl,fadeDelta + ld de,fadeCurPalette + +.copyCurToDelta + push af + call FadeCommonGetColor + call GetRedComponent + ld [hl+],a + call GetGreenComponent + ld [hl+],a + call GetBlueComponent + ld [hl+],a + pop af + dec a + jr nz,.copyCurToDelta + + ;copy fadeDelta[192] to fadeCurRGB[192]. + ;ld hl,fadeDelta + ;ld de,fadeCurRGB + ;ld c,192 +;.copyToCurRGB + ;ld a,[hl+] + ;ld [de],a + ;inc de + ;dec c + ;jr nz,.copyToCurRGB + + ;fadeDelta[...] = fadeFinalPalette[...] - fadeDelta[...] + ld a,64 + ld hl,fadeDelta + ld de,fadeFinalPalette + +.findStep + push af + call FadeCommonGetColor + call GetRedComponent + sub [hl] + ld [hl+],a + call GetGreenComponent + sub [hl] + ld [hl+],a + call GetBlueComponent + sub [hl] + ld [hl+],a + pop af + dec a + jr nz,.findStep + + + ;indicate we've got a fade goin on + ld a,FX_FADE + ld [specialFX],a + + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: FadeStep +; Alters: af +; Description: Peforms the next step of the fade in progress. +; Should only be called if [specialFX] & FX_FADE is 1. +; fadeRange is reset to 64 afterwards. +;--------------------------------------------------------------------- +FadeStep:: + push bc + push de + push hl + +.waitReady + ldio a,[paletteBufferReady] ;wait for vblank + or a + jr nz,.waitReady + + ;loop 64 times, adding the fade delta for each component + ;to the error. If error >= 32: + ; error -= 32; + ; increment component; + ;Then flag the newly created palette to be displayed + ld a,FADEBANK + ld [$ff70],a + + ld a,[fadeStepsToGo] + dec a + ld [fadeStepsToGo],a + jr z,.lastFade + + ;ld c,64 + ;ld hl,fadeError + ;ld de,fadeCurRGB +; +;.fadeInner + ;ld a,[de] ;red component + ;call .addDeltaToError + ;ld [de],a + ;inc de +; + ;ld a,[de] ;green component + ;call .addDeltaToError + ;ld [de],a + ;inc de + + ;ld a,[de] ;blue component + ;call .addDeltaToError + ;ld [de],a + ;inc de + ;;dec c + ;jr nz,.fadeInner + + ;copy RGB palette to 15-bit palette + ;ld a,64 + ;ld bc,0 + ;ld hl,fadeCurRGB + ;ld de,fadeCurPalette +;.RGBtoCur + ;push af + ;ld a,[hl+] + ;call SetRedComponent + ;ld a,[hl+] + ;call SetGreenComponent + ;ld a,[hl+] + ;call SetBlueComponent + ;ld a,c + ;ld [de],a + ;inc de + ;ld a,b + ;ld [de],a + ;inc de + ;pop af + ;dec a + ;jr nz,.RGBtoCur + + + ld a,[fadeRange] + ld hl,fadeError + ld de,fadeCurPalette + +.fadeInner + push af + + ;get current color in bc, though keep de where it was + call FadeCommonGetColor + dec de + dec de + + call GetRedComponent + call .addDeltaToError + call SetRedComponent ;store component + + call GetGreenComponent + call .addDeltaToError + call SetGreenComponent ;store component + + call GetBlueComponent + call .addDeltaToError + call SetBlueComponent ;store component + + ;store back in cur table + ld a,c + ld [de],a + inc de + ld a,b + ld [de],a + inc de + + pop af + dec a + jr nz,.fadeInner + +.install + ;make mapColor the current color 0 + ld de,mapColor + ld hl,fadeCurPalette + ld a,[hl+] + ld [de],a + inc de + ld a,[hl+] + ld [de],a + + ;install the current palette on the next VBlank + ld a,1 + ldio [paletteBufferReady],a + + pop hl + pop de + pop bc + ret + + +.lastFade + ;finally copy actual palette + ld hl,fadeFinalPalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + ld a,64 + ld [fadeRange],a + + xor a + ld [specialFX],a + jr .install + +.addDeltaToError + ;accepts: a - color value + ;returns: a - new color value + push bc + push af + + ld a,[fadeSteps] + ld b,a + cpl + add 1 + ld c,a + + push hl + push de + ld de,$ff40 ;-192 + add hl,de + pop de + + ld a,[hl] + pop hl + + bit 7,a ;negative? + jr nz,.negative + +.positive + add a,[hl] + cp b + jr c,.done + + ;>=32 + ld c,0 +.while_pos_ge_32 + sub b + inc c + cp b + jr nc,.while_pos_ge_32 + + ld [hl+],a + pop af + add c + pop bc + ret + +.negative + add a,[hl] + cp c + jr nc,.done + + ;<= -32 + ld b,0 +.while_neg_le_n32 + sub c + inc b + cp c + jr c,.while_neg_le_n32 + ld [hl+],a + pop af + sub b + pop bc + ret + +.done + ld [hl+],a + pop af + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetColor0AllPalettes +; Arguments: bc - color to set to +; hl - ptr to start of palettes +; Alters: af +;--------------------------------------------------------------------- +SetColor0AllPalettes:: + push de + push hl + + ld d,16 +.loop ld a,c + ld [hl+],a + ld a,b + ld [hl+],a + ld a,l + add 6 + ld l,a + dec d + jr nz,.loop + + pop hl + pop de + ret + + +;--------------------------------------------------------------------- +; Routine: SetColors123AllPalettes +; Arguments: bc - color to set to +; hl - ptr to start of palettes +; Alters: af +;--------------------------------------------------------------------- +SetColors123AllPalettes:: + push de + push hl + + ld d,16 +.loop + inc hl + inc hl + ld e,3 +.inner + ld a,c + ld [hl+],a + ld a,b + ld [hl+],a + dec e + jr nz,.inner + + dec d + jr nz,.loop + + pop hl + pop de + ret + +;--------------------------------------------------------------------- +; Routine: LighteningOut +; Alters: af +;--------------------------------------------------------------------- +LighteningOut:: + push bc + push de + push hl + + ld a,FADEBANK + ld [$ff70],a + + ;white background + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld hl,fadeCurPalette + ld bc,$7fff + call SetColor0AllPalettes + ld a,128 + ldio [paletteBufferReady],a + + ld c,3 + call .pause + + ld bc,0 + ld hl,fadeCurPalette + call SetColors123AllPalettes + + ld a,128 + ldio [paletteBufferReady],a + + ld c,7 + call .pause + + pop hl + pop de + pop bc + ret + +.pause call VWait + dec c + jr nz,.pause + ret + +;--------------------------------------------------------------------- +; Routine: LighteningIn +; Alters: af +;--------------------------------------------------------------------- +LighteningIn:: + push bc + push de + push hl + + ld a,FADEBANK + ld [$ff70],a + + ;black fg on white background + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld hl,fadeCurPalette + ld bc,$7fff + call SetColor0AllPalettes + ld bc,0 + call SetColors123AllPalettes + + ld a,128 + ldio [paletteBufferReady],a + + ld c,7 + call .pause + + ;normal fg on white background + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld hl,fadeCurPalette + ld bc,$7fff + call SetColor0AllPalettes + + ld a,128 + ldio [paletteBufferReady],a + + ld c,3 + call .pause + + ;normal + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld a,128 + ldio [paletteBufferReady],a + + pop hl + pop de + pop bc + ret + +.pause call VWait + dec c + jr nz,.pause + ret + +;--------------------------------------------------------------------- +; Routines: GetRedComponent +; GetGreenComponent +; GetBlueComponent +; SetRedComponent +; SetGreenComponent +; SetBlueComponent +; Arguments: Get: bc - 15 bit BGR value +; Set: bc - 15 bit BGR value, a - value to set +; Returns: Get: a - color component +; Alters: af, bc +;--------------------------------------------------------------------- +GetRedComponent:: + ld a,c + and %00011111 + ret + +GetGreenComponent:: + push de + ld a,b +IF 1 + ld e,c + sla e + rla + sla e + rla + sla e + rla + and %00011111 + pop de + ret +ENDC + +IF 0 + ld e,c + sla e + rl d + sla e + rl d + sla e + rl d + ld a,d + and %00011111 + pop de + ret +ENDC + +GetBlueComponent:: + ld a,b + rrca + rrca + and %00011111 + ret + +SetRedComponent:: + push af + ld a,c + and %11100000 + ld c,a + pop af + or c + ld c,a + ret + +SetGreenComponent:: + push de + ld d,a + rrca + rrca + rrca + and %00000011 + ld e,a + + ld a,b + and %01111100 + or e + ld b,a + + ld a,d + swap a + rlca + and %11100000 + ld d,a + + ld a,c + and %00011111 + or d + ld c,a + + pop de + ret + +SetBlueComponent:: + push af + ld a,b + and %00000011 + ld b,a + pop af + rlca + rlca + or b + ld b,a + ret + +;--------------------------------------------------------------------- +; Routine: PlaySound +; Arguments: hl - addr of table 1st byte of which indicates sound +; type (1-4) and remainder is data specific to that +; type. +; Alters: af, hl +;--------------------------------------------------------------------- +PlaySound:: + ld a,[hl+] + cp 1 + jr nz,.check2 + + xor a + ld [musicOverride1],a + call PlaySoundChannel1 + ld a,3 + ld [musicOverride1],a + ret +.check2 + cp 2 + jr nz,.check4 + call PlaySoundChannel2 + ret +.check4 + cp 4 + jr nz,.done + + xor a + ld [musicOverride4],a + call PlaySoundChannel4 + ld a,3 + ld [musicOverride4],a + ret + +.done + ret + +;--------------------------------------------------------------------- +; Routine: PlaySoundChannel1 +; Arguments: hl - addr of 5 sound bytes for sweep, duty/len, +; envelope, freq_lo, and freq_high +; Alters: af, hl +;--------------------------------------------------------------------- +PlaySoundChannel1:: + ld a,[musicOverride1] + or a + ret nz + +.playSound + ld a,[hl+] + ldio [$ff10],a + ld a,[hl+] + ldio [$ff11],a + ld a,[hl+] + ldio [$ff12],a + ld a,[hl+] + ldio [$ff13],a + ld a,[hl+] + ldio [$ff14],a + ret + +;--------------------------------------------------------------------- +; Routine: PlaySoundChannel2 +; Arguments: hl - addr of 4 sound bytes for duty/len, +; envelope, freq_lo, and freq_high +; Alters: af, hl +;--------------------------------------------------------------------- +PlaySoundChannel2:: + ld a,[hl+] + ldio [$ff16],a + ld a,[hl+] + ldio [$ff17],a + ld a,[hl+] + ldio [$ff18],a + ld a,[hl+] + ldio [$ff19],a + ret + +;--------------------------------------------------------------------- +; Routine: PlaySoundChannel3 +; Arguments: hl - addr of 4 sound bytes channel 4 +; Alters: af, hl +;--------------------------------------------------------------------- +PlaySoundChannel3:: + ld a,$80 + ldio [$ff1a],a + ld a,[hl+] + ldio [$ff1b],a + ld a,[hl+] + ldio [$ff1c],a + ld a,[hl+] + ldio [$ff1d],a + ld a,[hl+] + ldio [$ff1e],a + ret + +;--------------------------------------------------------------------- +; Routine: PlaySoundChannel4 +; Arguments: hl - addr of 4 sound bytes for length, envelope, +; frequency, and consecutive +; Alters: af, hl +;--------------------------------------------------------------------- +PlaySoundChannel4:: + ld a,[musicOverride4] + or a + ret nz + +.playSound + ld a,[hl+] + ldio [$ff20],a + ld a,[hl+] + ldio [$ff21],a + ld a,[hl+] + ldio [$ff22],a + ld a,[hl+] + ldio [$ff23],a + ret + +;--------------------------------------------------------------------- +; Routine: WaitInput +; Arguments: a - button mask [7:4] buttons, [3:0] dpad +; Alters: af +;--------------------------------------------------------------------- +WaitInput:: + push bc + push de + ld b,a +.wait + push bc + push hl + call UpdateObjects + call RedrawMap + pop hl + pop bc + ld h,((curJoy0>>8) & $ff) + ld a,[dialogJoyIndex] + add (curJoy0 & $ff) + ld l,a + ld a,[hl] + and b + jr z,.wait + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: WaitInputZero +; Arguments: a - button mask [7:4] buttons, [3:0] dpad +; hl - address of joystick button code to check +; Alters: af +;--------------------------------------------------------------------- +WaitInputZero:: + push bc + push de + ld b,a +.wait + push bc + push hl + call UpdateObjects + call RedrawMap + pop hl + pop bc + ld a,[hl] + and b + jr nz,.wait + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: WaitInputClick +; Arguments: a - button mask [7:4] buttons, [3:0] dpad +; Alters: af +; Description: WaitInputZero +; WaitInput +; WaitInputZero +;--------------------------------------------------------------------- +WaitInputClick:: + push bc + push hl + + ld b,a + ld hl,myJoy + call WaitInputZero + ld a,b + call WaitInput + ld a,b + call WaitInputZero + + pop hl + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ResetSprites +; Arguments: none +; Alters: af +; Description: Sets all spritesUsed flags to false and sets each +; sprite y position in the OAM buffer to zero. +;--------------------------------------------------------------------- +ResetSprites:: + push bc + push de + push hl + + ;clear sprites used table + ld a,TILEINDEXBANK + ld [$ff70],a + + ld hl,spritesUsed + xor a + ld c,40 +.clr2 ld [hl+],a + dec c + jr nz,.clr2 + + ;clear sprites + ld hl,spriteOAMBuffer + ld c,40 + ld de,3 +.clr3 + ld [hl+],a + add hl,de + dec c + jr nz,.clr3 + + xor a + ld [oamFindPos],a + ld a,40 + ld [numFreeSprites],a + + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: AllocateSprite +; Arguments: none +; Returns: a - 00-9C=success (lowptr), ff=failure +; Alters: af +; Description: Loops through spritesUsed flag table, finds a free +; sprite, and returns that sprite's loPtr. +;--------------------------------------------------------------------- +AllocateSprite:: + ;any free sprites? + ld a,[numFreeSprites] + or a + jr nz,.freeSpriteExists + + ld a,$ff + ret + +.freeSpriteExists + push bc + push de + push hl + + dec a + ld [numFreeSprites],a + + ;we know there's at least one free sprite so start at + ;the the search position (which is guaranteed to be + ;<= pos of first free) and loop till we find it + + ld a,TILEINDEXBANK + ld [$ff70],a + + ld h,((spritesUsed>>8)&$ff) + ld a,[oamFindPos] + ld l,a + +.loop ld a,[hl+] ;get sprite used flag + or a + jr nz,.loop ;not free + +.foundSprite + dec hl + ld a,1 ;mark sprite as used + ld [hl],a + + ld a,l ;return loptr in a + inc a + ld [oamFindPos],a + + ld a,l + + ;change 1-byte offset to 4-byte offset (loPtr) + rlca ;times 2 + rlca ;times 2 again + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FreeSprite +; Arguments: a - loptr to sprite +; Alters: af +; Description: Sets the sprite's YPOS to zero +; Flags the sprite as unused +; oamFindPos = min(thisPos, oamFindPos) +; numFreeSprites++ +;--------------------------------------------------------------------- +FreeSprite:: + ;if loptr is $ff then don't bother + cp $ff + ret z + + push hl + + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + + xor a + ld [hl],a ;ypos to zero + + ld a,TILEINDEXBANK + ld [$ff70],a + + rrc l ;convert loptr to sprite index + rrc l + ld h,((spritesUsed>>8) & $ff) + + xor a + ld [hl],a ;clear sprite used flag + + ;set find pos to be mininum + ld a,[oamFindPos] + cp l + jr c,.findPosIsMin + + ld a,l + ld [oamFindPos],a + +.findPosIsMin + ;add one to # of free sprites + ld hl,numFreeSprites + inc [hl] + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: CreateMetaSprite +; Arguments: +; bc - width (b) and height (c) of metasprite, in 8x8 +; tiles. +; d - initial pattern number for first sprite. +; e - default attributes for each sprite. +; hl - ptr to location to store metasprite info. Should +; be w*h + 1 in size. +; [metaSprite_x], [metaSprite_y] - location of TL corner +; Alters: af +;--------------------------------------------------------------------- +CreateMetaSprite:: + push bc + push de + push hl + + ld a,[metaSprite_x] + ld [metaSprite_first_x],a + + ;calculate width times height + push bc + xor a +.calcTotalSize + add a,b + dec c + jr nz,.calcTotalSize + pop bc + + ;store total sprites used in metaSpriteInfo + ld [hl+],a + + ;go through and allocate each sprite, set it up, and store its + ;loptr in the metaSpriteInfo + push bc +.height pop af ;setup width from original value + push af + ld b,a + ld a,[metaSprite_first_x] + ld [metaSprite_x],a + +.width call AllocateSprite + ld [hl+],a ;save loptr + + ;set up sprite + push hl + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + ld a,[metaSprite_y] + ld [hl+],a + ld a,[metaSprite_x] + ld [hl+],a + add 8 + ld [metaSprite_x],a + ld a,d ;pattern number + ld [hl+],a + inc d + ld [hl],e ;attributes + pop hl + + dec b + jr nz,.width + + ld a,[metaSprite_y] + add 8 + ld [metaSprite_y],a + dec c + jr nz,.height + +.done + pop bc + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CreateMetaSpriteUsingMask +; Arguments: +; bc - width (b) and height (c) of metasprite, in 8x8 +; tiles. +; d - initial pattern number for first sprite. +; e - default attributes for each sprite. +; hl - ptr to location to store metasprite info. Should +; be w*h + 1 in size and location 1+ should contain +; a zero if its corresponding sprite is not to +; be allocated after all. +; [metaSprite_x], [metaSprite_y] - location of TL corner +; Alters: af +;--------------------------------------------------------------------- +CreateMetaSpriteUsingMask:: + push bc + push de + push hl + + ld a,[metaSprite_x] + ld [metaSprite_first_x],a + + ;calculate width times height + push bc + xor a +.calcTotalSize + add a,b + dec c + jr nz,.calcTotalSize + pop bc + + ;store total sprites used in metaSpriteInfo + ld [hl+],a + + ;go through and allocate each sprite marked with non-zero, + ;set it up, and store its loptr in the metaSpriteInfo + push bc +.height pop af ;setup width from original value + push af + ld b,a + ld a,[metaSprite_first_x] + ld [metaSprite_x],a + +.width ld a,[hl] ;load flag from destination + or a + ld a,$ff + jr z,.afterAllocate + call AllocateSprite + +.afterAllocate + ld [hl+],a ;save loptr + + cp $ff + jr z,.afterSetup + + ;set up sprite + push hl + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + ld a,[metaSprite_y] + ld [hl+],a + ld a,[metaSprite_x] + ld [hl+],a + ld a,d ;pattern number + ld [hl+],a + ld [hl],e ;attributes + pop hl + +.afterSetup + ld a,[metaSprite_x] + add 8 + ld [metaSprite_x],a + inc d + dec b + jr nz,.width + + ld a,[metaSprite_y] + add 8 + ld [metaSprite_y],a + dec c + jr nz,.height + +.done + pop bc + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ScrollMetaSprite +; Arguments: bc - x (b) and y (c) offset to scroll each sprite. +; hl - ptr to metaSpriteInfo created with +; CreateMetaSprite +; Alters: af +;--------------------------------------------------------------------- +ScrollMetaSprite:: + push de + + ld a,[hl+] ;number of sprites +.loop + push af + ld a,[hl+] ;loptr to sprite + ld e,a + ld d,((spriteOAMBuffer>>8) & $ff) + + ld a,[de] ;get the y position + add c ;add y offset + ld [de],a + inc de + ld a,[de] ;get the x position + add b ;add x offset + ld [de],a + inc de + + pop af + dec a + jr nz,.loop + pop de + ret + +;--------------------------------------------------------------------- +; Routine: SetMetaSpritePos +; Arguments: bc - desired x (b) and y (c) pixel position in sprite +; coords +; hl - ptr to metaSpriteInfo created with +; CreateMetaSprite +; Alters: af +;--------------------------------------------------------------------- +SetMetaSpritePos:: + push bc + + push hl + + inc hl ;go to y pos of first sprite + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + + ld a,c ;desired y pos + sub [hl] + ld c,a ;becomes offset to scroll + + inc hl + ld a,b + sub [hl] + ld b,a ;becomes offset to scroll + + pop hl + + call ScrollMetaSprite + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FreeMetaSprite +; Arguments: hl - ptr to metaSpriteInfo created with +; CreateMetaSprite +; Alters: af +;--------------------------------------------------------------------- +FreeMetaSprite:: + push bc + push hl + + ld a,[hl+] ;number of sprites + ld c,a + +.freeASprite + ld a,[hl+] ;get loptr + call FreeSprite + dec c + jr nz,.freeASprite + + pop hl + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: CreateBigExplosion +; Arguments: bc - tile width and height of explosion area +; d - max sprites (must be >0) +; e - flags for allowed explosion types: +; :0 - small round explosions +; :1 - shrapnel plus +; :2 - big (2x2) round explosions (4 sprites ea) +; hl - TL map corner (e.g. $d0ca) of explosion +; [bulletColor] +; Returns: Nothing. +; Alters: af +; Description: Creates a big explosion of randomly dispersed smaller +; explosions within the given area. +; +;--------------------------------------------------------------------- +CreateBigExplosion:: + push bc + push de + push hl + + ;limit the number of sprites according to the system's + ;resources + ld a,[numFreeSprites] + cp d + jr nc,.numSpritesOkay + ld d,a +.numSpritesOkay + or a + jr nz,.continue + jp .done +.continue + call ConvertLocHLToXY + ld a,[bulletColor] + +.loop ;limit myself to smaller explosions if I have less than 4 + ;sprites left + push af + push hl + + ld a,d + cp 4 + jr nc,.afterLimitToSmaller + res 2,e ;remove larger fr possible explosions flags + ld a,e + or a + jr nz,.afterLimitToSmaller + ld d,1 + jr .afterCreateExplosion +.afterLimitToSmaller + + ;select random tile position within area + + ;width + ld a,b + dec a + call GetRandomNumZeroToN + add h + ld h,a + + ;height + ld a,c + dec a + call GetRandomNumZeroToN + add l + ld l,a + + call ConvertXYToLocHL + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + + ;choose random explosion + ld a,e + call GetRandomNumMask + bit 2,a + jr z,.checkType1 + +.isType2 + bit 2,e ;this type allowed? + jr z,.isType0 + ;type two - big 2x2 explosion + ld a,6 + ld [bulletColor],a + + push bc + ld b,32 + call .create2x2Frame + inc hl + call .create2x2Frame + push de + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + pop de + dec hl + call .create2x2Frame + inc hl + call .create2x2Frame + pop bc + + dec d + dec d + dec d + jr .afterCreateExplosion + +.checkType1 + bit 1,a + jr z,.isType0 + +.isType1 + bit 1,e ;this type allowed? + jr z,.isType2 + ;type one - shrapnel + ld a,64 + jr .determinedFrame + +.isType0 ;default + bit 0,e ;this type allowed? + jr z,.isType1 + ;type zero - small round explosion + ld a,5 + ld [bulletColor],a + ld a,16 + +.determinedFrame + push bc + ld b,a + call CreateExplosion + call .offsetSprite + pop bc + +.afterCreateExplosion + pop hl +.beforeRestoreColor + pop af + ld [bulletColor],a + + dec d + jr z,.done + jp .loop + +.done + pop hl + pop de + pop bc + ret + +.offsetSprite + or a + ret z + push de + push hl + call IndexToPointerHL ;get ptr to explosion class + ld a,OBJBANK + ldio [$ff70],a + ld de,OBJ_SPRITELO + add hl,de + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + ld a,%111 + call GetRandomNumMask + add [hl] + ld [hl+],a + ld a,%111 + call GetRandomNumMask + add [hl] + ld [hl],a + pop hl + pop de + ret + +.create2x2Frame + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + call CreateExplosion + ld a,b + add 8 + ld b,a + ret + +;--------------------------------------------------------------------- +; Routine: BlitMap +; Arguments: bc - tile width and height of area to copy +; de - destination XY coords +; hl - source XY coords +; Returns: Nothing. +; Alters: af +; Description: Copies a section of the current map, not overwriting +; any objects +;--------------------------------------------------------------------- +BlitMap:: + push bc + push de + push hl + + push hl + ld h,d + ld l,e + call ConvertXYToLocHL + ld d,h + ld e,l + pop hl + call ConvertXYToLocHL + ld a,MAPBANK + ldio [$ff70],a + +.blitMapOuter + push bc + push de + push hl + ldio a,[firstMonster] + ld c,a + +.blitMapInner + ld a,[de] + cp c ;< first monster? + jr nc,.blitSkip + + ld a,[hl] + ld [de],a +.blitSkip + inc hl + inc de + dec b + jr nz,.blitMapInner + + pop hl + pop de + push hl + ld a,[mapPitch] + ld h,0 + ld l,a + add hl,de + ld d,h + ld e,l + pop hl + ld a,[mapPitch] + ld b,0 + ld c,a + add hl,bc + + pop bc + dec c + jr nz,.blitMapOuter + + pop hl + pop de + pop bc + + ret + +;--------------------------------------------------------------------- +; Routine: ConvertLocHLToXY +; Arguments: hl - location ($D000-$DFFF) +; Returns: hl - h = x index, l = y index +; Alters: a,hl +; Description: x = location & (pitch-1) +; y = (location - $D000) / pitch +;--------------------------------------------------------------------- +ConvertLocHLToXY:: + ld a,[mapPitchMinusOne] + and l + push af ;push a (x index) on stack + + ld a,h ;subtract $D000 from hl by adding $3000 + add $30 + ld h,a + ld a,[mapPitchMinusOneComplement] ;times to left-shift +.shift rlca ;shift a bit left out of a + jr nc,.shiftDone ;hl<<=1 if bits left in a + sla l + rl h + jr .shift + +.shiftDone + ld l,h + pop af + ld h,a ;h = x index, l = y index + + ret + +;--------------------------------------------------------------------- +; Routine: ConvertXYToLocHL +; Arguments: hl - h = x index, l = y index +; Returns: hl - location ptr ($D000-$DFFF) +; Alters: a,hl +; Description: hl = $d000 + (y * pitch) + x +; Instead of having y in the LoByte and left-shifting it +; by the bits in the pitch, we'll put y in the HiByte +; and right-shift it by 8-bitsInPitch. Fewer ops. +;--------------------------------------------------------------------- +ConvertXYToLocHL:: + push de + + ;multiply y*pitch + ld a,[mapPitchMinusOneComplement] + ld d,l + ld e,0 + +.shift rlca ;if bits left in A then keep shifting + jr nc,.shiftDone + srl d + rr e + jr .shift + +.shiftDone + ld l,h ;add x + $d000 + ld h,$d0 + add hl,de + + pop de + ret + +;--------------------------------------------------------------------- +; Routine: LCheckGetVectorToState +; Arguments: hl - address of method table +; Returns: hl - methodTable[mapState] +; Alters: af,hl +; Description: Use the VECTORTOSTATE macro. +;--------------------------------------------------------------------- +LCheckGetVectorToState:: + push de + ldio a,[mapState] + ld d,0 + ld e,a + sla e + rl d + add hl,de + pop de + ld a,[hl+] + ld h,[hl] + ld l,a + ret + +;--------------------------------------------------------------------- +; Routine: SaveIdle +; Arguments: None. +; Returns: +; Alters: af,hl +; Description: Saves the current state of [heroesIdle] and [allIdle] +; in [dialogIdleSettings] and activates both idle +; settings +;--------------------------------------------------------------------- +SaveIdle:: + ld a,[heroesIdle] + rlca + ld hl,allIdle + or [hl] + ld [dialogIdleSettings],a + + ld a,1 + ld [heroesIdle],a + ld [allIdle],a + ret + +;--------------------------------------------------------------------- +; Routine: RestoreIdle +; Arguments: None. +; Returns: +; Alters: af,hl +; Description: Restores the idle settings to what they were previous +; to SaveIdle +;--------------------------------------------------------------------- +RestoreIdle:: + ld a,[dialogIdleSettings] + push af + and 1 + ld [allIdle],a + pop af + srl a + ld [heroesIdle],a + ret + +;--------------------------------------------------------------------- +; Routine: MakeIdle +; Arguments: None. +; Returns: +; Alters: af +; Description: Sets [heroesIdle] and [allIdle] to 1 +;--------------------------------------------------------------------- +MakeIdle:: + ld a,1 + ld [heroesIdle],a + ld [allIdle],a + ret + +;--------------------------------------------------------------------- +; Routine: MakeNonIdle +; Arguments: None. +; Returns: +; Alters: af +; Description: Sets [heroesIdle] and [allIdle] to 0 +;--------------------------------------------------------------------- +MakeNonIdle:: + xor a + ld [heroesIdle],a + ld [allIdle],a + ret + +;--------------------------------------------------------------------- +; Routine: UseAlternatePalette +; Arguments: None. +; Returns: Nothing. +; Alters: af +; Description: Darkens colors 1 & 2 of each palette, intended for +; use on the light-background maps. +;--------------------------------------------------------------------- +UseAlternatePalette:: + push bc + push hl + + ld a,FADEBANK + ldio [$ff70],a + + ld c,16 + ld hl,gamePalette+2 +.loop call .halve + call .halve + inc hl + inc hl + inc hl + inc hl + dec c + jr nz,.loop + + pop hl + pop bc + ret + +.halve + ld a,[hl+] ;color[i]>>=1; + ld b,a + ld a,[hl] + rrca + rr b + and %00111101 + ld [hl-],a + ld a,b + and %11101111 + ld [hl+],a + inc hl + ret + +;--------------------------------------------------------------------- +; Routine: GetMyHero +; Arguments: None. +; Returns: a - class index of local hero (i.e. not remote) +; hl - pointer to hero0_data or hero1_data approprately +; Alters: af, hl +;--------------------------------------------------------------------- +GetMyHero:: + ld a,[amLinkMaster] + cp 0 + jr z,.getHero1 + + ;get hero zero if link master + ld a,[hero0_index] + ld hl,hero0_data + ret + +.getHero1 + ld a,[hero1_index] + ld hl,hero1_data + ret + +;--------------------------------------------------------------------- +; Routine: GetBGAttributes +; Arguments: a - class index +; Alters: af +; Returns: a - attributes for given class index +; Returns full set off attributes including: +; [2:0] - color FLAG_PALETTE +; [3] - can walk over FLAG_WALKOVER +; [4] - can shoot over FLAG_SHOOTOVER +;--------------------------------------------------------------------- +GetBGAttributes:: + push hl + ld l,a + ld h,((bgAttributes>>8) & $ff) + ld a,TILEINDEXBANK + ldio [$ff70],a + ld a,[hl] + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: UpdateDialogBalloons +; Arguments: de - intial pos in [spritesUsed] +; hl - initial pos in spriteOAMBuffer +; Alters: af, de, hl +;--------------------------------------------------------------------- +UpdateDialogBalloons:: + ld a,[amShowingDialog] + or a + ret nz ;no balloons during dialog + + ldio a,[updateTimer] + and %00010000 + ret z ;all blank + + push bc + call FindNextFreeSprite + jr z,.done + ld a,[dialogBalloonClassIndex] + ld c,a + call GetFirst +.setNextBalloon + or a + jr z,.done + + call PutBalloonAboveObject + + ;remake de from hl + push de + inc hl + inc hl + inc hl + inc hl + call .remakeDEfromHL + call FindNextFreeSprite + pop de + jr z,.done + + call GetNextObject + jr .setNextBalloon + +.done + call .remakeDEfromHL + pop bc + ret + +.remakeDEfromHL + ld a,l ;e = l/4 + rrca + rrca + ld e,a + ld d,((spritesUsed>>8)&$ff) + ret + +;--------------------------------------------------------------------- +; Routine: DisableDialogBalloons +; Arguments: a - mask of objects (up to 8) to disable. %101 +; would disable the first and third speakers, etc. +; Speakers after the eigth are disabled. +; Alters: af +;--------------------------------------------------------------------- +DisableDialogBalloons:: + push bc + push de + push hl + + ld b,a + + ld a,[dialogBalloonClassIndex] + or a + jr z,.done + + ld c,a + call GetFirst +.disableNext + or a + jr z,.done + + ld a,b + or a + jr z,.disableAfter8 + + and 1 + jr z,.continue + + ld a,1 + call SetMisc + +.continue + srl b + call GetNextObject + jr .disableNext + +.disableAfter8 + ld b,8 + ld a,[dialogBalloonClassIndex] + ld c,a + call GetFirst +.find9th + or a + jr z,.done + + call GetNextObject + dec b + jr nz,.find9th + +.disableAfter8Next + or a + jr z,.done + + ld a,1 + call SetMisc + + call GetNextObject + jr .disableAfter8Next + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FindNextFreeSprite +; Arguments: de - ptr to position within spritesUsed to begin +; resetting +; hl - ptr to sprite OAM buffer corresponding to +; de +; Alters: af,de,hl +; Returns: a - 0 on failure +;--------------------------------------------------------------------- +FindNextFreeSprite: + ld a,e + cp 40 + jr nc,.notFound + + push bc + ld a,TILEINDEXBANK + ldio [$ff70],a + ld bc,4 + +.checkNext + ld a,[de] + or a + jr z,.foundIt + + inc de + add hl,bc + ld a,e + cp 40 + jr c,.checkNext + + pop bc +.notFound + xor a + ret + +.foundIt + ld a,1 + or a + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: PutBalloonAboveObject +; Arguments: de - ptr to object +; hl - ptr to sprite OAM buffer +; Alters: af +;--------------------------------------------------------------------- +PutBalloonAboveObject: + push de + push hl + + ld [hl],0 ;zero sprite in case we don't use it + push hl + call GetMisc + pop hl + or a + jr nz,.done ;already spoke + call GetCurLocation + call ConvertLocHLToSpriteCoords + ld d,h + ld e,l + pop hl + push hl + ld a,e + or a + jr z,.afterAdjustCoords ;leave zero at zero + + sub 8 + ld e,a + ld a,d + add 8 + ld d,a + +.afterAdjustCoords + ld [hl],e ;y coord + inc hl + ld [hl],d ;x coord + inc hl + ld a,80 ;pattern number + ld [hl+],a + xor a + ld [hl],a ;palette/etc +.done + pop hl + pop de + ret + +;--------------------------------------------------------------------- +; Routine: ResetFreeSprites +; Arguments: de - ptr to position within spritesUsed to begin +; resetting +; hl - ptr to sprite OAM buffer corresponding to +; de +; Alters: af,de,hl +; Returns: Nothing. +; Description: Sets y=0 of all sprites after initial position not +; flagged as in use; necessary for resetting +; environmental effects +;--------------------------------------------------------------------- +ResetFreeSprites:: + ld a,e + cp 40 + ret nc + + push bc + + ld a,TILEINDEXBANK + ldio [$ff70],a + ld bc,4 + +.resetNext + ld a,[de] + or a + jr nz,.afterReset + + ld [hl],a ;ypos = 0 + +.afterReset + add hl,bc + inc de + ld a,e + cp 40 + jr c,.resetNext + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetEnvEffect +; Arguments: a - env effect such as ENV_RAIN +; Alters: af +; Returns: Nothing. +; Description: Sets an environmental effect and quickly updates it +; a number of times to be in full swing by the time +; the player sees it +;--------------------------------------------------------------------- +SetEnvEffect:: + push bc + ld [envEffectType],a + + ld c,16 +.updateEffect + call UpdateEnvEffect + dec c + jr nz,.updateEffect + + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: UpdateEnvEffect +; Arguments: None. +; Alters: af +; Returns: Nothing. +; Description: Sets unused sprites to be dialog/rain/snow etc based +; on [envEffectType]. Calls UpdateDialogBalloons and +; ResetFreeSprites +;--------------------------------------------------------------------- +UpdateEnvEffect:: + push bc + push de + push hl + + ld de,spritesUsed + ld hl,spriteOAMBuffer + + ld c,0 + + ld a,[dialogBalloonClassIndex] + or a + jr z,.afterUpdateBalloons + + inc c + call nz,UpdateDialogBalloons + +.afterUpdateBalloons + ld a,[envEffectType] + or a + jr z,.afterEffect + + ldio a,[randomLoc] + push af + ld a,[asyncRandLoc] + ldio [randomLoc],a + ld a,[envEffectType] + call .updateAppropriate + ldio a,[randomLoc] + ldio [asyncRandLoc],a + pop af + ldio [randomLoc],a + +.afterEffect + call ResetFreeSprites + + pop hl + pop de + pop bc + ret + +.updateAppropriate + inc c + + cp ENV_RAIN + jr nz,.checkSnow + + ld d,e + LONGCALLNOARGS EnvRain + ret + +.checkSnow + cp ENV_SNOW + jr nz,.checkDirt + + ld d,e + LONGCALLNOARGS EnvSnow + ret + +.checkDirt + cp ENV_DIRT + jr nz,.checkClouds + + ld d,e + LONGCALLNOARGS EnvDirt + ret + +.checkClouds + cp ENV_CLOUDS + jr nz,.checkWindySnow + + ld d,e + LONGCALLNOARGS EnvClouds + ret + +.checkWindySnow + cp ENV_WINDYSNOW + jr nz,.checkCounter + + ld d,e + LONGCALLNOARGS EnvWindySnow + ret + +.checkCounter + cp ENV_COUNTER + jr nz,.checkDisco + + ;reset first two sprites to y=16 + ld hl,spriteOAMBuffer + ld de,4 + ld [hl],16 + add hl,de + ld [hl],16 + ret + +.checkDisco + cp ENV_DISCO + ret nz + + LONGCALLNOARGS EnvDisco + ret + +;--------------------------------------------------------------------- +SECTION "GfxSupport",ROMX +;--------------------------------------------------------------------- +EnvRain: + call EnvSetupDEHL + ld b,0 +.nextDrop + call FindNextFreeSprite + ret z + + inc b + + ld a,[hl] + or a + jr nz,.updatePosition + +.newDrop + ;create new raindrop + ld a,63 + call GetRandomNumMask + cpl + add 16 + ld [hl+],a ;ypos + + ld a,255 + call GetRandomNumMask + ;add 8 + ;ld [hl],a + ;ld a,63 + ;call GetRandomNumMask + ;add [hl] + ;sub 64 + ld [hl+],a ;xpos + + ld [hl],81 ;pattern + inc hl + ld [hl],2 ;palette + inc hl + inc de + jr .nextDrop + +.updatePosition + ld a,[hl] + add 8 + ld [hl],a + and 184 + cp 184 + jr nz,.afterRemove + +.remove + ld [hl],0 +.afterRemove + inc hl + ld a,[hl] + add 4 + ld [hl+],a + ld a,[hl+] + cp 81 ;rain pattern + jr z,.dropOkay + + ;change into a rain sprite + dec hl + ld [hl],81 + inc hl + ld [hl],2 + + ;push hl + ;dec hl + ;dec hl + ;ld [hl],0 ;reset sprite + ;pop hl + +.dropOkay + inc hl + inc de + jp .nextDrop + +EnvSnow: + call EnvSetupDEHL + ld b,0 +.nextFlake + call FindNextFreeSprite + ret z + + inc b + + ld a,[hl] + or a + jr nz,.updatePosition + +.newFlake + ;create new snowflake + ld a,63 + call GetRandomNumMask + cpl + add 16 + ld [hl+],a ;ypos + + ld a,255 + call GetRandomNumMask + ;add 8 + ;ld [hl],a + ;ld a,63 + ;call GetRandomNumMask + ;add [hl] + ;sub 10 + ld [hl+],a ;xpos + + ld [hl],74 ;pattern + inc hl + ld [hl],0 ;palette + inc hl + inc de + jr .nextFlake + +.updatePosition + ld a,[hl] + ;add 4 + inc a + ld [hl],a + and 184 + cp 184 + jr nz,.afterRemove + +.remove + ld [hl],0 +.afterRemove + ;get deltax offset for this flake mem loc + y loc + ld a,l + rrca + rrca + add [hl] ;plus y coord + and 63 + + push hl + add (flakeSineTable & $ff) + ld l,a + ld a,0 + adc ((flakeSineTable>>8)&$ff) + ld h,a + ld a,[hl] + pop hl + inc hl + add [hl] + ld [hl+],a ;new x coord + ld a,[hl+] + cp 74 ;flake pattern + jr z,.flakeOkay + + ;change into a snowflake sprite + dec hl + ld [hl],74 + inc hl + ld [hl],0 + + ;push hl + ;dec hl + ;dec hl + ;ld [hl],0 ;reset sprite + ;pop hl + +.flakeOkay + inc hl + inc de + jp .nextFlake + + +EnvDirt: + call EnvSetupDEHL + ld b,0 +.nextGrit + call FindNextFreeSprite + ret z + + inc b + + ld a,[hl] + or a + jr nz,.updatePosition + +.newGrit + ;create new sand + ld a,127 + call GetRandomNumMask + ld [hl],a ;ypos + ld a,31 + call GetRandomNumMask + add [hl] + sub 10 + ld [hl+],a + + ld a,63 + call GetRandomNumMask + cpl + add 8 + ld [hl+],a ;xpos + + ld [hl],72 ;pattern + inc hl + ld [hl],6 ;palette + inc hl + inc de + jr .nextGrit + +.updatePosition + ld a,l ;y += (-1,0,1,2) + rrca + rrca + and %11 + sub 1 + add [hl] + ld [hl+],a + + ld a,[hl] + add 8 + ld [hl+],a + and 184 + cp 184 + jr nz,.afterRemove + +.remove + push hl + dec hl + dec hl + ld [hl],0 + pop hl +.afterRemove + ld a,[hl+] + cp 72 ;grit pattern + jr z,.gritOkay + + push hl + dec hl + dec hl + dec hl + ld [hl],0 ;reset sprite + pop hl + +.gritOkay + inc hl + inc de + jp .nextGrit + +EnvWindySnow: + call EnvSetupDEHL + ld b,0 +.nextFlake + call FindNextFreeSprite + ret z + + inc b + + ld a,[hl] + or a + jr nz,.updatePosition + +.newFlake + ;create new flake + ld a,127 + call GetRandomNumMask + ld [hl],a ;ypos + ld a,31 + call GetRandomNumMask + add [hl] + sub 10 + ld [hl+],a + + ld a,63 + call GetRandomNumMask + cpl + add 168 + ld [hl+],a ;xpos + + ld [hl],74 ;pattern + inc hl + ld [hl],0 ;palette + inc hl + inc de + jr .nextFlake + +.updatePosition + ld a,l ;y += (-1,0,1,2) + rrca + rrca + and %11 + sub 1 + add [hl] + ld [hl+],a + + ld a,[hl] + sub 8 + ld [hl+],a + and 248 + cp 248 + jr nz,.afterRemove + +.remove + push hl + dec hl + dec hl + ld [hl],0 + pop hl +.afterRemove + ld a,[hl+] + cp 74 ;flake pattern + jr z,.flakeOkay + + ;change into a snowflake sprite + dec hl + ld [hl],74 + inc hl + ld [hl],0 + + ;push hl + ;dec hl + ;dec hl + ;dec hl + ;ld [hl],0 ;reset sprite + ;pop hl + +.flakeOkay + inc hl + inc de + jp .nextFlake + +EnvClouds: + call EnvSetupDEHL + ld b,0 +.nextCloud + call FindNextFreeSprite + ret z + + inc b + + ld a,[hl] + or a + jr nz,.updatePosition + + ld a,b + and %11 + jr nz,.addToCloud + + ;one in 8 chance of creating a cloud + ld a,1 + call GetRandomNumMask + or a + jr z,.newCloud + + inc hl + inc hl + inc hl + inc hl + inc de + jr .nextCloud + +.newCloud + ;create new cloud + ld a,144 + call GetRandomNumZeroToN + add 16 + ld [hl+],a ;ypos + ld [$c01e],a + + ld a,63 + call GetRandomNumMask + cpl + ld [hl+],a ;xpos + ld [$c01f],a + + ld a,3 + call GetRandomNumMask + add 82 + ld [hl+],a ;pattern + ld [hl],4 ;palette + inc hl + inc de + jr .nextCloud + +.addToCloud + push de + ld a,7 + call GetRandomNumMask + ld d,a + ld a,[$c01e] + add d + ld [hl+],a ;ypos + + ld a,7 + call GetRandomNumMask + ld d,a + ld a,[$c01f] + add d + ld [hl+],a ;xpos + + ld a,3 + call GetRandomNumMask + add 82 + ld [hl+],a ;pattern + ld [hl],4 ;palette + inc hl + pop de + inc de + jr .nextCloud + +.updatePosition + inc hl + ;bit 2,l + ;jr z,.updateOnTimer + jr .updateOnTimer + inc [hl] + jr .afterIncr +.updateOnTimer + ldio a,[updateTimer] + and 1 + jr z,.afterIncr + inc [hl] +.afterIncr + ld a,[hl] + cp 178 + jr nz,.afterRemove + + dec hl + ld [hl],0 + inc hl +.afterRemove + inc hl + inc hl + inc hl + inc de + jp .nextCloud + +EnvSetupDEHL: + ld d,((spritesUsed>>8)&$ff) + ld a,e + rlca + rlca + ld l,a + ld h,((spriteOAMBuffer>>8)&$ff) + ret + +flakeSineTable: + DB $ff,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 + DB 0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0 + DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$ff + DB 0,0,$ff,0,0,$ff,0,0,$ff,0,$ff,0,0,$ff,0,0 + +;--------------------------------------------------------------------- +; EnvDisco +; Uses binary data "discoLights" to set all colors to purple in +; drawing buffer except where lights are flashing. Uses levelVars[0] +; to determine current frame +;--------------------------------------------------------------------- +EnvDisco: + push bc + push de + push hl + + ;setup hl to point to light data for appropriate frame + ld de,20*18 + ld hl,discoLights + ld a,[levelVars] + or a + jr z,.frameSet + +.times360 + add hl,de + dec a + jr nz,.times360 + +.frameSet + ld de,attributeBuffer + ld b,18 ;18 rows +.outer + ld c,20 ;20 columns +.inner + ld a,[hl+] + or a + jr nz,.afterSetColor + + ld a,[de] + or %111 + ld [de],a + +.afterSetColor + inc de + + dec c + jr nz,.inner + + push hl + ld hl,12 + add hl,de + ld d,h + ld e,l + pop hl + + dec b + jr nz,.outer + + pop hl + pop de + pop bc + ret + +discoLights: +INCBIN "Data/discolights.dat" + +;Not in HOME + +;--------------------------------------------------------------------- +SECTION "FontSection",ROMX,BANK[MAP0ROM] +fontData: + INCBIN "Data/font.bin" + +blankTileData: + DW 0,0,0,0,0,0,0,0 + +explosionSprites: +INCBIN "Data/Sprites/explosions0-85.bin" + +SECTION "ReservedSpriteDMAHandler",HRAM[$FF80] +SpriteDMAHandler:: + DS (oamHandlerFinish - oamHandlerStart) + +;--------------------------------------------------------------------- +SECTION "GfxSupportSection",ROMX[$4000] +;--------------------------------------------------------------------- +;$4000 +randomTable: +DB $9f,$d2,$e6,$e7,$70,$db,$11,$63,$6b,$37,$99,$98,$30,$9c,$d9,$35 +DB $65,$af,$56,$ee,$b1,$00,$fd,$c7,$61,$48,$df,$45,$2e,$41,$6d,$9b +DB $13,$40,$d8,$fa,$91,$02,$29,$e0,$cb,$5d,$28,$fb,$2f,$77,$ea,$f9 +DB $7e,$92,$5b,$75,$b5,$fc,$ae,$a2,$71,$cc,$a9,$3f,$7f,$7d,$ad,$7c +DB $73,$a5,$f8,$03,$9e,$25,$f6,$e8,$4d,$33,$b3,$44,$aa,$26,$08,$6e +DB $82,$97,$96,$19,$c8,$b4,$ba,$d3,$1f,$d0,$f5,$06,$54,$86,$49,$e2 +DB $69,$43,$0b,$b0,$f1,$83,$a8,$9d,$38,$42,$ef,$e4,$74,$12,$20,$a0 +DB $55,$01,$66,$23,$3d,$51,$c0,$79,$10,$de,$eb,$d5,$09,$8e,$5e,$67 +DB $4a,$7a,$3e,$4b,$68,$8d,$e9,$62,$1b,$dd,$da,$bb,$53,$22,$3c,$b6 +DB $ff,$81,$24,$8b,$d4,$6f,$d7,$9a,$d6,$21,$f4,$0a,$b2,$bc,$a7,$36 +DB $34,$64,$c5,$a6,$4e,$b9,$f3,$0e,$f0,$3b,$cd,$0d,$17,$ec,$1a,$8a +DB $e3,$16,$93,$05,$c9,$14,$c1,$cf,$52,$2c,$1e,$bf,$88,$27,$1d,$f7 +DB $5c,$ac,$ab,$3a,$bd,$a1,$f2,$04,$e5,$2d,$e1,$c2,$15,$fe,$8c,$6a +DB $2b,$84,$1c,$d1,$47,$c6,$58,$c3,$0f,$ce,$5f,$90,$8f,$76,$60,$0c +DB $94,$2a,$6c,$89,$39,$46,$18,$95,$7b,$dc,$b7,$72,$78,$5a,$57,$ca +DB $4f,$a4,$59,$07,$32,$c4,$ed,$b8,$50,$85,$a3,$31,$4c,$87,$80,$be + +;0=star 1=moon 2=flower 3=crouton 4=i 5=monkey 6=wrench 7=man +;$4100 +init_flightCodes: +DB $0f +DB $00,$00,$06 +DB $00,$00,$23 +DB $00,$00,$29 +DB $00,$00,$3a +DB $00,$00,$47 +DB $00,$00,$59 +DB $00,$00,$66 +DB $00,$00,$a3 +DB $00,$00,$a8 +DB $00,$00,$0a +DB $00,$00,$3d +DB $63,$02,$71 ;initial landing star flower wrench crouton +DB $33,$53,$81 ;mouse landing monkey crouton crouton crouton +DB $65,$70,$c7 ;farm landing man star wrench monkey +DB $12,$01,$55 ;palace star moon moon flower +DB $00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + + +;SECTION "InGameGraphicsSection1",ROMX +;select_hero_bg:: +; INCBIN "gamebg/select_hero.bg" + diff --git a/Source/gfx.inc b/Source/gfx.inc new file mode 100644 index 0000000..09c9397 --- /dev/null +++ b/Source/gfx.inc @@ -0,0 +1,2 @@ +EXPORT select_hero_bg + diff --git a/Source/items.inc b/Source/items.inc new file mode 100644 index 0000000..a894a0a --- /dev/null +++ b/Source/items.inc @@ -0,0 +1,37 @@ +;--------------------------------------------------------------------- +; Item & Flight Code Definitions +; 2001.02.12 by Abe Pralle +;--------------------------------------------------------------------- + +;items are defined as BYTE/BITMASK + +ITEM_SNAKEBITEKIT EQU $0001 +ITEM_SPOREMASK EQU $0002 +ITEM_CODE0400 EQU $0004 +ITEM_CODE0900 EQU $0008 +ITEM_CODE1002 EQU $0010 +ITEM_CODE1006 EQU $0020 +ITEM_CODE0410 EQU $0040 +ITEM_BATJUICE EQU $0080 +ITEM_SPACEMONEY EQU $0101 +ITEM_SPACESODA EQU $0102 +ITEM_HONEY EQU $0104 +ITEM_WRANGLING EQU $0108 +ITEM_BSSHOOTFAST EQU $0110 +ITEM_BUGSPRAY EQU $0120 +ITEM_BAHIGHIMPACT EQU $0140 +ITEM_CODE0307 EQU $0180 + +ITEM_ALPHACLEAR EQU $0201 +ITEM_BETACLEAR EQU $0202 +ITEM_GAMMACLEAR EQU $0204 +ITEM_DELTACLEAR EQU $0208 +ITEM_EPSILONCLEAR EQU $0210 +ITEM_ZETACLEAR EQU $0220 + +ITEM_APPXKEY EQU $0240 + +;bit numbers +UPGRADE_BSSHOOTFAST EQU 0 +UPGRADE_BAHIGHIMPACT EQU 0 + diff --git a/Source/l0000.asm b/Source/l0000.asm new file mode 100644 index 0000000..74851a4 --- /dev/null +++ b/Source/l0000.asm @@ -0,0 +1,129 @@ +;level0000.asm hive +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +STATE_NORMAL EQU 1 +STATE_HONEYTAKEN EQU 2 + +;--------------------------------------------------------------------- +SECTION "LevelsSection0000",ROMX,BANK[MAP0ROM] +;--------------------------------------------------------------------- + +dialog: +l0000_hero_honey_gtx: + INCBIN "Data/Dialog/talk/l0000_hero_honey.gtx" + +L0000_Contents:: + DW L0000_Load + DW L0000_Init + DW L0000_Check + DW L0000_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0000_Load: + DW ((L0000_LoadFinished - L0000_Load2)) ;size +L0000_Load2: + call ParseMap + ret + +L0000_LoadFinished: + +L0000_Map: +INCBIN "Data/Levels/l0000_hive.lvl" + +;gtx_intro: INCBIN "Data/Dialog/Landing/intro.gtx" +;gtx_intro2: INCBIN "Data/Dialog/Landing/intro2.gtx" +;gtx_finished: INCBIN "Data/Dialog/Landing/finished.gtx" +;gtx_finished2: INCBIN "Data/Dialog/Landing/finished2.gtx" + +;--------------------------------------------------------------------- +L0000_Init: +;--------------------------------------------------------------------- + DW ((L0000_InitFinished - L0000_Init2)) ;size +L0000_Init2: + call State0To1 + + STDSETUPDIALOG + + ldio a,[mapState] + cp STATE_HONEYTAKEN + jr nz,.done + + ;remove honey from map + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d146],a + +.done + ret + +L0000_InitFinished: + + +;--------------------------------------------------------------------- +L0000_Check: +;--------------------------------------------------------------------- + DW ((L0000_CheckFinished - L0000_Check) - 2) ;size +L0000_Check2: + ldio a,[mapState] + cp STATE_HONEYTAKEN + jr z,.done + + xor a + ld hl,((.checkFoundHoney-L0000_Check2)+levelCheckRAM) + call CheckEachHero +.done + ret + +.checkFoundHoney + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.foundHoney + + xor a + ret + +.foundHoney + ;found honey + ld de,((.afterDialog-L0000_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerFromHeroIndex + ld de,l0000_hero_honey_gtx + call ShowDialogAtBottom +.afterDialog + call ClearDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld bc,ITEM_HONEY + call AddInventoryItem + + ;remove honey from map + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d146],a + + ld a,STATE_HONEYTAKEN + ldio [mapState],a + + ld a,1 + ret +L0000_CheckFinished: + + +PRINTT " 0000 Level Check Size: " +PRINTV (L0000_CheckFinished - L0000_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l0001.asm b/Source/l0001.asm new file mode 100644 index 0000000..b1ad036 --- /dev/null +++ b/Source/l0001.asm @@ -0,0 +1,79 @@ +; l0001.asm outside the hive +; Generated 08.27.2000 by mlevel +; Modified 08.27.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 35 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0001Section",ROMX +;--------------------------------------------------------------------- + +L0001_Contents:: + DW L0001_Load + DW L0001_Init + DW L0001_Check + DW L0001_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0001_Load: + DW ((L0001_LoadFinished - L0001_Load2)) ;size +L0001_Load2: + call ParseMap + ret + +L0001_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0001_Map: +INCBIN "Data/Levels/l0001_bees.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0001_Init: + DW ((L0001_InitFinished - L0001_Init2)) ;size +L0001_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ret + +L0001_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0001_Check: + DW ((L0001_CheckFinished - L0001_Check2)) ;size +L0001_Check2: + call ((.animateWater-L0001_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0001_CheckFinished: +PRINTT "0001 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0001_LoadFinished - L0001_Load2) +PRINTT " / " +PRINTV (L0001_InitFinished - L0001_Init2) +PRINTT " / " +PRINTV (L0001_CheckFinished - L0001_Check2) +PRINTT "\n" + diff --git a/Source/l0002.asm b/Source/l0002.asm new file mode 100644 index 0000000..f8e65bc --- /dev/null +++ b/Source/l0002.asm @@ -0,0 +1,158 @@ +; l0002.asm bee border +; Generated 08.27.2000 by mlevel +; Modified 08.27.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 23 +VAR_WATER EQU 0 + +STATE_NORMAL EQU 1 +STATE_TALKED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0002Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0002_bees_gtx: + INCBIN "Data/Dialog/talk/l0002_bees.gtx" + +l0002_hero_spray_gtx: + INCBIN "Data/Dialog/talk/l0002_hero_spray.gtx" + +l0002_village_gtx: + INCBIN "Data/Dialog/talk/l0002_village.gtx" + +l0002_hero_no_gtx: + INCBIN "Data/Dialog/talk/l0002_hero_no.gtx" + +l0002_croutons_gtx: + INCBIN "Data/Dialog/talk/l0002_croutons.gtx" + +L0002_Contents:: + DW L0002_Load + DW L0002_Init + DW L0002_Check + DW L0002_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0002_Load: + DW ((L0002_LoadFinished - L0002_Load2)) ;size +L0002_Load2: + call ParseMap + ret + +L0002_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0002_Map: +INCBIN "Data/Levels/l0002_bees.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0002_Init: + DW ((L0002_InitFinished - L0002_Init2)) ;size +L0002_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + STDSETUPDIALOG + + ld a,STATE_NORMAL + ldio [mapState],a + + ld bc,classTree + ld de,classTreeTalker + call ChangeClass + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0002_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0002_Check: + DW ((L0002_CheckFinished - L0002_Check2)) ;size +L0002_Check2: + call ((.animateWater-L0002_Check2)+levelCheckRAM) + call ((.checkDialog-L0002_Check2)+levelCheckRAM) + ret + +.checkDialog + ldio a,[mapState] + cp STATE_TALKED + ret z + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + call MakeIdle + + ld de,((.afterDialog-L0002_Check2)+levelCheckRAM) + call SetDialogSkip + + ;Careful; bees + ld de,l0002_bees_gtx + call ShowDialogNPC + + ;Where's the spray? + ld de,l0002_hero_spray_gtx + call ShowDialogHero + + ;Down south; seen anybody? + ld de,l0002_village_gtx + call ShowDialogNPC + + ;No + ld de,l0002_hero_no_gtx + call ShowDialogHero + + ;tell about croutons + ld de,l0002_croutons_gtx + call ShowDialogNPC + +.afterDialog + call ClearDialog + + call MakeNonIdle + ld a,STATE_TALKED + ldio [mapState],a + + ld a,1 + call DisableDialogBalloons + + xor a + ld [dialogNPC_speakerIndex],a + ret + + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0002_CheckFinished: +PRINTT "0002 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0002_LoadFinished - L0002_Load2) +PRINTT " / " +PRINTV (L0002_InitFinished - L0002_Init2) +PRINTT " / " +PRINTV (L0002_CheckFinished - L0002_Check2) +PRINTT "\n" + diff --git a/Source/l0003.asm b/Source/l0003.asm new file mode 100644 index 0000000..774161c --- /dev/null +++ b/Source/l0003.asm @@ -0,0 +1,199 @@ +; l0003.asm green pastures big sheep pen +; Generated 08.26.2000 by mlevel +; Modified 08.26.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +BLUE_INDEX EQU 49 + +STATE_NORMAL EQU 1 +STATE_TALKED1 EQU 2 +STATE_TALKED2 EQU 3 + + +;--------------------------------------------------------------------- +SECTION "Level0003Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0003_wolves_gtx: + INCBIN "Data/Dialog/talk/l0003_wolves.gtx" + +l0003_shootfast_gtx: + INCBIN "Data/Dialog/talk/l0003_shootfast.gtx" + +l0003_hero_jeb_gtx: + INCBIN "Data/Dialog/talk/l0003_hero_jeb.gtx" + +l0003_nevermind_gtx: + INCBIN "Data/Dialog/talk/l0003_nevermind.gtx" + +l0003_aboutjeb_gtx: + INCBIN "Data/Dialog/talk/l0003_aboutjeb.gtx" + +L0003_Contents:: + DW L0003_Load + DW L0003_Init + DW L0003_Check + DW L0003_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0003_Load: + DW ((L0003_LoadFinished - L0003_Load2)) ;size +L0003_Load2: + call ParseMap + ret + +L0003_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0003_Map: +INCBIN "Data/Levels/l0003_green.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0003_Init: + DW ((L0003_InitFinished - L0003_Init2)) ;size +L0003_Init2: + STDSETUPDIALOG + + ld bc,classCowboy + ld de,classCowboyTalker + call ChangeFirstClass + + ld a,BLUE_INDEX + ld [dialogBalloonClassIndex],a + ld a,%0011 + call DisableDialogBalloons + + ld a,STATE_NORMAL + ldio [mapState],a + + ld a,BANK(cowboy_gbm) + ld hl,cowboy_gbm + call InitMusic + ret + +L0003_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0003_Check: + DW ((L0003_CheckFinished - L0003_Check2)) ;size +L0003_Check2: + call ((.checkDialog-L0003_Check2)+levelCheckRAM) + ret + +.checkDialog + ldio a,[mapState] + cp STATE_TALKED2 + jr c,.dialogOkay + + ld a,$ff + call DisableDialogBalloons + ret + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + call MakeIdle + + ldio a,[mapState] + cp STATE_TALKED1 + jr z,.talkAboutJeb + + ld de,((.afterWolfDialog-L0003_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ;Warn about wolves + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0003_wolves_gtx + call ShowDialogAtTop + call ClearDialog + +.afterWolfDialog + call ClearDialog + call ClearDialogSkipForward + + call MakeNonIdle + ld a,STATE_TALKED1 + ldio [mapState],a + + xor a + ld [dialogNPC_speakerIndex],a + ret + +.talkAboutJeb + ld de,((.afterJebDialog-L0003_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ;Out here ya gotta shoot fast + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0003_shootfast_gtx + call ShowDialogAtTop + call ClearDialog + + ;Jeb? + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + ld de,l0003_hero_jeb_gtx + call ShowDialogAtBottom + call ClearDialog + + ld a,HERO_BS_FLAG + call ClassIndexIsHeroType + jr z,.notBS + + ;nevermind + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0003_aboutjeb_gtx + call ShowDialogAtTop + jr .afterJebDialog + +.notBS + ;nevermind + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0003_nevermind_gtx + call ShowDialogAtTop + +.afterJebDialog + call ClearDialog + call ClearDialogSkipForward + + call MakeNonIdle + ld a,STATE_TALKED2 + ldio [mapState],a + + xor a + ld [dialogNPC_speakerIndex],a + ret + +L0003_CheckFinished: +PRINTT "0003 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0003_LoadFinished - L0003_Load2) +PRINTT " / " +PRINTV (L0003_InitFinished - L0003_Init2) +PRINTT " / " +PRINTV (L0003_CheckFinished - L0003_Check2) +PRINTT "\n" + diff --git a/Source/l0004.asm b/Source/l0004.asm new file mode 100644 index 0000000..92f5e01 --- /dev/null +++ b/Source/l0004.asm @@ -0,0 +1,144 @@ +; l0004.asm start of green pastures +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_NORMAL EQU 1 +STATE_TALKED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0004Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0004_howdypilgrim_gtx: + INCBIN "Data/Dialog/talk/l0004_howdypilgrim.gtx" + +l0004_sure_gtx: + INCBIN "Data/Dialog/talk/l0004_sure.gtx" + +l0004_mindyourbusiness_gtx: + INCBIN "Data/Dialog/talk/l0004_mindyourbusiness.gtx" + +L0004_Contents:: + DW L0004_Load + DW L0004_Init + DW L0004_Check + DW L0004_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0004_Load: + DW ((L0004_LoadFinished - L0004_Load2)) ;size +L0004_Load2: + call ParseMap + ret + +L0004_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0004_Map: +INCBIN "Data/Levels/L0004_ranch.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0004_Init: + DW ((L0004_InitFinished - L0004_Init2)) ;size +L0004_Init2: + ld a,BANK(dialog) + ld [dialogBank],a + call SetPressBDialog + + ld a,STATE_NORMAL + ldio [mapState],a + + ld bc,classCowboy + ld de,classCowboyTalker + call ChangeClass + + ld a,BANK(cowboy_gbm) + ld hl,cowboy_gbm + call InitMusic + ret + +L0004_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0004_Check: + DW ((L0004_CheckFinished - L0004_Check2)) ;size +L0004_Check2: + call ((.checkDialog-L0004_Check2)+levelCheckRAM) + ret + +.checkDialog + ldio a,[mapState] + cp STATE_TALKED + jr c,.dialogOkay + + ld a,%11 + call DisableDialogBalloons + ret + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + call MakeIdle + + ld de,((.afterDialog-L0004_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ;Howdy pilgrim + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0004_howdypilgrim_gtx + call ShowDialogAtTop + call ClearDialog + + ;Sure I'll help + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + ld de,l0004_sure_gtx + call ShowDialogAtBottom + call ClearDialog + + ;Mind your own business + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0004_mindyourbusiness_gtx + call ShowDialogAtTop + +.afterDialog + call ClearDialog + call ClearDialogSkipForward + + call MakeNonIdle + ld a,STATE_TALKED + ldio [mapState],a + + xor a + ld [dialogNPC_speakerIndex],a + ret + +L0004_CheckFinished: +PRINTT "0004 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0004_LoadFinished - L0004_Load2) +PRINTT " / " +PRINTV (L0004_InitFinished - L0004_Init2) +PRINTT " / " +PRINTV (L0004_CheckFinished - L0004_Check2) +PRINTT "\n" + diff --git a/Source/l0005.asm b/Source/l0005.asm new file mode 100644 index 0000000..4214378 --- /dev/null +++ b/Source/l0005.asm @@ -0,0 +1,69 @@ +; l0005.asm trakktor clearing +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0005Section",ROMX +;--------------------------------------------------------------------- + +L0005_Contents:: + DW L0005_Load + DW L0005_Init + DW L0005_Check + DW L0005_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0005_Load: + DW ((L0005_LoadFinished - L0005_Load2)) ;size +L0005_Load2: + call ParseMap + ret + +L0005_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0005_Map: +INCBIN "Data/Levels/L0005_path.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0005_Init: + DW ((L0005_InitFinished - L0005_Init2)) ;size +L0005_Init2: + ld a,ENV_RAIN + call SetEnvEffect + + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ld hl,$1300 + call SetRespawnMap + ret + +L0005_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0005_Check: + DW ((L0005_CheckFinished - L0005_Check2)) ;size +L0005_Check2: + ret + +L0005_CheckFinished: +PRINTT "0005 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0005_LoadFinished - L0005_Load2) +PRINTT " / " +PRINTV (L0005_InitFinished - L0005_Init2) +PRINTT " / " +PRINTV (L0005_CheckFinished - L0005_Check2) +PRINTT "\n" + diff --git a/Source/l0006.asm b/Source/l0006.asm new file mode 100644 index 0000000..76f7655 --- /dev/null +++ b/Source/l0006.asm @@ -0,0 +1,63 @@ +; l0006.asm Sunset Village +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0006Section",ROMX +;--------------------------------------------------------------------- + +L0006_Contents:: + DW L0006_Load + DW L0006_Init + DW L0006_Check + DW L0006_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0006_Load: + DW ((L0006_LoadFinished - L0006_Load2)) ;size +L0006_Load2: + call ParseMap + ret + +L0006_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0006_Map: +INCBIN "Data/Levels/L0006_sunset.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0006_Init: + DW ((L0006_InitFinished - L0006_Init2)) ;size +L0006_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ret + +L0006_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0006_Check: + DW ((L0006_CheckFinished - L0006_Check2)) ;size +L0006_Check2: + ret + +L0006_CheckFinished: +PRINTT "0006 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0006_LoadFinished - L0006_Load2) +PRINTT " / " +PRINTV (L0006_InitFinished - L0006_Init2) +PRINTT " / " +PRINTV (L0006_CheckFinished - L0006_Check2) +PRINTT "\n" + diff --git a/Source/l0007.asm b/Source/l0007.asm new file mode 100644 index 0000000..9e41758 --- /dev/null +++ b/Source/l0007.asm @@ -0,0 +1,72 @@ +; l0007.asm +; Generated 09.04.2000 by mlevel +; Modified 09.04.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0007Section",ROMX +;--------------------------------------------------------------------- + +L0007_Contents:: + DW L0007_Load + DW L0007_Init + DW L0007_Check + DW L0007_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0007_Load: + DW ((L0007_LoadFinished - L0007_Load2)) ;size +L0007_Load2: + call ParseMap + ret + +L0007_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0007_Map: +INCBIN "Data/Levels/l0007_forest.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +CROWINDEX EQU 31 +EATRANGE EQU ((29<<8) | 21) + +L0007_Init: + DW ((L0007_InitFinished - L0007_Init2)) ;size +L0007_Init2: + ;set crows to eat the trees and bushes + ld c,CROWINDEX + call GetFirst +.setCrowsFood + ld hl,EATRANGE + call SetFoodIndexRange + call GetNextObject + or a + jr nz,.setCrowsFood + + ret + +L0007_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0007_Check: + DW ((L0007_CheckFinished - L0007_Check2)) ;size +L0007_Check2: + ret + +L0007_CheckFinished: +PRINTT "0007 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0007_LoadFinished - L0007_Load2) +PRINTT " / " +PRINTV (L0007_InitFinished - L0007_Init2) +PRINTT " / " +PRINTV (L0007_CheckFinished - L0007_Check2) +PRINTT "\n" + diff --git a/Source/l0008.asm b/Source/l0008.asm new file mode 100644 index 0000000..9e3918c --- /dev/null +++ b/Source/l0008.asm @@ -0,0 +1,130 @@ +; l0008.asm +; Generated 09.04.2000 by mlevel +; Modified 09.04.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +STATE_NORMAL EQU 1 +STATE_SPRAYTAKEN EQU 2 + +;--------------------------------------------------------------------- +SECTION "Level0008Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0008_findspray_gtx: + INCBIN "Data/Dialog/talk/l0008_findspray.gtx" + +L0008_Contents:: + DW L0008_Load + DW L0008_Init + DW L0008_Check + DW L0008_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0008_Load: + DW ((L0008_LoadFinished - L0008_Load2)) ;size +L0008_Load2: + call ParseMap + ret + +L0008_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0008_Map: +INCBIN "Data/Levels/l0008_forest.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0008_Init: + DW ((L0008_InitFinished - L0008_Init2)) ;size +L0008_Init2: + call State0To1 + + STDSETUPDIALOG + + ldio a,[mapState] + cp STATE_SPRAYTAKEN + jr nz,.done + + ;remove spray from map + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d32d],a + +.done + ret + +L0008_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0008_Check: + DW ((L0008_CheckFinished - L0008_Check2)) ;size +L0008_Check2: + ldio a,[mapState] + cp STATE_SPRAYTAKEN + jr z,.done + + xor a + ld hl,((.checkFoundSpray-L0008_Check2)+levelCheckRAM) + call CheckEachHero +.done + ret + +.checkFoundSpray + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.foundSpray + + xor a + ret + +.foundSpray + ;found spray + ld de,((.afterDialog-L0008_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerFromHeroIndex + ld de,l0008_findspray_gtx + call ShowDialogAtBottom +.afterDialog + call ClearDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld bc,ITEM_BUGSPRAY + call AddInventoryItem + + ;remove spray from map + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d32d],a + + ld a,STATE_SPRAYTAKEN + ldio [mapState],a + + ld a,1 + ret + +L0008_CheckFinished: +PRINTT "0008 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0008_LoadFinished - L0008_Load2) +PRINTT " / " +PRINTV (L0008_InitFinished - L0008_Init2) +PRINTT " / " +PRINTV (L0008_CheckFinished - L0008_Check2) +PRINTT "\n" + diff --git a/Source/l0009.asm b/Source/l0009.asm new file mode 100644 index 0000000..9d22da2 --- /dev/null +++ b/Source/l0009.asm @@ -0,0 +1,59 @@ +; l0009.asm +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0009Section",ROMX +;--------------------------------------------------------------------- + +L0009_Contents:: + DW L0009_Load + DW L0009_Init + DW L0009_Check + DW L0009_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0009_Load: + DW ((L0009_LoadFinished - L0009_Load2)) ;size +L0009_Load2: + call ParseMap + ret + +L0009_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0009_Map: +INCBIN "Data/Levels/l0009_mouse.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0009_Init: + DW ((L0009_InitFinished - L0009_Init2)) ;size +L0009_Init2: + ret + +L0009_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0009_Check: + DW ((L0009_CheckFinished - L0009_Check2)) ;size +L0009_Check2: + ret + +L0009_CheckFinished: +PRINTT "0009 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0009_LoadFinished - L0009_Load2) +PRINTT " / " +PRINTV (L0009_InitFinished - L0009_Init2) +PRINTT " / " +PRINTV (L0009_CheckFinished - L0009_Check2) +PRINTT "\n" + diff --git a/Source/l0010.asm b/Source/l0010.asm new file mode 100644 index 0000000..7401ff5 --- /dev/null +++ b/Source/l0010.asm @@ -0,0 +1,436 @@ +; l0010.asm mouse teleport room +; Generated 11.06.2000 by mlevel +; Modified 11.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +BOULDER_INDEX EQU 1 +MASK_INDEX EQU 68 +MOUSE_INDEX EQU 69 +UBERMOUSE_INDEX EQU 71 + +VAR_CONTROLS EQU 0 +VAR_CRATE EQU 1 +VAR_CRATETAKEN EQU 2 + +STATE_MASKTAKEN EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0010Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0010_mattermitter_gtx: + INCBIN "Data/Dialog/talk/l0010_mattermitter.gtx" + +l0010_foundmask_gtx: + INCBIN "Data/Dialog/talk/l0010_foundmask.gtx" + +l0010_crate_gtx: + INCBIN "Data/Dialog/talk/l0010_crate.gtx" + +L0010_Contents:: + DW L0010_Load + DW L0010_Init + DW L0010_Check + DW L0010_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0010_Load: + DW ((L0010_LoadFinished - L0010_Load2)) ;size +L0010_Load2: + call ParseMap + ret + +L0010_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0010_Map: +INCBIN "Data/Levels/l0010_serpent.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0010_Init: + DW ((L0010_InitFinished - L0010_Init2)) ;size +L0010_Init2: + STDSETUPDIALOG + xor a + ld [levelVars+VAR_CONTROLS],a + + ;remove mask if taken + ldio a,[mapState] + cp STATE_MASKTAKEN + jr nz,.checkRemoveCrate + + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d168],a + +.checkRemoveCrate + xor a + ld hl,levelVars+VAR_CRATETAKEN + ld [hl],a + + ;remove create if taken already + ld bc,ITEM_BAHIGHIMPACT + call HasInventoryItem + jr z,.doneRemoveCreate + + ld a,1 + ld [hl],a + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d1f3],a + +.doneRemoveCreate + + ret + +L0010_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0010_Check: + DW ((L0010_CheckFinished - L0010_Check2)) ;size +L0010_Check2: + call ((.checkUberMouseOpenWall-L0010_Check2)+levelCheckRAM) + call ((.checkSign-L0010_Check2)+levelCheckRAM) + ldio a,[mapState] + cp STATE_MASKTAKEN + jr z,.checkControls + + xor a + ld hl,((.checkFoundMask-L0010_Check2)+levelCheckRAM) + call CheckEachHero + +.checkControls + ;can't operate if ubermouse half-in + ld a,MAPBANK + ldio [$ff70],a + ld a,[$d064] + cp UBERMOUSE_INDEX + ret z + + ld a,1 + ld hl,((.heroAtControls-L0010_Check2)+levelCheckRAM) + call CheckEachHero + + ld hl,levelVars + VAR_CONTROLS + cp [hl] + jp z,((.afterResetControls-L0010_Check2)+levelCheckRAM) + + ld [hl],a + or a + jp z,((.afterResetControls-L0010_Check2)+levelCheckRAM) + + ;activate teleport! + ld de,((.afterTportDialog-L0010_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerFromHeroIndex + ld de,l0010_mattermitter_gtx + call ShowDialogAtBottom +.afterTportDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,15 + call SetupFadeFromWhite + + ld a,1 + call Delay + + ld hl,$d063 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d064 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d083 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d084 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d148 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d149 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d168 + call ((.package-L0010_Check2)+levelCheckRAM) + ld hl,$d169 + call ((.package-L0010_Check2)+levelCheckRAM) + + ld de,$d063 + ld hl,$d148 + call ((.exchange-L0010_Check2)+levelCheckRAM) + ld de,$d064 + ld hl,$d149 + call ((.exchange-L0010_Check2)+levelCheckRAM) + ld de,$d083 + ld hl,$d168 + call ((.exchange-L0010_Check2)+levelCheckRAM) + ld de,$d084 + ld hl,$d169 + call ((.exchange-L0010_Check2)+levelCheckRAM) + + ;unpack in reverse order + ld de,$d169 + ld hl,$d084 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + ld de,$d168 + ld hl,$d083 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + ld de,$d149 + ld hl,$d064 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + ld de,$d148 + ld hl,$d063 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + + ld hl,$d169 + ld de,$d084 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + ld hl,$d168 + ld de,$d083 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + ld hl,$d149 + ld de,$d064 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + ld hl,$d148 + ld de,$d063 + call ((.unpackage-L0010_Check2)+levelCheckRAM) + +.afterResetControls + ret + +.checkSign + ld a,1 + ld hl,((.heroAtSign-L0010_Check2)+levelCheckRAM) + call CheckEachHero + + ld hl,levelVars + VAR_CRATE + cp [hl] + ret z + + ld [hl],a + or a + ret z + + ld a,[levelVars+VAR_CRATETAKEN] + or a + ret nz + + ld de,((.afterSignDialog-L0010_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerFromHeroIndex + ld de,l0010_crate_gtx + call ShowDialogAtBottom +.afterSignDialog + call ClearDialog + call ClearDialogSkipForward + call MakeNonIdle + + ;remove create if BA + ld a,HERO_BA_FLAG + call ClassIndexIsHeroType + ret z + + ld a,1 + ld [levelVars+VAR_CRATETAKEN],a + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [$d1f3],a + ld bc,ITEM_BAHIGHIMPACT + call AddInventoryItem + ld hl,baUpgrades + set UPGRADE_BAHIGHIMPACT,[hl] + + ret + +.heroAtSign + ld c,a + call GetFirst + call GetCurZone + cp 5 + jp z,((.returnTrue-L0010_Check2)+levelCheckRAM) + + ;return false + xor a + ret + + +.checkUberMouseOpenWall + ld a,MAPBANK + ldio [$ff70],a + ld a,[$d10d] + cp UBERMOUSE_INDEX + ret nz + + ld a,[$d10f] + cp BOULDER_INDEX + ret nz + + xor a + ld [$d10f],a + ld [$d12f],a + + ld a,15 + ldio [jiggleDuration],a + ld hl,bombSound + call PlaySound + ret + +.package + ;pick up object at [hl], remove it from map, place index back + ;at [hl] + ld a,MAPBANK + ldio [$ff70],a + ldio a,[firstMonster] + ld b,a + ld a,[hl] + cp b + ret c ;is a BG tile + + push hl + push hl + call EnsureTileIsHead + ld c,a + push hl + pop de + call FindObject + call SetObjWidthHeight + call GetFacing + push bc + ld c,a + call RemoveFromMap + pop bc + pop hl + call SetCurLocation + ;turn off split bit + call GetFacing + res 2,a + call SetFacing + ld a,MAPBANK + ldio [$ff70],a + ld a,c + pop hl + ld [hl],a + ret + +.unpackage + ;hl - location object is at + ;de - object's previous location + ld a,MAPBANK + ldio [$ff70],a + ldio a,[firstMonster] + ld b,a + ld a,[hl] + cp b + ret c ;is a BG tile + + push hl + ld c,a + call FindObject + pop hl + call SetCurLocation + + ld b,METHOD_DRAW + call CallMethod + ret + +.exchange + ;exchange obj/items at [hl] with [de] + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + ld b,a + ld a,[de] + ld [hl],a + ld a,b + ld [de],a + ret + +.heroAtControls + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.returnTrue + +.returnFalse + xor a + ret + +.returnTrue + ld a,1 + ret + +.checkFoundMask + ld c,a + call GetFirst + call GetCurZone + cp 4 + jr z,.checkZone4 + cp 3 + jr nz,.returnFalse ;not near mask at all + +.checkZone3 + ld hl,$d083 + jr .checkHLForMask + +.checkZone4 + ld hl,$d168 +.checkHLForMask + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl] + cp MASK_INDEX + jr nz,.returnFalse ;mask not here + +.foundMask + ;remove mask from map + ld [hl],0 + + ld de,((.afterDialog-L0010_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerFromHeroIndex + ld de,l0010_foundmask_gtx + call ShowDialogAtBottom +.afterDialog + call ClearDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld bc,ITEM_SPOREMASK + call AddInventoryItem + + ld a,STATE_MASKTAKEN + ldio [mapState],a + + ld a,1 + ret + +L0010_CheckFinished: +PRINTT "0010 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0010_LoadFinished - L0010_Load2) +PRINTT " / " +PRINTV (L0010_InitFinished - L0010_Init2) +PRINTT " / " +PRINTV (L0010_CheckFinished - L0010_Check2) +PRINTT "\n" + diff --git a/Source/l0011.asm b/Source/l0011.asm new file mode 100644 index 0000000..6e99662 --- /dev/null +++ b/Source/l0011.asm @@ -0,0 +1,101 @@ +; l0011.asm House of the Seasons +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0011Section",ROMX +;--------------------------------------------------------------------- + +L0011_Contents:: + DW L0011_Load + DW L0011_Init + DW L0011_Check + DW L0011_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0011_Load: + DW ((L0011_LoadFinished - L0011_Load2)) ;size +L0011_Load2: + call ParseMap + ret + +L0011_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0011_Map: +INCBIN "Data/Levels/L0011_seasons.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +VAR_FIRE EQU 0 + +FIREINDEX EQU 40 + +L0011_Init: + DW ((L0011_InitFinished - L0011_Init2)) ;size +L0011_Init2: + ld a,[bgTileMap + FIREINDEX] + ld [levelVars + VAR_FIRE],a + + ;map color to white for fade + ld hl,mapColor + ld a,$ff + ld [hl+],a + ld a,$7f + ld [hl+],a + + ;last color to $0888 for fade/hblank + ld a,FADEBANK + ldio [$ff70],a + ld hl,gamePalette+62 + ld a,$88 + ld [hl+],a + ld a,$08 + ld [hl+],a + + ;new hblank + ld hl,SeasonsOnHBlank + call InstallHBlankHandler + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0011_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0011_Check: + DW ((L0011_CheckFinished - L0011_Check2)) ;size +L0011_Check2: + call ((.animateFire-L0011_Check2)+levelCheckRAM) + ret + +.animateFire + ldio a,[updateTimer] + rrca + rrca + and %11 + ld hl,levelVars + VAR_FIRE + add [hl] + ld [bgTileMap + FIREINDEX],a + ret + + +L0011_CheckFinished: +PRINTT "0011 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0011_LoadFinished - L0011_Load2) +PRINTT " / " +PRINTV (L0011_InitFinished - L0011_Init2) +PRINTT " / " +PRINTV (L0011_CheckFinished - L0011_Check2) +PRINTT "\n" + diff --git a/Source/l0012.asm b/Source/l0012.asm new file mode 100644 index 0000000..ffa4dd4 --- /dev/null +++ b/Source/l0012.asm @@ -0,0 +1,179 @@ +; l0012.asm Command Core +; Generated 04.26.2001 by mlevel +; Modified 04.26.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;same for other ssa rooms +STATE_DEFUSED EQU 2 + +VAR_TALKED EQU 0 + +STATIC_INDEX EQU 23 +GRUNT_INDEX EQU 28 +GYRO_INDEX EQU 29 + +;--------------------------------------------------------------------- +SECTION "Level0012Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0012_bombs_gtx: + INCBIN "Data/Dialog/apocalypse/l0012_bombs.gtx" + +l0012_defused_gtx:: + INCBIN "Data/Dialog/apocalypse/l0012_defused.gtx" + +l0012_alldefused_gtx:: + INCBIN "Data/Dialog/apocalypse/l0012_alldefused.gtx" + +L0012_Contents:: + DW L0012_Load + DW L0012_Init + DW L0012_Check + DW L0012_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0012_Load: + DW ((L0012_LoadFinished - L0012_Load2)) ;size +L0012_Load2: + call ParseMap + ret + +L0012_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0012_Map: +INCBIN "Data/Levels/l0012_ssa_cmdcore.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0012_Init: + DW ((L0012_InitFinished - L0012_Init2)) ;size +L0012_Init2: + STDSETUPDIALOG + xor a + ld [levelVars+VAR_TALKED],a + ret + +L0012_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0012_Check: + DW ((L0012_CheckFinished - L0012_Check2)) ;size +L0012_Check2: + call ((.animateStatic-L0012_Check2)+levelCheckRAM) + call ((.checkDialog-L0012_Check2)+levelCheckRAM) + ret + +.checkDialog + ld a,[levelVars+VAR_TALKED] + or a + ret nz + + ;enemies gone? + ld c,GRUNT_INDEX + call GetFirst + or a + ret nz + + ;check all defused + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$b8] + cp 2 + jr nz,.needDefuse + ld a,[levelState+$b9] + cp 2 + jr nz,.needDefuse + ld a,[levelState+$ba] + cp 2 + jr nz,.needDefuse + ld a,[levelState+$bb] + cp 2 + jr nz,.needDefuse + + ;all defused. + call MakeIdle + + ld a,30 +.delayStatic + push af + ld a,1 + call Delay + call ((.animateStatic-L0012_Check2)+levelCheckRAM) + pop af + dec a + jr nz,.delayStatic + + ;Gyro appears on screen + ld c,GYRO_INDEX + ld hl,$d14a + call CreateInitAndDrawObject + + ld a,30 + call Delay + + call MakeNonIdle + ld a,1 + ld [levelVars+VAR_TALKED],a + + ;go to escape ssa cinema + ld a,0 + ld hl,$1204 + call YankRemotePlayer + + ld hl,$1204 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.needDefuse + ld de,((.afterDialog-L0012_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerToFirstHero + ld de,l0012_bombs_gtx + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ld [levelVars+VAR_TALKED],a + ret + +.animateStatic + ldio a,[updateTimer] + rrca + and %00000010 + add STATIC_INDEX + ld hl,bgTileMap+STATIC_INDEX + ld [hl+],a + inc a + ld [hl+],a + ret + +L0012_CheckFinished: +PRINTT "0012 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0012_LoadFinished - L0012_Load2) +PRINTT " / " +PRINTV (L0012_InitFinished - L0012_Init2) +PRINTT " / " +PRINTV (L0012_CheckFinished - L0012_Check2) +PRINTT "\n" + diff --git a/Source/l0013.asm b/Source/l0013.asm new file mode 100644 index 0000000..7249161 --- /dev/null +++ b/Source/l0013.asm @@ -0,0 +1,770 @@ +; l0013.asm - first map, ba lands on the moon +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +DROPSPEED1 EQU $ff00 ;normal +DROPSPEED2 EQU $0001 + +;DROPSPEED1 EQU $fc00 ;fast +;DROPSPEED2 EQU $0004 + + +;--------------------------------------------------------------------- +SECTION "Level0013Section",ROMX +;--------------------------------------------------------------------- + +L0013_Contents:: + DW L0013_Load + DW L0013_Init + DW L0013_Check + DW L0013_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0013_Load: + DW ((L0013_LoadFinished - L0013_Load2)) ;size +L0013_Load2: + call ParseMap + + ;load in tiles used for sprite ships + ;bg tiles 1153-1242 to Bank 0 100-189 + ldio a,[curROMBank] + push af + + ld a,BANK(BGTiles1024) + call SetActiveROM + + xor a ;bank 0 + ld c,90 ;number of tiles to copy + ld de,$8000+1600 + ld hl,BGTiles1024 + 129*16 + call VMemCopy + + pop af + call SetActiveROM + ret + +L0013_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0013_Map: +INCBIN "Data/Levels/l0013_intro_ba1.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +ORIGINALTILE EQU 0 +VAR_HERO0_INDEX EQU 1 +VAR_HERO1_INDEX EQU 2 + +HULKINDEX EQU 73 +GRUNTINDEX EQU 74 +B12PURPLEINDEX EQU 75 +B12GREYINDEX EQU 76 +B12YELLOWINDEX EQU 77 + +STATE_INITIALDRAW EQU 0 +STATE_B12DROP_INIT EQU 1 +STATE_B12DROP EQU 2 +STATE_CROUTONDROP_INIT EQU 3 +STATE_CROUTONDROP EQU 4 +STATE_NORMAL EQU 5 + +L0013_Init: + DW ((L0013_InitFinished - L0013_Init2)) ;size +L0013_Init2: + ld a,BANK(moon_base_ba_gbm) + ld hl,moon_base_ba_gbm + call InitMusic + + ld hl,$0013 + call SetJoinMap + + ld hl,$0013 + call SetRespawnMap + + ld a,$13 + ld [respawnMap],a + ld [joinMap],a + ld a,$00 + ld [respawnMap+1],a + ld [joinMap+1],a + + ;get rid of existing monsters + ld a,HULKINDEX + call DeleteObjectsOfClassIndex + ld a,GRUNTINDEX + call DeleteObjectsOfClassIndex + ld a,B12PURPLEINDEX + call DeleteObjectsOfClassIndex + ld a,B12GREYINDEX + call DeleteObjectsOfClassIndex + ld a,B12YELLOWINDEX + call DeleteObjectsOfClassIndex + + ld a,[bgTileMap+48] + ld [levelVars+ORIGINALTILE],a + + ld bc,((GROUP_MONSTERB<<8) | GROUP_HERO) + ld a,1 ;make soldiers friends with hero + call SetFOF + + ldio a,[mapState] + cp STATE_NORMAL + jr z,.afterRemoveHeroes + + cp STATE_CROUTONDROP_INIT + jr z,.removeHeroes + cp STATE_CROUTONDROP + jr z,.removeHeroes + xor a + ld [canJoinMap],a + +.removeHeroes + ;remove heroes + ld a,[hero0_index] + call ((.heroInvisible - L0013_Init2) + levelCheckRAM) + + ld a,[hero1_index] + call ((.heroInvisible - L0013_Init2) + levelCheckRAM) + + ld a,1 + ld [heroesIdle],a +.afterRemoveHeroes + ret + +.heroInvisible + or a + ret z + ld c,a + call GetFirst + call GetFacing + ld c,a + call RemoveFromMap + ret + + +L0013_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +CROUTON_DROPY EQU 22 + +L0013_Check: + DW ((L0013_CheckFinished - L0013_Check2)) ;size +L0013_Check2: + ;animate the radar tower (index 48-53) based on timer/8 + ldio a,[updateTimer] + rrca ;(t/8)*6 == t/4*3 + and %00000110 + ld b,a + add b + add b + ld b,a + ld a,[levelVars+ORIGINALTILE] + add b + + ld hl,bgTileMap + 48 + ld c,6 +.animateTower + ld [hl+],a + inc a + dec c + jr nz,.animateTower + + ldio a,[mapState] + cp STATE_INITIALDRAW + jr nz,.checkB12DropInit + + ld a,STATE_B12DROP_INIT + ldio [mapState],a + ret + +.checkB12DropInit + cp STATE_B12DROP_INIT + jr nz,.checkB12Drop + +;ld a,STATE_NORMAL +;ldio [mapState],a +;ret + ;----b12 drop init-------------------------------------------- + ;set up mask table + call ((.clearMask - L0013_Check2) + levelCheckRAM) + call ((.createB12Ship - L0013_Check2) + levelCheckRAM) + call ((.fadeOut - L0013_Check2) + levelCheckRAM) + + ld a,STATE_B12DROP + ldio [mapState],a + ret + +.checkB12Drop + cp STATE_B12DROP + jr z,.inB12Drop + jp ((.checkCroutonDropInit-L0013_Check2)+levelCheckRAM) + +.inB12Drop + ;b12 dropship + ld bc,DROPSPEED1 + ld hl,$cdc0 + call ScrollMetaSprite + + call ((.animateB12Thrusters - L0013_Check2) + levelCheckRAM) + + ;remove ship if nose sprite is 192 + ;get the x position of the first sprite on third row + ld a,[$cdc0 + 16 + 1] + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + inc hl + ld a,[hl] + cp 192 + jr nz,.afterRemoveShip + + ld hl,$cdc0 + call FreeMetaSprite + ld a,STATE_CROUTONDROP_INIT + ldio [mapState],a + ld hl,((.shipFadeSound - L0013_Check2) + levelCheckRAM) + call PlaySound + call ((.fadeIn - L0013_Check2) + levelCheckRAM) + ld a,30 + ldio [mapState+1],a ;delay until next ship + ret + +.afterRemoveShip + ;drop soldiers when ship is at specific pixel positions + cp 48 + jr nz,.checkSoldierDrop2 + + ld c,B12YELLOWINDEX + ld hl,$d0ca + push hl + ld hl,$d0ea + push hl + ld hl,$d10a + push hl + jp ((.createSoldiers - L0013_Check2) + levelCheckRAM) + +.checkSoldierDrop2 + cp 40 + jr nz,.checkSoldierDrop3 + + ld c,B12YELLOWINDEX + ld hl,$d0c9 + push hl + ld hl,$d0e9 + push hl + ld hl,$d109 + push hl + jp ((.createSoldiers - L0013_Check2) + levelCheckRAM) + +.checkSoldierDrop3 + cp 32 + jr nz,.checkSoldierDrop4 + + ld c,B12PURPLEINDEX + ld hl,$d0c8 + push hl + ld hl,$d0e8 + push hl + ld hl,$d108 + push hl + jp ((.createSoldiers - L0013_Check2) + levelCheckRAM) + +.checkSoldierDrop4 + cp 24 + jr nz,.checkSoldierDrop5 + + ld c,B12PURPLEINDEX + ld hl,$d0c7 + push hl + ld hl,$d0e7 + push hl + ld hl,$d107 + push hl + jp ((.createSoldiers - L0013_Check2) + levelCheckRAM) + +.checkSoldierDrop5 + cp 16 + jr nz,.checkSoldierDrop6 + + ;make heroes visible + ld a,[hero0_index] + call ((.heroVisible - L0013_Check2) + levelCheckRAM) + + ld a,[hero1_index] + call ((.heroVisible - L0013_Check2) + levelCheckRAM) + + ret + +.heroVisible + or a + ret z + ld c,a + call GetFirst + ld b,METHOD_DRAW + call CallMethod + ret + + ;ld c,B12PURPLEINDEX + ;ld hl,$d0c6 + ;push hl + ;ld hl,$d0e6 + ;push hl + ;ld hl,$d106 + ;push hl + ;jp ((.createSoldiers - L0013_Check2) + levelCheckRAM) + +.checkSoldierDrop6 + ret + +.checkCroutonDropInit + cp STATE_CROUTONDROP_INIT + jr nz,.checkCroutonDrop + + ;crouton drop init + + ld hl,mapState+1 + ld a,[hl] + or a + jr z,.afterDelay + + dec [hl] + ret + +.afterDelay + ;set up mask table + call ((.clearMask - L0013_Check2) + levelCheckRAM) + call ((.createCroutonShip - L0013_Check2)+levelCheckRAM) + + ld hl,((.croutonShipApproachSound - L0013_Check2) + levelCheckRAM) + call PlaySound + call ((.fadeOut - L0013_Check2) + levelCheckRAM) + + ld a,STATE_CROUTONDROP + ldio [mapState],a + ret + +.checkCroutonDrop + cp STATE_CROUTONDROP + jr z,.inCroutonDrop + + ld a,1 ;can join now + ld [canJoinMap],a + + jp ((.checkNormal - L0013_Check2)+levelCheckRAM) + +.inCroutonDrop + ;crouton dropship + ld bc,DROPSPEED2 + ld hl,$cdc0 + call ScrollMetaSprite + + call ((.animateCroutonThrusters-L0013_Check2)+levelCheckRAM) + + ;remove ship if top sprite is 161 + ;get the y position of the first sprite + ld a,[$cdc0 + 1] + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + ld a,[hl] + cp 162 + jr nz,.afterRemoveCroutonShip + + ld hl,$cdc0 + call FreeMetaSprite + ld a,STATE_NORMAL + ldio [mapState],a + ld hl,((.croutonShipFadeSound - L0013_Check2) + levelCheckRAM) + call PlaySound + call ((.fadeIn - L0013_Check2) + levelCheckRAM) + ld hl,musicEnabled ;enable track 4 + set 3,[hl] + + ;everybody start fighting + ld bc,classDoNothing + ld de,classB12Soldier + call ChangeClass + + ld bc,classDoNothing2 + ld de,classCroutonGrunt + call ChangeClass + + ld bc,classDoNothing3 + ld de,classCroutonHulk + call ChangeClass + + ;let the heroes move + xor a + ld [heroesIdle],a + + ld a,STATE_NORMAL + ldio [mapState],a + ret + +.afterRemoveCroutonShip + ;place croutons under ship based on y position + cp CROUTON_DROPY + jr nz,.placeCroutons2 + + ld hl,$d06e + jp ((.placeCroutonSingleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons2 + cp CROUTON_DROPY + 8*1 + jr nz,.placeCroutons3 + + ld hl,$d08e + jp ((.placeCroutonSingleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons3 + cp CROUTON_DROPY + 8*2 + jr nz,.placeCroutons4 + + ld hl,$d0ae + jp ((.placeCroutonDoubleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons4 + cp CROUTON_DROPY + 8*4 + jr nz,.placeCroutons5 + + ld hl,$d0ee + jp ((.placeCroutonSingleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons5 + cp CROUTON_DROPY + 8*5 + jr nz,.placeCroutons6 + + ld hl,$d10e + jp ((.placeCroutonDoubleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons6 + cp CROUTON_DROPY + 8*7 + jr nz,.placeCroutons7 + + ld hl,$d14e + jp ((.placeCroutonSingleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons7 + cp CROUTON_DROPY + 8*8 + jr nz,.placeCroutons8 + + ld hl,$d16e + jp ((.placeCroutonDoubleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons8 + cp CROUTON_DROPY + 8*10 + jr nz,.placeCroutons9 + + ld hl,$d1ae + jp ((.placeCroutonSingleRow-L0013_Check2)+levelCheckRAM) + +.placeCroutons9 + cp CROUTON_DROPY + 8*11 + ret nz + + ld hl,$d1ce + jp ((.placeCroutonSingleRow-L0013_Check2)+levelCheckRAM) + +.checkNormal + ret + +.createSoldiers + push bc + ld bc,classDoNothing + ld de,classB12Soldier + call ChangeClass + pop bc + ld b,3 +.createSoldiersLoop + pop hl + push bc + call CreateObject + ld b,METHOD_INIT + call CallMethod + ld a,DIR_EAST + call SetFacing + ld b,METHOD_DRAW + call CallMethod + pop bc + dec b + jr nz,.createSoldiersLoop + ld bc,classB12Soldier + ld de,classDoNothing + call ChangeClass + ret + +.clearMask + ld hl,$cdc0 + ld c,49 + ld a,1 +.clearMaskLoop + ld [hl+],a + dec c + jr nz,.clearMaskLoop + ret + +.createB12Ship + ;clear spots in the mask + xor a + ld [$cdc0 + 0 + 1],a + ld [$cdc0 + 1 + 1],a + ld [$cdc0 + 7 + 1],a + ld [$cdc0 + 1*8+0 + 1],a + ld [$cdc0 + 1*8+7 + 1],a + ld [$cdc0 + 4*8+0 + 1],a + ld [$cdc0 + 4*8+7 + 1],a + ld [$cdc0 + 5*8+0 + 1],a + ld [$cdc0 + 5*8+1 + 1],a + ld [$cdc0 + 5*8+7 + 1],a + + ld a,192 ;190 + ld [metaSprite_x],a + ld a,44 + ld [metaSprite_y],a + + ld bc,$0806 ;width and height of metasprite + ld d,100 ;starts at pattern #100 + ld e,5 ;default attributes (palette) + ld hl,$cdc0 + call CreateMetaSpriteUsingMask + + ld hl,musicEnabled ;disable track 4 + res 3,[hl] + ld hl,((.shipApproachSound - L0013_Check2) + levelCheckRAM) + call PlaySound + ret + +.animateB12Thrusters + ;animate thrusters by setting or clearing +128 to each + ;thruster sprite's y position + ld hl,$cdc0 + 6 + 1 + push hl + ld hl,$cdc0 + 8 + 6 + 1 + push hl + ld hl,$cdc0 + 8*4 + 6 + 1 + push hl + ld hl,$cdc0 + 8*5 + 6 + 1 + push hl + + ld b,0 + ld a,[updateTimer] + bit 0,a + jr nz,.afterSetMask + ld b,%10000000 +.afterSetMask + ld c,4 +.thrusterChangeLoop + pop hl + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + ld a,[hl] + and %01111111 + or b + ld [hl],a + dec c + jr nz,.thrusterChangeLoop + ret + +.createCroutonShip + ;clear spots in the mask + xor a + ld [$cdc0 + 5*6+1 + 1],a + ld [$cdc0 + 5*6+4 + 1],a + ld [$cdc0 + 6*6+1 + 1],a + ld [$cdc0 + 6*6+2 + 1],a + ld [$cdc0 + 6*6+3 + 1],a + ld [$cdc0 + 6*6+4 + 1],a + + ld a,104 + ld [metaSprite_x],a + ld a,166 + ld [metaSprite_y],a + + ld bc,$0607 ;width and height of metasprite + ld d,$94 ;initial pattern number + ld e,6 ;default attributes (palette) + ld hl,$cdc0 + call CreateMetaSpriteUsingMask + ret + +.animateCroutonThrusters + ;animate thrusters by setting or clearing +128 to each + ;thruster sprite's y position + ld hl,$cdc0 + 1 + push hl + ld hl,$cdc0 + 5 + 1 + push hl + + ld b,0 + ld a,[updateTimer] + bit 0,a + jr nz,.afterSetCroutonMask + ld b,80 +.afterSetCroutonMask + ld c,2 +.croutonThrusterChangeLoop + pop hl + ld l,[hl] + ld h,((spriteOAMBuffer>>8) & $ff) + inc hl ;to sprite x pos + ld a,[hl] + cp 160 + jr c,.xposOriginal + sub 80 +.xposOriginal + add b + ld [hl],a + dec c + jr nz,.croutonThrusterChangeLoop + ret + +.placeCroutonSingleRow + ld b,2 + ld c,GRUNTINDEX + push hl + inc hl + push hl + jr .createCroutons + +.placeCroutonDoubleRow + push hl + ld bc,((.drowRetAddr-L0013_Check2)+levelCheckRAM) + push bc + jr .placeCroutonSingleRow +.drowRetAddr + pop hl + push hl + ld bc,32 + add hl,bc + ld bc,((.drowRetAddr2-L0013_Check2)+levelCheckRAM) + push bc + jr .placeCroutonSingleRow +.drowRetAddr2 + pop hl + + ld bc,((.afterCreateHulk-L0013_Check2)+levelCheckRAM) + push bc + inc hl + inc hl + push hl + + ld bc,classDoNothing3 + ld de,classCroutonHulk + call ChangeClass + + ld b,1 + ld c,HULKINDEX + jr .createCroutons +.afterCreateHulk + ld bc,classCroutonHulk + ld de,classDoNothing3 + call ChangeClass + ret + +.createCroutons + push bc + ld bc,classDoNothing2 + ld de,classCroutonGrunt + call ChangeClass + pop bc + pop hl + push bc + call CreateObject + ld b,METHOD_INIT + call CallMethod + ld a,DIR_WEST + call SetFacing + ld b,METHOD_DRAW + call CallMethod + pop bc + dec b + jr nz,.createCroutons + ld bc,classCroutonGrunt + ld de,classDoNothing2 + call ChangeClass + ret + +.fadeOut + ld a,FADEBANK + ld [$ff70],a + + ;set final bg palette to be all white w/black bg + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ld hl,fadeFinalPalette + call ((.setPaletteToWhiteBlackBG-L0013_Check2)+levelCheckRAM) + + ;set cur palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + ld a,120 + call FadeInit + ret + +.fadeIn + ld a,FADEBANK + ld [$ff70],a + + ;set cur palette to be all white w black bg + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld hl,fadeCurPalette + call ((.setPaletteToWhiteBlackBG-L0013_Check2)+levelCheckRAM) + + ;set final palette to be copy of current game palette + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ld a,30 + call FadeInit + ret + +.setPaletteToWhiteBlackBG + ld c,8 +.setBlackLoop + ld a,$ff + ld [hl+],a + ld a,$7f + ld [hl+],a + ld b,3 +.setWhiteLoop + ld a,$b5 + ld [hl+],a + ld a,$56 + ld [hl+],a + dec b + jr nz,.setWhiteLoop + dec c + jr nz,.setBlackLoop + ret + +.shipApproachSound + DB 4,$00,$0f,$81,$80 +.shipFadeSound + DB 4,$00,$f7,$81,$80 +.croutonShipApproachSound + DB 4,$00,$0f,$82,$80 +.croutonShipFadeSound + DB 4,$00,$f7,$82,$80 + +L0013_CheckFinished: +PRINTT "0013 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0013_LoadFinished - L0013_Load2) +PRINTT " / " +PRINTV (L0013_InitFinished - L0013_Init2) +PRINTT " / " +PRINTV (L0013_CheckFinished - L0013_Check2) +PRINTT "\n" + diff --git a/Source/l0014.asm b/Source/l0014.asm new file mode 100644 index 0000000..53f895f --- /dev/null +++ b/Source/l0014.asm @@ -0,0 +1,830 @@ +; l0014.asm +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0014Section",ROMX +;--------------------------------------------------------------------- + +L0014_Contents:: + DW L0014_Load + DW L0014_Init + DW L0014_Check + DW L0014_Map + +dialog: +haiku_warn_gtx: + INCBIN "Data/Dialog/intro_haiku/haiku_warn.gtx" +haiku_askOkay_gtx: + INCBIN "Data/Dialog/intro_haiku/haiku_askOkay.gtx" +quatrain_gtx: + INCBIN "Data/Dialog/intro_haiku/quatrain.gtx" +haiku_goAhead_gtx: + INCBIN "Data/Dialog/intro_haiku/haiku_goAhead.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0014_Load: + DW ((L0014_LoadFinished - L0014_Load2)) ;size +L0014_Load2: + call ParseMap + + ;load in tiles used for sprite ship + ;bg tiles 1386-1389 to Bank 0 100-103 + ldio a,[curROMBank] + push af + ld a,BANK(BGTiles1024) + call SetActiveROM + + xor a ;bank 0 + ld c,4 ;number of tiles to copy + ld de,$8000+1600 + ld hl,BGTiles1024 + (1386-1024)*16 + call VMemCopy + pop af + call SetActiveROM + ret + +L0014_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0014_Map: +INCBIN "Data/Levels/l0014_intro_haiku1.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +CRATERINDEX EQU 3 +RADARINDEX EQU 50 +CRACKMIDINDEX EQU 81 +CRACKTOPINDEX EQU 82 +QUATRAININDEX EQU 107 +SOLDIERINDEX EQU 108 +IAMBICINDEX EQU 109 +LAVAINDEX EQU 74 + +VAR_RADAR EQU 0 +VAR_CRACK_TOP EQU 1 +VAR_CRACK_BOTTOM EQU 2 +VAR_DELAY EQU 3 +VAR_LAVA EQU 4 +VAR_METASPRITE EQU 5 ;5-9 + +STATE_CROSSCRACK EQU 0 +STATE_BOMBER1 EQU 2 +STATE_BOMBER2 EQU 3 +STATE_LAVA EQU 4 +STATE_LAVA2 EQU 5 +STATE_LAVA3 EQU 6 +STATE_DIALOG2_1 EQU 7 +STATE_DIALOG2_2 EQU 8 +STATE_DIALOG2_3 EQU 9 +STATE_DIALOG_WAIT EQU 10 +STATE_NORMAL EQU 11 + + +L0014_Init: + DW ((L0014_InitFinished - L0014_Init2)) ;size +L0014_Init2: +;ld a,STATE_NORMAL +;ldio [mapState],a + + ld hl,$0014 + call SetJoinMap + + ld hl,$0014 + call SetRespawnMap + + call SetPressBDialog + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(moon_base_haiku_gbm) + ld hl,moon_base_haiku_gbm + call InitMusic + + ld a,[bgTileMap+RADARINDEX] + ld [levelVars+VAR_RADAR],a + + ld a,[bgTileMap+LAVAINDEX] + ld [levelVars+VAR_LAVA],a + + ;----soldiers do nothing + ld bc,classB12Soldier + ld de,classDoNothing + call ChangeClass + + ;fill in hole at $d190, $d191 if not occupied + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d190 + ld a,[hl] + or a + jr nz,.firstFilled + ld [hl],45 +.firstFilled + inc hl + ld a,[hl] + or a + jr nz,.secondFilled + ld [hl],46 +.secondFilled + + ld a,10 + ld [camera_i],a + ld [camera_j],a + ld a,1 + ld [mapLeft],a + ld a,1 + ld [mapTop],a + + ld a,10 + ld [levelVars + VAR_CRACK_TOP],a + inc a + ld [levelVars + VAR_CRACK_BOTTOM],a + + ldio a,[mapState] + cp STATE_CROSSCRACK + jr nz,.checkBomber1 + + ld a,1 + ld [heroesIdle],a + call ((.createCompanions-L0014_Init2)+levelCheckRAM) + jr .createBomber1 + +.checkBomber1 + cp STATE_BOMBER1 + jr nz,.checkBomber2 + + ld a,1 + ld [heroesIdle],a + +.createBomber1 + ld bc,$0202 + ld d,100 + ld e,6 + ld hl,levelVars+VAR_METASPRITE + ld a,220 + ld [metaSprite_x],a + ld a,52 + ld [metaSprite_y],a + call CreateMetaSprite + ret + +.checkBomber2 + cp STATE_BOMBER2 + jr nz,.checkLava1 + + ld a,1 + ld [heroesIdle],a + call ((.createCompanions-L0014_Init2)+levelCheckRAM) + ld bc,$0202 + ld d,100 + ld e,6 + ld hl,levelVars+VAR_METASPRITE + ld a,220 + ld [metaSprite_x],a + ld a,88 + ld [metaSprite_y],a + call CreateMetaSprite + ret + +.checkLava1 + ;cp STATE_LAVA1 + ;jr nz,.checkLava2 + +.checkLava2 + ;cp STATE_LAVA2 + ;jr nz,.checkLava3 + +.checkLava3 + ;cp STATE_LAVA3 + cp STATE_NORMAL + jr z,.checkNormal + + ld a,1 + ld [heroesIdle],a + +.checkNormal + ld a,STATE_NORMAL + ldio [mapState],a ;be sure + + ld bc,$1614 + ld de,0 + ld hl,$2c00 + call BlitMap + call SetBGSpecialFlags + ret + +.createCompanions + ld c,QUATRAININDEX + ld hl,$d48d + call CreateInitAndDrawObject + ld hl,$d306 + call SetActorDestLoc + ld c,IAMBICINDEX + ld hl,$d50d + call CreateInitAndDrawObject + ld hl,$d387 + call SetActorDestLoc + ld bc,classQuatrain + ld de,classActor + call ChangeClass + ret + +L0014_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0014_Check: + DW ((L0014_CheckFinished - L0014_Check2)) ;size +L0014_Check2: + + ;if any soldiers are killed change them to class B12 Soldier + ld c,SOLDIERINDEX + call GetFirst + or a + jr z,.animateRadar + + call GetNextObject + or a + jr nz,.animateRadar + +.soldierDefend + ld bc,classDoNothing + ld de,classB12Soldier + call ChangeClass + + ld bc,(GROUP_HERO<<8) | GROUP_MONSTERB + xor a ;enemies + call SetFOF + +.animateRadar + ;animate the radar tower (index 47-52) based on timer/8 + ldio a,[updateTimer] + rrca ;(t/8)*6 == t/4*3 + and %00000110 + ld b,a + add b + add b + ld b,a + ld a,[levelVars+VAR_RADAR] + add b + + ld hl,bgTileMap + RADARINDEX + ld c,6 +.animateTower + ld [hl+],a + inc a + dec c + jr nz,.animateTower + + ;animate the lava on updateTimer / 16 + ldio a,[updateTimer] + rlca + swap a + and %00000011 + ld b,a + ld a,[levelVars+VAR_LAVA] + add b + ld [bgTileMap + LAVAINDEX],a + + ldio a,[mapState] + cp STATE_NORMAL + jr nz,.checkDialogWait + + ;normal + xor a + ld [heroesIdle],a + + ret + +.checkDialogWait + cp STATE_DIALOG_WAIT + jr nz,.checkCrossCrack + + call CheckDialogContinue + or a + ret z + + ldio a,[mapState+1] + ldio [mapState],a + ret + +.checkCrossCrack + cp STATE_CROSSCRACK + jr nz,.checkBomber1 + + ld c,QUATRAININDEX + call GetFirst + call IsActorAtDest + or a + ret z + + ld c,IAMBICINDEX + call GetFirst + call IsActorAtDest + or a + ret z + + ld de,((.setBomber1-L0014_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + ld de,haiku_warn_gtx + call ShowDialogAtBottomNoWait + + ld a,STATE_DIALOG_WAIT + ldio [mapState],a + ld a,STATE_BOMBER1 + ldio [mapState+1],a + ret + +.checkDialog2 + cp STATE_DIALOG2_1 + jr nz,.checkBomber1 + + ret + +.setBomber1 + call ClearDialog + ld a,STATE_BOMBER1 + ldio [mapState],a + +.checkBomber1 + cp STATE_BOMBER1 + jr nz,.checkBomber2 + + ld de,0 + call SetDialogSkip + + ;bomber1 + ld hl,levelVars+VAR_METASPRITE ;bomber metasprite + ld bc,$fc00 ;x -= 4 + call ScrollMetaSprite + + ld a,[levelVars+VAR_METASPRITE+1] ;get x pos of first sprite + ld h,((spriteOAMBuffer>>8) & $ff) + ld l,a + inc hl + ld a,[hl] + cp 224 + jr nz,.bomber1StillActive + + ;reset bomber to second fly-by position + ld bc,$dc58 + ld hl,levelVars+VAR_METASPRITE + call SetMetaSpritePos + ld a,STATE_BOMBER2 + ldio [mapState],a + +.bomber1StillActive + cp 188 + jr nz,.afterBombSound1 + + ld hl,((.bombSound-L0014_Check2)+levelCheckRAM) + call PlaySound +.afterBombSound1 + + cp 88 + jr nz,.b1CheckPos2 + + ld a,20 + ld b,8 + call SetupFadeFromSaturated + call ((.explosion1 - L0014_Check2) + levelCheckRAM) + + ;create a 2x2 crater + ld a,MAPBANK + ldio [$ff70],a + + ld hl,$d30d + ld a,CRATERINDEX + ld [hl+],a + inc a + ld [hl+],a + inc a + ld hl,$d38d + ld [hl+],a + inc a + ld [hl+],a + ret + +.b1CheckPos2 + cp 64 + ret nz + call ((.explosion1 - L0014_Check2) + levelCheckRAM) + ld c,QUATRAININDEX + call GetFirst + ld hl,$d586 + call SetActorDestLoc + ld c,IAMBICINDEX + call GetFirst + ld hl,$d607 + call SetActorDestLoc + ret + + +.checkBomber2 + cp STATE_BOMBER2 + jr nz,.checkLava + + ;bomber2 + ld hl,levelVars+VAR_METASPRITE ;bomber metasprite + ld bc,$fc00 ;x -= 4 + call ScrollMetaSprite + + ld a,[levelVars+VAR_METASPRITE+1] ;get x pos of first sprite + ld h,((spriteOAMBuffer>>8) & $ff) + ld l,a + inc hl + ld a,[hl] + cp 224 + jr nz,.bomber2StillActive + + ;kill bomber + ld hl,levelVars+VAR_METASPRITE + call FreeMetaSprite + + ld c,QUATRAININDEX + call GetFirst + ld hl,$d888 ;run in circles + call SetActorDestLoc + ld c,IAMBICINDEX + call GetFirst + ld hl,$d888 + call SetActorDestLoc + + ld a,STATE_LAVA + ldio [mapState],a + +.bomber2StillActive + cp 144 + jr nz,.afterBombSound2 + ld hl,((.bombSound-L0014_Check2)+levelCheckRAM) + call PlaySound +.afterBombSound2 + + cp 44 + jr nz,.checkPos20 + + ld a,20 + ld b,8 + call SetupFadeFromSaturated + call ((.explosion2 - L0014_Check2) + levelCheckRAM) + call ((.drawCrack1 - L0014_Check2) + levelCheckRAM) + ret + +.checkPos20 + cp 20 + ret nz + call ((.explosion2 - L0014_Check2) + levelCheckRAM) + ld c,QUATRAININDEX + call GetFirst + ld hl,$d306 + call SetActorDestLoc + ld c,IAMBICINDEX + call GetFirst + ld hl,$d387 + call SetActorDestLoc + ret + +.checkLava + cp STATE_LAVA + jr nz,.checkLava2 + + ;extend crack to top and bottom + ld hl,levelVars + VAR_DELAY + dec [hl] + ret nz + + ld a,[updateTimer] + and %1000 + jr nz,.afterQuakeSound1 + ld hl,((.earthquakeSound-L0014_Check2)+levelCheckRAM) + call PlaySound +.afterQuakeSound1 + + ld a,[levelVars + VAR_CRACK_TOP] + or a + jr nz,.crackNotDone + + ld a,[levelVars + VAR_CRACK_BOTTOM] + cp 19 + jr nz,.crackNotDone + + ld a,30 + ld [levelVars + VAR_DELAY],a + + ld a,STATE_LAVA2 ;crack has extended + ldio [mapState],a + ret + +.crackNotDone + ld a,[levelVars + VAR_CRACK_TOP] + or a + jr z,.afterCheckTop + + dec a + ld [levelVars + VAR_CRACK_TOP],a + +.afterCheckTop + ld a,[levelVars + VAR_CRACK_BOTTOM] + cp 19 + jr z,.afterCheckBottom + + inc a + ld [levelVars + VAR_CRACK_BOTTOM],a + +.afterCheckBottom + call ((.drawCrack1 - L0014_Check2) + levelCheckRAM) + ret + +.checkLava2 + cp STATE_LAVA2 + jr nz,.checkLava3 + + ld a,10 + ldio [jiggleDuration],a + + ld a,[updateTimer] + and %1000 + jr nz,.afterQuakeSound2 + ld hl,((.earthquakeSound-L0014_Check2)+levelCheckRAM) + call PlaySound +.afterQuakeSound2 + + ld hl,levelVars + VAR_DELAY + dec [hl] + ret nz + + ;blit the second stage of lava to the screen + call ((.scootObjects - L0014_Check2) + levelCheckRAM) + ld bc,$1614 + ld de,0 + ld hl,$1600 + call BlitMap + call SetBGSpecialFlags + + ld a,30 + ld [levelVars + VAR_DELAY],a + + ld a,STATE_LAVA3 + ldio [mapState],a + + ret + +.checkLava3 + cp STATE_LAVA3 + jr nz,.checkDialog2_1 + + ld a,10 + ldio [jiggleDuration],a + + ld a,[updateTimer] + and %1000 + jr nz,.afterQuakeSound3 + ld hl,((.earthquakeSound-L0014_Check2)+levelCheckRAM) + call PlaySound +.afterQuakeSound3 + + ld hl,levelVars + VAR_DELAY + dec [hl] + ret nz + + ;blit the third stage of lava to the screen + call ((.scootObjects - L0014_Check2) + levelCheckRAM) + ld bc,$1614 + ld de,0 + ld hl,$2c00 + call BlitMap + call SetBGSpecialFlags + + ld c,QUATRAININDEX + call GetFirst + ld hl,$d403 + call SetActorDestLoc + ld c,IAMBICINDEX + call GetFirst + ld hl,$d502 + call SetActorDestLoc + + ld a,30 + ld [levelVars + VAR_DELAY],a + + ld a,STATE_DIALOG2_1 + ldio [mapState],a + + ret + +.checkDialog2_1 + cp STATE_DIALOG2_1 + jr nz,.checkDialog2_2 + + ld de,((.setNormal-L0014_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + ld de,haiku_askOkay_gtx + call ShowDialogAtBottomNoWait + + ld a,STATE_DIALOG2_2 + ldio [mapState+1],a + ld a,STATE_DIALOG_WAIT + ldio [mapState],a + ret + +.checkDialog2_2 + cp STATE_DIALOG2_2 + jr nz,.checkDialog2_3 + + call SetSpeakerToFirstHero + ld de,quatrain_gtx + ld c,QUATRAININDEX + call ShowDialogAtTopNoWait + + ld a,STATE_DIALOG2_3 + ldio [mapState+1],a + ld a,STATE_DIALOG_WAIT + ldio [mapState],a + ret + +.checkDialog2_3 + call SetSpeakerToFirstHero + ld de,haiku_goAhead_gtx + call ShowDialogAtBottomNoWait + + ld a,STATE_NORMAL + ldio [mapState+1],a + ld a,STATE_DIALOG_WAIT + ldio [mapState],a + ret + +.setNormal + call ClearDialog + ld a,STATE_NORMAL + ldio [mapState],a + ret + +.explosion1 + ;drop the bomb + ld bc,$0404 + ld de,$0a01 + ld hl,$d28c + call CreateBigExplosion + ld hl,((.bigExplosionSound-L0014_Check2)+levelCheckRAM) + call PlaySound + + ld a,10 + ldio [jiggleDuration],a + ret + +.explosion2 + ;drop the bomb + ld bc,$0404 + ld de,$0a01 + ld hl,$d488 + call CreateBigExplosion + ld hl,((.bigExplosionSound-L0014_Check2)+levelCheckRAM) + call PlaySound + + ld a,10 + ldio [jiggleDuration],a + ret + +.drawCrack1 + call ((.drawCrackTop - L0014_Check2) + levelCheckRAM) + call ((.drawCrackMid1 - L0014_Check2) + levelCheckRAM) + call ((.drawCrackBottom - L0014_Check2) + levelCheckRAM) + ld a,3 + ld [levelVars + VAR_DELAY],a + ld a,6 + ldio [jiggleDuration],a + ret + +.drawCrackTop + ld h,9 ;x coord + ld a,[levelVars + VAR_CRACK_TOP] + ld l,a + call ConvertXYToLocHL + + ld a,MAPBANK + ldio [$ff70],a + + ld a,CRACKTOPINDEX + ld [hl+],a + inc a + ld [hl],a + ret + +.drawCrackMid1 + ld h,9 ;x coord + ld a,[levelVars + VAR_CRACK_TOP] + ld l,a + ld c,a + inc l + call ConvertXYToLocHL + + ld a,[levelVars + VAR_CRACK_BOTTOM] + sub c + ret z + dec a + ret z + ld c,a ;c is (bottom_y - top_y) - 1 (is >= 0) + + ld a,MAPBANK + ldio [$ff70],a + ld de,128 ;level pitch + +.drawMid1Loop + ld a,CRACKMIDINDEX + ld [hl+],a + dec a + ld [hl-],a + add hl,de + dec c + jr nz,.drawMid1Loop + ret + +.drawCrackBottom + ld h,9 ;x coord + ld a,[levelVars + VAR_CRACK_BOTTOM] + ld l,a + call ConvertXYToLocHL + + ld a,MAPBANK + ldio [$ff70],a + + ld a,CRACKTOPINDEX + 2 + ld [hl+],a + inc a + ld [hl],a + ret + +.scootObjects + ;scoots everyone < half left, >half right + ;loop through 255 objects + ld a,OBJLISTBANK + ldio [$ff70],a + ld b,((objExists>>8) & $ff) + ld c,1 +.scootLoop + ld a,[bc] + or a + jr z,.nextObj + + ld a,c + push bc + call IndexToPointerDE + call GetFacing + ld c,a + call RemoveFromMap + call GetCurLocation + call ConvertLocHLToXY + ld a,h ;x coord + cp 9 ;< half? + jr nc,.greaterThanHalf + dec h + jr .setNewLoc +.greaterThanHalf + inc h +.setNewLoc + call ConvertXYToLocHL + call SetCurLocation + call GetClass + ld b,METHOD_DRAW + call CallMethod + + ld a,OBJLISTBANK + ldio [$ff70],a + pop bc +.nextObj + inc c + jr nz,.scootLoop + ret + +.bombSound + DB 1,$1f,$80,$f5,$80,$86 + +.bigExplosionSound + DB 4,$00,$f3,$81,$80 + +.earthquakeSound + DB 4,$00,$f7,$67,$80 + + +L0014_CheckFinished: +PRINTT "0014 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0014_LoadFinished - L0014_Load2) +PRINTT " / " +PRINTV (L0014_InitFinished - L0014_Init2) +PRINTT " / " +PRINTV (L0014_CheckFinished - L0014_Check2) +PRINTT "\n" + diff --git a/Source/l0015.asm b/Source/l0015.asm new file mode 100644 index 0000000..c73eac0 --- /dev/null +++ b/Source/l0015.asm @@ -0,0 +1,342 @@ +; l0015.asm +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0015Section",ROMX +;--------------------------------------------------------------------- + +L0015_Contents:: + DW L0015_Load + DW L0015_Init + DW L0015_Check + DW L0015_Map + + +dialog: +soldier_how_gtx: + INCBIN "Data/Dialog/intro_bs/soldier_how.gtx" + +bs_likeButter_gtx: + INCBIN "Data/Dialog/intro_bs/bs_likeButter.gtx" + +soldier_yellow_gtx: + INCBIN "Data/Dialog/intro_bs/soldier_yellow.gtx" + +bs_slippery_gtx: + INCBIN "Data/Dialog/intro_bs/bs_slippery.gtx" + +guard_freeze_gtx: + INCBIN "Data/Dialog/intro_bs/guard_freeze.gtx" + +bs_actually_gtx: + INCBIN "Data/Dialog/intro_bs/bs_actually.gtx" + +guard_moveAlong_gtx: + INCBIN "Data/Dialog/intro_bs/guard_moveAlong.gtx" + + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0015_Load: + DW ((L0015_LoadFinished - L0015_Load2)) ;size +L0015_Load2: + call ParseMap + ret + +L0015_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0015_Map: +INCBIN "Data/Levels/l0015_intro_bs1.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +VAR_RADAR EQU 0 +VAR_SPEAKINGHERO EQU 1 + +RADARINDEX EQU 52 +GRUNTINDEX EQU 87 +B12SOLDIERINDEX EQU 88 + +STATE_INITIALDRAW EQU 0 +STATE_TALKSOLDIER1 EQU 1 +STATE_TALKSOLDIER2 EQU 2 +STATE_TALKSOLDIER3 EQU 3 +STATE_TALKSOLDIER4 EQU 4 +STATE_TALKGUARD1 EQU 5 +STATE_TALKGUARD2 EQU 6 +STATE_TALKGUARD3 EQU 7 +STATE_NORMAL EQU 8 +STATE_WAIT_DIALOG EQU 9 + +L0015_Init: + DW ((L0015_InitFinished - L0015_Init2)) ;size +L0015_Init2: + ld hl,$0015 + call SetJoinMap + + ld hl,$0015 + call SetRespawnMap + + ld a,BANK(bs_gbm) + ld hl,bs_gbm + call InitMusic + + call SetPressBDialog + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,[bgTileMap+RADARINDEX] + ld [levelVars+VAR_RADAR],a + + ld bc,classB12Soldier + ld de,classDoNothing + call ChangeClass + + ld bc,classCroutonGrunt + ld de,classDoNothing + call ChangeClass + ret + +L0015_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0015_Check: + DW ((L0015_CheckFinished - L0015_Check2)) ;size +L0015_Check2: + call ((.animateRadar-L0015_Check2)+levelCheckRAM) + + ldio a,[mapState] + cp STATE_NORMAL + jr nz,.checkInitialDraw + + ret + +.checkInitialDraw + cp STATE_INITIALDRAW + jr nz,.checkTalkSoldier1 + + ld a,STATE_TALKSOLDIER1 + ldio [mapState],a + ret + +.checkTalkSoldier1 + cp STATE_TALKSOLDIER1 + jr nz,.checkTalkSoldier2 + + call SetSpeakerToFirstHero + + ld de,soldier_how_gtx + ld c,B12SOLDIERINDEX + call ShowDialogAtTopNoWait + + ld de,((.endTalkSoldier-L0015_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,1 + ld [heroesIdle],a + ld a,STATE_TALKSOLDIER2 + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + ret + +.checkTalkSoldier2 + cp STATE_TALKSOLDIER2 + jr nz,.checkTalkSoldier3 + + call SetSpeakerToFirstHero + ld de,bs_likeButter_gtx + call ShowDialogAtBottomNoWait + + ld a,1 + ld [heroesIdle],a + ld a,STATE_TALKSOLDIER3 + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + ret + +.checkTalkSoldier3 + cp STATE_TALKSOLDIER3 + jr nz,.checkTalkSoldier4 + + ld de,soldier_yellow_gtx + ld c,B12SOLDIERINDEX + call ShowDialogAtTopNoWait + + ld a,1 + ld [heroesIdle],a + ld a,STATE_TALKSOLDIER4 + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + ret + +.checkTalkSoldier4 + cp STATE_TALKSOLDIER4 + jr nz,.checkTalkGuard1 + + call SetSpeakerToFirstHero + ld de,bs_slippery_gtx + call ShowDialogAtBottomNoWait + + ld a,1 + ld [heroesIdle],a + ld a,STATE_TALKGUARD1 + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + ret + +.endTalkSoldier + xor a + ld [heroesIdle],a + ld [allIdle],a + ld de,0 + call SetDialogSkip + call ClearDialog + ld a,STATE_TALKGUARD1 + ldio [mapState],a + ret + +.checkTalkGuard1 + cp STATE_TALKGUARD1 + jr nz,.checkTalkGuard2 + + ld a,[hero0_index] + call ((.checkHeroTalkToGuard-L0015_Check2)+levelCheckRAM) + ld a,[hero1_index] + call ((.checkHeroTalkToGuard-L0015_Check2)+levelCheckRAM) + ret + +.checkTalkGuard2 + cp STATE_TALKGUARD2 + jr nz,.checkTalkGuard3 + + ld a,[levelVars + VAR_SPEAKINGHERO] + ld c,a + call SetSpeakerFromHeroIndex + ld de,bs_actually_gtx + call ShowDialogAtBottomNoWait + + ld a,1 + ld [heroesIdle],a + ld a,STATE_TALKGUARD3 + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + + ret + +.checkTalkGuard3 + cp STATE_TALKGUARD3 + jr nz,.checkWaitDialog + + ld c,GRUNTINDEX + ld de,guard_moveAlong_gtx + call ShowDialogAtTopNoWait + + ld a,1 + ld [heroesIdle],a + ld a,STATE_NORMAL + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + + ret + +.endTalkGuard + ld de,0 + call SetDialogSkip + xor a + ld [heroesIdle],a + ld [allIdle],a + call ClearDialog + ld a,STATE_NORMAL + ldio [mapState],a + ret + +.checkWaitDialog + call CheckDialogContinue + or a + ret z + + xor a + ld [heroesIdle],a + + ldio a,[mapState+1] + ldio [mapState],a + ret + + ret + +.animateRadar + ;animate the radar tower (index 47-52) based on timer/8 + ldio a,[updateTimer] + rrca ;(t/8)*6 == t/4*3 + and %00000110 + ld b,a + add b + add b + ld b,a + ld a,[levelVars+VAR_RADAR] + add b + + ld hl,bgTileMap + RADARINDEX + ld c,6 +.animateTower + ld [hl+],a + inc a + dec c + jr nz,.animateTower + ret + +.checkHeroTalkToGuard + or a + ret z + ld c,a + call GetFirst + call GetCurZone + cp 2 + ret nz + + ld a,c + ld [levelVars + VAR_SPEAKINGHERO],a + call SetSpeakerFromHeroIndex + + ld de,guard_freeze_gtx + ld c,GRUNTINDEX + call ShowDialogAtTopNoWait + + pop bc ;adjust stack pos for dialog skip + ld de,((.endTalkGuard-L0015_Check2)+levelCheckRAM) + call SetDialogSkip + push bc + + ld a,1 + ld [heroesIdle],a + ld a,STATE_TALKGUARD2 + ldio [mapState+1],a + ld a,STATE_WAIT_DIALOG + ldio [mapState],a + ret + +L0015_CheckFinished: +PRINTT "0015 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0015_LoadFinished - L0015_Load2) +PRINTT " / " +PRINTV (L0015_InitFinished - L0015_Init2) +PRINTT " / " +PRINTV (L0015_CheckFinished - L0015_Check2) +PRINTT "\n" + diff --git a/Source/l0103.asm b/Source/l0103.asm new file mode 100644 index 0000000..2e5fc85 --- /dev/null +++ b/Source/l0103.asm @@ -0,0 +1,283 @@ +; l0103.asm east farm +; Generated 08.27.2000 by mlevel +; Modified 08.27.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +WATERINDEX EQU 12 +VAR_WATER EQU 0 + +STATE_NORMAL EQU 1 +STATE_TALKED1 EQU 2 +STATE_TALKED2 EQU 3 + + + +;--------------------------------------------------------------------- +SECTION "Level0103Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0103_shootinfast_gtx: + INCBIN "Data/Dialog/talk/l0103_shootinfast.gtx" + +l0103_wrangling_gtx: + INCBIN "Data/Dialog/talk/l0103_wrangling.gtx" + +l0103_bs_where_gtx: + INCBIN "Data/Dialog/talk/l0103_bs_where.gtx" + +l0103_forest_gtx: + INCBIN "Data/Dialog/talk/l0103_forest.gtx" + +l0103_bs_figures_gtx: + INCBIN "Data/Dialog/talk/l0103_bs_figures.gtx" + +l0103_learn_gtx: + INCBIN "Data/Dialog/talk/l0103_learn.gtx" + +l0103_honey_gtx: + INCBIN "Data/Dialog/talk/l0103_honey.gtx" + +l0103_hero_honeyresponse_gtx: + INCBIN "Data/Dialog/talk/l0103_hero_honeyresponse.gtx" + +l0103_gethoney_gtx: + INCBIN "Data/Dialog/talk/l0103_gethoney.gtx" + +l0103_snakebitekit_gtx: + INCBIN "Data/Dialog/talk/l0103_snakebitekit.gtx" + +l0103_seenyoubefore_gtx: + INCBIN "Data/Dialog/talk/l0103_seenyoubefore.gtx" + + +L0103_Contents:: + DW L0103_Load + DW L0103_Init + DW L0103_Check + DW L0103_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0103_Load: + DW ((L0103_LoadFinished - L0103_Load2)) ;size +L0103_Load2: + call ParseMap + ret + +L0103_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0103_Map: +INCBIN "Data/Levels/l0103_green.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0103_Init: + DW ((L0103_InitFinished - L0103_Init2)) ;size +L0103_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + STDSETUPDIALOG + + ld bc,classCowboy + ld de,classCowboyTalker + call ChangeFirstClass + + ld a,STATE_NORMAL + ldio [mapState],a + + ld a,BANK(cowboy_gbm) + ld hl,cowboy_gbm + call InitMusic + + ret + +L0103_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0103_Check: + DW ((L0103_CheckFinished - L0103_Check2)) ;size +L0103_Check2: + call ((.animateWater-L0103_Check2)+levelCheckRAM) + call ((.checkDialog-L0103_Check2)+levelCheckRAM) + ret + +.checkDialog + ldio a,[mapState] + cp STATE_TALKED2 + ret nc + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + call MakeIdle + + ldio a,[mapState] + cp STATE_TALKED1 + jr z,.talkAboutHoney + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ld a,HERO_BS_FLAG + call ClassIndexIsHeroType + jr z,.shortVersion + + ld bc,ITEM_BSSHOOTFAST + call HasInventoryItem + jr nz,.shortVersion + + ld bc,ITEM_WRANGLING + call HasInventoryItem + jr nz,.giveUpgrade + + ;About wrangling iron + ld de,((.afterUpgradeDialog-L0103_Check2)+levelCheckRAM) + call SetDialogSkip + + ld de,l0103_wrangling_gtx + call ShowDialogNPC + + ;Where's the wrangling iron? + ld de,l0103_bs_where_gtx + call ShowDialogHero + + ;under a bee hive + ld de,l0103_forest_gtx + call ShowDialogNPC + + ;Typical + ld de,l0103_bs_figures_gtx + call ShowDialogHero + jr .afterUpgradeDialog + +.giveUpgrade + ld de,((.afterLearnDialog-L0103_Check2)+levelCheckRAM) + call SetDialogSkip + + ;How to shoot fast + ld de,l0103_learn_gtx + call ShowDialogNPC + +.afterLearnDialog + ld hl,bsUpgrades + set UPGRADE_BSSHOOTFAST,[hl] + + ld bc,ITEM_BSSHOOTFAST + call AddInventoryItem + + ld bc,ITEM_WRANGLING + call RemoveInventoryItem + jr .afterUpgradeDialog + +.shortVersion + ld de,((.afterUpgradeDialog-L0103_Check2)+levelCheckRAM) + call SetDialogSkip + + ;"Jeb is my name" + ld de,l0103_shootinfast_gtx + call ShowDialogNPC + +.afterUpgradeDialog + call ClearDialog + call ClearDialogSkipForward + + call MakeNonIdle + ld a,STATE_TALKED1 + ldio [mapState],a + + xor a + ld [dialogNPC_speakerIndex],a + ret + +.talkAboutHoney + ld bc,ITEM_SNAKEBITEKIT + call HasInventoryItem + jr nz,.hasSnakeBiteKit + + ld bc,ITEM_HONEY + call HasInventoryItem + jr nz,.hasHoney + + ld de,((.afterHoneyDialog-L0103_Check2)+levelCheckRAM) + call SetDialogSkip + + ;I love honey + ld de,l0103_honey_gtx + call ShowDialogNPC + + ;Hero's response to honey lover + ld de,l0103_hero_honeyresponse_gtx + call ShowDialogHero + + ;Get me some honey + ld de,l0103_gethoney_gtx + call ShowDialogNPC + jr .afterHoneyDialog + +.hasSnakeBiteKit + ld de,((.afterHoneyDialog-L0103_Check2)+levelCheckRAM) + call SetDialogSkip + + ;seen you before + ld de,l0103_seenyoubefore_gtx + call ShowDialogNPC + jr .afterHoneyDialog + +.hasHoney + ld de,((.giveKit-L0103_Check2)+levelCheckRAM) + call SetDialogSkip + + ;give snake bite kit + ld de,l0103_snakebitekit_gtx + call ShowDialogNPC + +.giveKit + ld bc,ITEM_HONEY + call RemoveInventoryItem + + ld bc,ITEM_SNAKEBITEKIT + call AddInventoryItem + +.afterHoneyDialog + call ClearDialog + call ClearDialogSkipForward + + call MakeNonIdle + ld a,STATE_TALKED2 + ldio [mapState],a + + xor a + ld [dialogNPC_speakerIndex],a + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0103_CheckFinished: +PRINTT "0103 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0103_LoadFinished - L0103_Load2) +PRINTT " / " +PRINTV (L0103_InitFinished - L0103_Init2) +PRINTT " / " +PRINTV (L0103_CheckFinished - L0103_Check2) +PRINTT "\n" + diff --git a/Source/l0104.asm b/Source/l0104.asm new file mode 100644 index 0000000..a712498 --- /dev/null +++ b/Source/l0104.asm @@ -0,0 +1,62 @@ +; l0104.asm Spring +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0104Section",ROMX +;--------------------------------------------------------------------- + +L0104_Contents:: + DW L0104_Load + DW L0104_Init + DW L0104_Check + DW L0104_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0104_Load: + DW ((L0104_LoadFinished - L0104_Load2)) ;size +L0104_Load2: + call ParseMap + ret + +L0104_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0104_Map: +INCBIN "Data/Levels/L0104_spring.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0104_Init: + DW ((L0104_InitFinished - L0104_Init2)) ;size +L0104_Init2: + call UseAlternatePalette + ld a,ENV_RAIN + call SetEnvEffect + ret + +L0104_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0104_Check: + DW ((L0104_CheckFinished - L0104_Check2)) ;size +L0104_Check2: + ret + +L0104_CheckFinished: +PRINTT "0104 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0104_LoadFinished - L0104_Load2) +PRINTT " / " +PRINTV (L0104_InitFinished - L0104_Init2) +PRINTT " / " +PRINTV (L0104_CheckFinished - L0104_Check2) +PRINTT "\n" + diff --git a/Source/l0105.asm b/Source/l0105.asm new file mode 100644 index 0000000..00906fa --- /dev/null +++ b/Source/l0105.asm @@ -0,0 +1,107 @@ +;level0105.asm rainy forest w/hive & wrangling iron +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +HIVE_INDEX EQU 16 + +STATE_NORMAL EQU 1 +STATE_HIVEDESTROYED EQU 2 + +;--------------------------------------------------------------------- +SECTION "LevelsSection0105",ROMX +;--------------------------------------------------------------------- + +dialog: +l0105_hero_wrangling_gtx: + INCBIN "Data/Dialog/talk/l0105_hero_wrangling.gtx" + +L0105_Contents:: + DW L0105_Load + DW L0105_Init + DW L0105_Check + DW L0105_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0105_Load: + DW ((L0105_LoadFinished - L0105_Load2)) ;size +L0105_Load2: + call ParseMap + ret + +L0105_LoadFinished: + +L0105_Map: +INCBIN "Data/Levels/l0105_path.lvl" + +;gtx_intro: INCBIN "Data/Dialog/Landing/intro.gtx" +;gtx_intro2: INCBIN "Data/Dialog/Landing/intro2.gtx" +;gtx_finished: INCBIN "Data/Dialog/Landing/finished.gtx" +;gtx_finished2: INCBIN "Data/Dialog/Landing/finished2.gtx" + +;--------------------------------------------------------------------- +L0105_Init: +;--------------------------------------------------------------------- + DW ((L0105_InitFinished - L0105_Init2)) ;size +L0105_Init2: + ld a,ENV_RAIN + call SetEnvEffect + + call State0To1 + + STDSETUPDIALOG + ret + +L0105_InitFinished: + + +;--------------------------------------------------------------------- +L0105_Check: +;--------------------------------------------------------------------- + DW ((L0105_CheckFinished - L0105_Check) - 2) ;size +L0105_Check2: + ldio a,[mapState] + cp STATE_HIVEDESTROYED + jr z,.done + + ;watch for hive being destroyed + ld a,MAPBANK + ldio [$ff70],a + ld hl,$dccb + ld a,[hl] + cp HIVE_INDEX + jr z,.done ;hive still there + + ;hive destroyed + ld de,((.afterDialog-L0105_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerToFirstHero + ld de,l0105_hero_wrangling_gtx + call ShowDialogAtBottom +.afterDialog + call ClearDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld bc,ITEM_WRANGLING + call AddInventoryItem + + ld a,STATE_HIVEDESTROYED + ldio [mapState],a + +.done + ret +L0105_CheckFinished: + + +PRINTT " 0105 Level Check Size: " +PRINTV (L0105_CheckFinished - L0105_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l0106.asm b/Source/l0106.asm new file mode 100644 index 0000000..849f5a7 --- /dev/null +++ b/Source/l0106.asm @@ -0,0 +1,148 @@ +;level0106.asm +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_TALKED EQU 2 + +;--------------------------------------------------------------------- +SECTION "LevelsSection0106",ROMX +;--------------------------------------------------------------------- + +dialog: +l0106_heysonny_gtx: + INCBIN "Data/Dialog/talk/l0106_heysonny.gtx" + +l0106_hero_seethem_gtx: + INCBIN "Data/Dialog/talk/l0106_hero_seethem.gtx" + +l0106_sure_gtx: + INCBIN "Data/Dialog/talk/l0106_sure.gtx" + +l0106_headnorth_gtx: + INCBIN "Data/Dialog/talk/l0106_headnorth.gtx" + +L0106_Contents:: + DW L0106_Load + DW L0106_Init + DW L0106_Check + DW L0106_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0106_Load: + DW ((L0106_LoadFinished - L0106_Load2)) ;size +L0106_Load2: + call ParseMap + ret + +L0106_LoadFinished: + +L0106_Map: +INCBIN "Data/Levels/l0106_path.lvl" + +;gtx_intro: INCBIN "Data/Dialog/Landing/intro.gtx" +;gtx_intro2: INCBIN "Data/Dialog/Landing/intro2.gtx" +;gtx_finished: INCBIN "Data/Dialog/Landing/finished.gtx" +;gtx_finished2: INCBIN "Data/Dialog/Landing/finished2.gtx" + +;--------------------------------------------------------------------- +L0106_Init: +;--------------------------------------------------------------------- + DW ((L0106_InitFinished - L0106_Init2)) ;size +L0106_Init2: + STDSETUPDIALOG + + ;reset state if bridge not crossed yet + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$5c] ;triling grove + or a + jr nz,.afterReset + ld a,1 + ldio [mapState],a +.afterReset + + ld a,ENV_RAIN + call SetEnvEffect + ret + +L0106_InitFinished: + + +;--------------------------------------------------------------------- +L0106_Check: +;--------------------------------------------------------------------- + DW ((L0106_CheckFinished - L0106_Check) - 2) ;size +L0106_Check2: + call ((.checkHermitDialog-L0106_Check2)+levelCheckRAM) + ret + +.checkHermitDialog + ldio a,[mapState] + cp STATE_TALKED + jr c,.dialogOkay + + ld a,1 + call DisableDialogBalloons + ret + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + call MakeIdle + + ld de,((.afterDialog-L0106_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ;Hey Sonny + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0106_heysonny_gtx + call ShowDialogAtTop + call ClearDialog + + ;Seen 'em? + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + ld de,l0106_hero_seethem_gtx + call ShowDialogAtBottom + call ClearDialog + + ;Sure + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0106_sure_gtx + call ShowDialogAtTop + + ;Head north + ld de,l0106_headnorth_gtx + call ShowDialogAtTop + +.afterDialog + call ClearDialog + + call MakeNonIdle + ld a,STATE_TALKED + ldio [mapState],a + + xor a + ld [dialogNPC_speakerIndex],a + ret + +L0106_CheckFinished: + + +PRINTT " 0106 Level Check Size: " +PRINTV (L0106_CheckFinished - L0106_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l0107.asm b/Source/l0107.asm new file mode 100644 index 0000000..0a91662 --- /dev/null +++ b/Source/l0107.asm @@ -0,0 +1,624 @@ +;level0107.asm first landing +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/gfx.inc" + +GATE_INDEX EQU 10 +LIGHTINDEX EQU 48 +PURPLE_INDEX EQU 55 +BLUE_INDEX EQU 56 +YELLOW_INDEX EQU 57 +BA_INDEX EQU 58 +BS_INDEX EQU 59 +LASER_INDEX EQU 60 + +VAR_LIGHT EQU 0 +VAR_SPEAKING_HERO EQU 1 + +STATE_INITIALUPDATE EQU 1 +STATE_MISSION EQU 2 +STATE_WAITPANSIES EQU 3 +STATE_WAITGATE EQU 4 +STATE_WAITRETURN EQU 5 + +;referenced in l1401 lz_brokenwall_bg +STATE_NORMAL EQU 6 + +EXPORT bigLaserSound +EXPORT disappearSound +EXPORT closeGateSound + + +;--------------------------------------------------------------------- +SECTION "LevelsSection1",ROMX,BANK[MAP0ROM] +;--------------------------------------------------------------------- + +L0107_Contents:: + DW L0107_Load + DW L0107_Init + DW L0107_Check + DW L0107_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0107_Load: + DW ((L0107_LoadFinished - L0107_Load)-2) ;size +L0107_Load2: + call ParseMap + + ;ld a,BANK(arrows_bin) + ;ld hl,arrows_bin + ;ld c,5 + ;ld de,$8300 + ;call LoadSprites + ret + +L0107_LoadFinished: + + +L0107_Map: +INCBIN "Data/Levels/L0107_landing.lvl" + +arrows_bin: INCBIN "arrows0-4.bin" + +dialog: +hero_checkgate_gtx: + INCBIN "Data/Dialog/landing/hero_checkgate.gtx" + +guard_dontcomecloser_gtx: + INCBIN "Data/Dialog/landing/guard_dontcomecloser.gtx" + +hero_whoareyou_gtx: + INCBIN "Data/Dialog/landing/hero_whoareyou.gtx" + +guard_pansies_gtx: + INCBIN "Data/Dialog/landing/guard_pansies.gtx" + +hero_move_gtx: + INCBIN "Data/Dialog/landing/hero_move.gtx" + +guard_notpossible_gtx: + INCBIN "Data/Dialog/landing/guard_notpossible.gtx" + +hero_whatever_gtx: + INCBIN "Data/Dialog/landing/hero_whatever.gtx" + +guard_really_gtx: + INCBIN "Data/Dialog/landing/guard_really.gtx" + +bs_absolutely_gtx: + INCBIN "Data/Dialog/landing/bs_absolutely.gtx" + +guard_yeah_gtx: + INCBIN "Data/Dialog/landing/guard_yeah.gtx" + +hero_closedgate_gtx: + INCBIN "Data/Dialog/landing/hero_closedgate.gtx" + +hero_report_gtx: + INCBIN "Data/Dialog/landing/hero_report.gtx" + +bs_tookkey_gtx: + INCBIN "Data/Dialog/landing/bs_tookkey.gtx" + +ba_whataboutspare_gtx: + INCBIN "Data/Dialog/landing/ba_whataboutspare.gtx" + +bs_wasspare_gtx: + INCBIN "Data/Dialog/landing/bs_wasspare.gtx" + +ba_guns_gtx: + INCBIN "Data/Dialog/landing/ba_guns.gtx" + +bs_finelotofgood_gtx: + INCBIN "Data/Dialog/landing/bs_finelotofgood.gtx" + +bs_cool_gtx: + INCBIN "Data/Dialog/landing/bs_cool.gtx" + +L0107_Init: + DW ((L0107_InitFinished - L0107_Init)-2) ;size +L0107_Init2: +;ld a,STATE_NORMAL +;ldio [mapState],a + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + ld a,BANK(dialog) + ld [dialogBank],a + + call SetPressBDialog + + ;ld a,ENV_WINDYSNOW + ;call SetEnvEffect + +.ready + ;make pansies inactive? + ldio a,[mapState] + cp STATE_WAITGATE + jr nc,.afterInactiveCheck + + ld bc,classPansy + ld de,classDoNothing + call ChangeClass + +.afterInactiveCheck + ldio a,[mapState] + cp STATE_NORMAL + jr z,.removeTrees + +.close + call (.closeGate + (levelCheckRAM-L0107_Init2)) + jr .afterClose + +.removeTrees + ;clear the bushes the appomattox shot out & the pansies + ld a,MAPBANK + ld [$ff70],a + xor a + ld hl,$d109 + ld [hl],a + ld hl,$d149 + ld [hl+],a + ld [hl],a + ld hl,$d189 + ld [hl+],a + ld [hl],a + ld hl,$d209 + ld [hl+],a + ld [hl],a + ld hl,$d249 + ld [hl],a + ld hl,$d24a + ld [hl],a + ld hl,$d28a + ld [hl],a + +.afterClose + ldio a,[mapState] + cp STATE_WAITRETURN + jr c,.afterDeletePansies + + ld bc,classPansy + call DeleteObjectsOfClass + +.afterDeletePansies + ;ldio a,[mapState] + ;cp 3 + ;jr nz,.afterSetupArrow + + ;ld a,128 + ;ld [metaSprite_x],a + ;ld a,120 + ;ld [metaSprite_y],a + ;ld bc,$0202 ;2x2 + ;ld de,$3105 + ;ld hl,(arrowInfo + (levelCheckRAM-L0107_Check2)) + ;call CreateMetaSprite + ;ld a,45 + ;ldio [mapState+1],a + +;.afterSetupArrow + ret + +.closeGate + ld a,MAPBANK + ld [$ff70],a + ld hl,$d049 + ld a,GATE_INDEX + ld [hl+],a + inc a + ld [hl],a + ld hl,$d089 + inc a + ld [hl+],a + inc a + ld [hl],a + ret +L0107_InitFinished: + + +L0107_Check: + DW ((L0107_CheckFinished - L0107_Check) - 2) ;size +L0107_Check2: +L0107_CheckOffset EQU (levelCheckADDR - L0107_Check2) + call ((.animateLandingLights-L0107_Check2)+levelCheckRAM) + VECTORTOSTATE ((.stateTable-L0107_Check2)+levelCheckRAM) + +.stateTable + DW ((.state_initialUpdate-L0107_Check2)+levelCheckRAM) + DW ((.state_initialUpdate-L0107_Check2)+levelCheckRAM) + DW ((.state_mission-L0107_Check2)+levelCheckRAM) + DW ((.state_waitPansies-L0107_Check2)+levelCheckRAM) + DW ((.state_waitGate-L0107_Check2)+levelCheckRAM) + DW ((.state_waitReturn-L0107_Check2)+levelCheckRAM) + DW ((.state_normal-L0107_Check2)+levelCheckRAM) + +.state_initialUpdate + ld a,STATE_MISSION + ldio [mapState],a + ret + +.state_mission + ld a,5 + call Delay + + call SetSpeakerToFirstHero + ld de,((.afterStateMissionDialog-L0107_Check2)+levelCheckRAM) + call SetDialogSkip + ld de,hero_checkgate_gtx + call ShowDialogAtBottom +.afterStateMissionDialog + call ClearDialogSkipForward + call ClearDialog + call MakeNonIdle + ld a,STATE_WAITPANSIES + ldio [mapState],a + ret + +.state_waitPansies + ld a,1 ;skip second if first true + ld hl,((.checkSeePansies-L0107_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkSeePansies + ld c,a + call GetFirst + call GetCurZone + cp 5 + jr z,.seesPansies + + xor a ;return false + ret + +.seesPansies + ld a,c + ld [levelVars+VAR_SPEAKING_HERO],a + + ld a,STATE_WAITGATE + ldio [mapState],a + + ;to get joystick right + ld de,((.afterChallengeDialog-L0107_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,[levelVars+VAR_SPEAKING_HERO] + ld c,a + call SetSpeakerFromHeroIndex + + ld c,YELLOW_INDEX + ld de,guard_dontcomecloser_gtx + call ShowDialogAtTop + + ld a,[levelVars+VAR_SPEAKING_HERO] + ld c,a + ld de,hero_whoareyou_gtx + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + + ld c,YELLOW_INDEX + ld de,guard_pansies_gtx + call ShowDialogAtTop + + ld a,[levelVars+VAR_SPEAKING_HERO] + ld c,a + ld de,hero_move_gtx + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + + ld c,YELLOW_INDEX + ld de,guard_notpossible_gtx + call ShowDialogAtTop + + ld a,[levelVars+VAR_SPEAKING_HERO] + ld c,a + ld de,hero_whatever_gtx + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom +.afterChallengeDialog + call ClearDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,[levelVars+VAR_SPEAKING_HERO] + ld c,a + ld a,HERO_BS_FLAG + call ClassIndexIsHeroType + or a + jr z,.afterBS + + ld de,((.afterChallengeBSDialog-L0107_Check2)+levelCheckRAM) + call SetDialogSkip + + ld c,PURPLE_INDEX + ld de,guard_really_gtx + call ShowDialogAtTop + + ld a,[levelVars+VAR_SPEAKING_HERO] + ld c,a + ld de,bs_absolutely_gtx + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + + ld c,PURPLE_INDEX + ld de,guard_yeah_gtx + call ShowDialogAtTop + +.afterChallengeBSDialog + ;set the pansies against each other + ld a,FOF_ENEMY + ld b,GROUP_MONSTERC + ld c,GROUP_MONSTERC + call SetFOF + + ;randomize their fire delays so they won't all shoot at once + ld a,YELLOW_INDEX + call (.randomizeAttackDelay - L0107_Check2) + levelCheckRAM + ld a,BLUE_INDEX + call (.randomizeAttackDelay - L0107_Check2) + levelCheckRAM + ld a,PURPLE_INDEX + call (.randomizeAttackDelay - L0107_Check2) + levelCheckRAM + +.afterBS + call ClearDialog + call ClearDialogSkipForward + ld bc,classDoNothing ;pansies become active + ld de,classPansy + call ChangeClass + call MakeNonIdle + + ld a,1 ;return true + ret + +.state_waitGate + ld a,1 ;skip second if first true + ld hl,((.checkSeeGate-L0107_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkSeeGate + ld c,a + call GetFirst + call GetCurZone + cp 8 + jr z,.seesGate + + xor a ;return false + ret + +.seesGate + call MakeIdle + + ld de,((.afterGateDialog-L0107_Check2)+levelCheckRAM) + call SetDialogSkip + + ld de,hero_closedgate_gtx + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom +.afterGateDialog + call ClearDialog + call ClearDialogSkipForward + + call MakeNonIdle + + ld a,STATE_WAITRETURN + ldio [mapState],a + ret + +.state_waitReturn + ld a,1 ;skip second if first true + ld hl,((.checkZone8Occupied-L0107_Check2)+levelCheckRAM) + call CheckEachHero + or a + ret nz ;not clear of zone 8 + + ld a,1 ;skip second if first true + ld hl,((.checkAtAppomattox-L0107_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkZone8Occupied + ld c,a + call GetFirst + call GetCurZone + cp 8 + jr nz,.notInZone8 + + ld a,1 + ret + +.notInZone8 + cp 2 + jr nz,.notInZone8or2 + + ld a,1 + ret + +.notInZone8or2 + xor a + ret + +.checkAtAppomattox + ;at appomattox if on EXIT_U + ld c,a + call GetFirst + call GetCurZone + ld a,[hl] + and $f0 + cp (EXIT_U << 4) + jr z,.atAppx + + xor a + ret + +.atAppx + ;dialog + ld a,10 ;move camera over appomattox + ld [camera_i],a + ld a,12 + ld [camera_j],a + + ld a,1 + ld [heroesIdle],a + + push bc + ld bc,classPansy ;pansies inactive + ld de,classDoNothing + call ChangeClass + pop bc + + ld a,STATE_NORMAL + ldio [mapState],a + + ld de,((.afterReport-L0107_Check2)+levelCheckRAM) + call SetDialogSkip + + ld de,hero_report_gtx + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + + ld c,BS_INDEX + ld de,bs_tookkey_gtx + call ShowDialogAtTop + + ld c,BA_INDEX + ld de,ba_whataboutspare_gtx + call ShowDialogAtBottom + + ld c,BS_INDEX + ld de,bs_wasspare_gtx + call ShowDialogAtTop + + ld c,BA_INDEX + ld de,ba_guns_gtx + call ShowDialogAtBottom + + ld c,BS_INDEX + ld de,bs_finelotofgood_gtx + call ShowDialogAtTop +.afterReport + call ClearDialog + call ClearDialogSkipForward + + call ((.blowOpenGate-L0107_Check2)+levelCheckRAM) + + ld de,((.afterCool-L0107_Check2)+levelCheckRAM) + call SetDialogSkip + ld c,BS_INDEX + ld de,bs_cool_gtx + call ShowDialogAtTop +.afterCool + call ClearDialog + call ClearDialogSkipForward + + ld bc,classDoNothing ;pansies become active + ld de,classPansy + call ChangeClass + + call MakeNonIdle + + ld a,1 + ret + +.state_normal + ret + +.blowOpenGate + ld c,LASER_INDEX + + ld b,7 +.laserLoop + ld a,%00001000 ;blue palette, heading north + ld [methodParamL],a + ld hl,$d2ca ;location + call CreateInitAndDrawObject ;make a laser + ld hl,bigLaserSound + call PlaySound + + push bc + ld b,2 + ld a,16 + call SetupFadeFromSaturated + pop bc + + ld a,5 ;15 + call Delay + ld a,%00001000 ;blue palette, heading north + ld [methodParamL],a + ld hl,$d2c9 ;location + call CreateInitAndDrawObject ;make a laser + ld hl,bigLaserSound + call PlaySound + + push bc + ld b,2 + ld a,16 + call SetupFadeFromSaturated + pop bc + + ld a,6 + call Delay + dec b + jr nz,.laserLoop + + ;ld a,5 ;15 + ;call Delay + + ld b,16 + ld a,28 + call SetupFadeFromSaturated + + ld a,30 + call Delay + ret + +.randomizeAttackDelay + ld c,a + call GetFirst +.randomizeLoop + or a + ret z + ld a,5 + call GetRandomNumZeroToN + call SetAttackDelay + call GetNextObject + jr .randomizeLoop + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0107_Check2)+levelCheckRAM) + call ((.animateLight-L0107_Check2)+levelCheckRAM) + call ((.animateLight-L0107_Check2)+levelCheckRAM) + call ((.animateLight-L0107_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0107_CheckFinished: + +arrowInfo: DS 5 +bsExists: DS 1 + +PRINTT " 0107 Level Check Size: " +PRINTV (L0107_CheckFinished - L0107_Check2) + 5 +PRINTT "/$500 bytes" + diff --git a/Source/l0108.asm b/Source/l0108.asm new file mode 100644 index 0000000..9a4c816 --- /dev/null +++ b/Source/l0108.asm @@ -0,0 +1,148 @@ +; l0108.asm forest landing +; Generated 09.04.2000 by mlevel +; Modified 09.04.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 61 +VAR_LIGHT EQU 0 +VAR_SIGN EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level0108Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0108_sign_gtx: + INCBIN "Data/Dialog/talk/l0108_sign.gtx" + +L0108_Contents:: + DW L0108_Load + DW L0108_Init + DW L0108_Check + DW L0108_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0108_Load: + DW ((L0108_LoadFinished - L0108_Load2)) ;size +L0108_Load2: + call ParseMap + ret + +L0108_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0108_Map: +INCBIN "Data/Levels/l0108_forest_landing.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0108_Init: + DW ((L0108_InitFinished - L0108_Init2)) ;size +L0108_Init2: + STDSETUPDIALOG + + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + xor a + ld [levelVars+VAR_SIGN],a + ret + +L0108_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0108_Check: + DW ((L0108_CheckFinished - L0108_Check2)) ;size +L0108_Check2: + call ((.animateLandingLights-L0108_Check2)+levelCheckRAM) + call ((.checkSign-L0108_Check2)+levelCheckRAM) + ret + +.checkSign + ld a,1 + ld hl,((.heroAtSign-L0108_Check2)+levelCheckRAM) + call CheckEachHero + + ld hl,levelVars + VAR_SIGN + cp [hl] + jp z,((.afterResetSign-L0108_Check2)+levelCheckRAM) + + ld [hl],a + or a + jp z,((.afterResetSign-L0108_Check2)+levelCheckRAM) + + ;read sign + ld de,((.afterSignDialog-L0108_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + + call SetSpeakerFromHeroIndex + ld de,l0108_sign_gtx + call ShowDialogAtTop +.afterSignDialog + call ClearDialogSkipForward + call MakeNonIdle + +.afterResetSign + ret + +.heroAtSign + ld c,a + call GetFirst + call GetCurZone + cp 3 + jr z,.returnTrue + +.returnFalse + xor a + ret + +.returnTrue + ld a,1 + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0108_Check2)+levelCheckRAM) + call ((.animateLight-L0108_Check2)+levelCheckRAM) + call ((.animateLight-L0108_Check2)+levelCheckRAM) + call ((.animateLight-L0108_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0108_CheckFinished: +PRINTT "0108 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0108_LoadFinished - L0108_Load2) +PRINTT " / " +PRINTV (L0108_InitFinished - L0108_Init2) +PRINTT " / " +PRINTV (L0108_CheckFinished - L0108_Check2) +PRINTT "\n" + diff --git a/Source/l0109.asm b/Source/l0109.asm new file mode 100644 index 0000000..c36a032 --- /dev/null +++ b/Source/l0109.asm @@ -0,0 +1,59 @@ +; l0109.asm +; Generated 09.04.2000 by mlevel +; Modified 09.04.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0109Section",ROMX +;--------------------------------------------------------------------- + +L0109_Contents:: + DW L0109_Load + DW L0109_Init + DW L0109_Check + DW L0109_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0109_Load: + DW ((L0109_LoadFinished - L0109_Load2)) ;size +L0109_Load2: + call ParseMap + ret + +L0109_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0109_Map: +INCBIN "Data/Levels/l0109_mouse.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0109_Init: + DW ((L0109_InitFinished - L0109_Init2)) ;size +L0109_Init2: + ret + +L0109_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0109_Check: + DW ((L0109_CheckFinished - L0109_Check2)) ;size +L0109_Check2: + ret + +L0109_CheckFinished: +PRINTT "0109 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0109_LoadFinished - L0109_Load2) +PRINTT " / " +PRINTV (L0109_InitFinished - L0109_Init2) +PRINTT " / " +PRINTV (L0109_CheckFinished - L0109_Check2) +PRINTT "\n" + diff --git a/Source/l0110.asm b/Source/l0110.asm new file mode 100644 index 0000000..f1bf00b --- /dev/null +++ b/Source/l0110.asm @@ -0,0 +1,59 @@ +; l0110.asm +; Generated 11.06.2000 by mlevel +; Modified 11.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0110Section",ROMX +;--------------------------------------------------------------------- + +L0110_Contents:: + DW L0110_Load + DW L0110_Init + DW L0110_Check + DW L0110_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0110_Load: + DW ((L0110_LoadFinished - L0110_Load2)) ;size +L0110_Load2: + call ParseMap + ret + +L0110_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0110_Map: +INCBIN "Data/Levels/l0110_mouse.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0110_Init: + DW ((L0110_InitFinished - L0110_Init2)) ;size +L0110_Init2: + ret + +L0110_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0110_Check: + DW ((L0110_CheckFinished - L0110_Check2)) ;size +L0110_Check2: + ret + +L0110_CheckFinished: +PRINTT "0110 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0110_LoadFinished - L0110_Load2) +PRINTT " / " +PRINTV (L0110_InitFinished - L0110_Init2) +PRINTT " / " +PRINTV (L0110_CheckFinished - L0110_Check2) +PRINTT "\n" + diff --git a/Source/l0111.asm b/Source/l0111.asm new file mode 100644 index 0000000..9dffd53 --- /dev/null +++ b/Source/l0111.asm @@ -0,0 +1,60 @@ +; l0111.asm +; Generated 10.20.2000 by mlevel +; Modified 10.20.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0111Section",ROMX +;--------------------------------------------------------------------- + +L0111_Contents:: + DW L0111_Load + DW L0111_Init + DW L0111_Check + DW L0111_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0111_Load: + DW ((L0111_LoadFinished - L0111_Load2)) ;size +L0111_Load2: + call ParseMap + ret + + +L0111_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0111_Map: +INCBIN "Data/Levels/l0111_tower.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0111_Init: + DW ((L0111_InitFinished - L0111_Init2)) ;size +L0111_Init2: + ret + +L0111_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0111_Check: + DW ((L0111_CheckFinished - L0111_Check2)) ;size +L0111_Check2: + ret + +L0111_CheckFinished: +PRINTT "0111 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0111_LoadFinished - L0111_Load2) +PRINTT " / " +PRINTV (L0111_InitFinished - L0111_Init2) +PRINTT " / " +PRINTV (L0111_CheckFinished - L0111_Check2) +PRINTT "\n" + diff --git a/Source/l0112.asm b/Source/l0112.asm new file mode 100644 index 0000000..c6786b6 --- /dev/null +++ b/Source/l0112.asm @@ -0,0 +1,62 @@ +; l0112.asm hive entrance +; Generated 08.31.2000 by mlevel +; Modified 08.31.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0112Section",ROMX +;--------------------------------------------------------------------- + +L0112_Contents:: + DW L0112_Load + DW L0112_Init + DW L0112_Check + DW L0112_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0112_Load: + DW ((L0112_LoadFinished - L0112_Load2)) ;size +L0112_Load2: + call ParseMap + ret + +L0112_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0112_Map: +INCBIN "Data/Levels/l0112_hive_entrance.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0112_Init: + DW ((L0112_InitFinished - L0112_Init2)) ;size +L0112_Init2: + ld a,BANK(beehive_gbm) + ld hl,beehive_gbm + call InitMusic + ret + +L0112_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0112_Check: + DW ((L0112_CheckFinished - L0112_Check2)) ;size +L0112_Check2: + ret + +L0112_CheckFinished: +PRINTT "0112 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0112_LoadFinished - L0112_Load2) +PRINTT " / " +PRINTV (L0112_InitFinished - L0112_Init2) +PRINTT " / " +PRINTV (L0112_CheckFinished - L0112_Check2) +PRINTT "\n" + diff --git a/Source/l0113.asm b/Source/l0113.asm new file mode 100644 index 0000000..ccdbee9 --- /dev/null +++ b/Source/l0113.asm @@ -0,0 +1,427 @@ +; l0113.asm ship blows up battleground BA +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +CRATERINDEX EQU 30 + +;--------------------------------------------------------------------- +SECTION "Level0113Section",ROMX +;--------------------------------------------------------------------- + +L0113_Contents:: + DW L0113_Load + DW L0113_Init + DW L0113_Check + DW L0113_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0113_Load: + DW ((L0113_LoadFinished - L0113_Load2)) ;size +L0113_Load2: + call ParseMap + + ;load in tiles used for sprite ship + ;bg tiles 1454-1457 to Bank 0 100-189 + ldio a,[curROMBank] + push af + ld a,BANK(BGTiles1024) + call SetActiveROM + + xor a ;bank 0 + ld c,4 ;number of tiles to copy + ld de,$8000+1600 + ld hl,BGTiles1024 + 430*16 + call VMemCopy + pop af + call SetActiveROM + ret + +L0113_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0113_Map: +INCBIN "Data/Levels/l0113_intro_ba2.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +STATE_CREATE_BOMBER EQU 0 +STATE_BOMBER_RUN EQU 1 +STATE_EXPLOSION_STAGE1 EQU 2 +STATE_EXPLOSION_STAGE2 EQU 3 +STATE_EXPLOSION_STAGE3 EQU 4 +STATE_NORMAL EQU 5 + +VAR_DELAY EQU 0 +VAR_METASPRITE EQU 1 ;1-5 + +L0113_Init: + DW ((L0113_InitFinished - L0113_Init2)) ;size +L0113_Init2: + ld bc,((GROUP_MONSTERB<<8) | GROUP_HERO) + ld a,1 ;make soldiers friends with hero + call SetFOF + + ldio a,[mapState] + cp STATE_NORMAL + call z,((.removeShip-L0113_Init2) + levelCheckRAM) + + ret + +.removeShip + ;remove crouton ship from map + ld hl,$d1cf + ld c,4 + call ((.removeRow-L0113_Init2) + levelCheckRAM) + ld c,6 + ld hl,$d20e + call ((.removeRow-L0113_Init2) + levelCheckRAM) + ld hl,$d24e + call ((.removeRow-L0113_Init2) + levelCheckRAM) + ld hl,$d28e + call ((.removeRow-L0113_Init2) + levelCheckRAM) + ld hl,$d2ce + call ((.removeRow-L0113_Init2) + levelCheckRAM) + ld hl,$d30e + call ((.removeRow-L0113_Init2) + levelCheckRAM) + ld hl,$d34e + call ((.removeRow-L0113_Init2) + levelCheckRAM) + + ;add crater to map + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d20f + ld a,CRATERINDEX + ld [hl+],a + inc a + ld [hl+],a + ld [hl+],a + inc a + ld [hl+],a + + ld hl,$d24f + ld a,CRATERINDEX+3 + ld [hl+],a + xor a + ld [hl+],a + ld [hl+],a + ld a,CRATERINDEX+5 + ld [hl+],a + + ld hl,$d28f + ld a,CRATERINDEX+6 + ld [hl+],a + inc a + ld [hl+],a + ld [hl+],a + inc a + ld [hl+],a + + ret + +.removeRow + push bc + + ld a,MAPBANK + ldio [$ff70],a + + xor a +.removeRowLoop + ld [hl+],a + dec c + jr nz,.removeRowLoop + + pop bc + ret + +L0113_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0113_Check: + DW ((L0113_CheckFinished - L0113_Check2)) ;size +L0113_Check2: + + ldio a,[mapState] + cp STATE_NORMAL + jr nz,.checkCreateBomber + + ret + +.checkCreateBomber + cp STATE_CREATE_BOMBER + jr nz,.checkBomberRun + + ;create bomber + ld a,128 + ld [metaSprite_x],a + ld a,220 + ld [metaSprite_y],a + ld bc,$0202 + ld d,100 + ld e,5 + ld hl,levelVars+VAR_METASPRITE + call CreateMetaSprite + ld a,STATE_BOMBER_RUN + ldio [mapState],a + ret + +.checkBomberRun + cp STATE_BOMBER_RUN + jr nz,.checkExplosionStage1 + + ld bc,$00fc + ld hl,levelVars+VAR_METASPRITE + call ScrollMetaSprite + + ;get top sprite y coord + ld h,((spriteOAMBuffer>>8) & $ff) + ld a,[levelVars+VAR_METASPRITE+1] + ld l,a + ld a,[hl] + + ;play sound effect? + cp 144 + jr nz,.afterPlayShipSound + + ld hl,((shipSound-L0113_Check2) + levelCheckRAM) + call PlaySound + + ret + +.afterPlayShipSound + ;reached bombing position? + cp 44 + jr nz,.afterCheckBombPosition + + ;first explosion from bomb + ld a,5 + ld [bulletColor],a + ld bc,$0405 + ld de,$0a01 + ld hl,$d1ce + call CreateBigExplosion + ld a,20 + ld b,8 + call SetupFadeFromSaturated + ld hl,((bigExplosionSound-L0113_Check2) + levelCheckRAM) + call PlaySound + ld a,10 + ldio [jiggleDuration],a + ret + +.afterCheckBombPosition + ;off top of screen? + cp 240 ;wrapped around to bottom + ret nz + + ;remove bomber + ld hl,levelVars+VAR_METASPRITE + call FreeMetaSprite + + ld a,5 + ld [bulletColor],a + ld bc,$0405 + ld de,$0601 + ld hl,$d1ce + call CreateBigExplosion + ld a,20 + ld b,8 + call SetupFadeFromSaturated + ld hl,((bigExplosionSound-L0113_Check2) + levelCheckRAM) + call PlaySound + ld a,10 + ldio [jiggleDuration],a + + ld a,16 + ld [levelVars + VAR_DELAY],a + ld a,STATE_EXPLOSION_STAGE1 + ldio [mapState],a + ret + +.checkExplosionStage1 + cp STATE_EXPLOSION_STAGE1 + jr nz,.checkExplosionStage2 + + ld hl,levelVars+VAR_DELAY + ld a,[hl] + or a + jr z,.stage1explosion + dec [hl] + ret + +.stage1explosion + ld a,5 + ld [bulletColor],a + ld bc,$0405 + ld de,$0a04 + ld hl,$d1ce + call CreateBigExplosion + ld de,$0502 + call CreateBigExplosion + ld a,20 + ld b,8 + call SetupFadeFromSaturated + ld hl,((bigExplosionSound-L0113_Check2) + levelCheckRAM) + call PlaySound + ld a,10 + ldio [jiggleDuration],a + + ld a,30 + ld [levelVars + VAR_DELAY],a + ld a,STATE_EXPLOSION_STAGE2 + ldio [mapState],a + ret + +.checkExplosionStage2 + cp STATE_EXPLOSION_STAGE2 + jr nz,.checkExplosionStage3 + + ld hl,levelVars+VAR_DELAY + ld a,[hl] + or a + jr z,.stage2explosion + dec [hl] + ret + +.stage2explosion + ld a,5 + ld [bulletColor],a + ld bc,$0405 + ld de,$1001 + ld hl,$d1ce + call CreateBigExplosion + ld a,20 + ld b,8 + call SetupFadeFromSaturated + ld hl,((bigExplosionSound-L0113_Check2) + levelCheckRAM) + call PlaySound + ld a,10 + ldio [jiggleDuration],a + + ld a,20 + ld [levelVars + VAR_DELAY],a + ld a,STATE_EXPLOSION_STAGE3 + ldio [mapState],a + ret + +.checkExplosionStage3 + cp STATE_EXPLOSION_STAGE3 + ret nz + + ld hl,levelVars+VAR_DELAY + ld a,[hl] + or a + jr z,.stage3explosion + dec [hl] + ret + +.stage3explosion + ;remove crouton ship from map + ld hl,$d1cf + ld c,4 + call ((.removeRow-L0113_Check2) + levelCheckRAM) + ld c,6 + ld hl,$d20e + call ((.removeRow-L0113_Check2) + levelCheckRAM) + ld hl,$d24e + call ((.removeRow-L0113_Check2) + levelCheckRAM) + ld hl,$d28e + call ((.removeRow-L0113_Check2) + levelCheckRAM) + ld hl,$d2ce + call ((.removeRow-L0113_Check2) + levelCheckRAM) + ld hl,$d30e + call ((.removeRow-L0113_Check2) + levelCheckRAM) + ld hl,$d34e + call ((.removeRow-L0113_Check2) + levelCheckRAM) + + + ld a,5 + ld [bulletColor],a + ld bc,$0405 + ld de,$0804 + ld hl,$d1ce + call CreateBigExplosion + ld de,$1803 + call CreateBigExplosion + ld a,30 + call SetupFadeFromWhite + ;ld b,15 + ;call SetupFadeFromSaturated + ld hl,((bigExplosionSound-L0113_Check2) + levelCheckRAM) + call PlaySound + ld a,15 + ldio [jiggleDuration],a + ld a,1 + call Delay + + ;add crater to map + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d20f + ld a,30 + ld [hl+],a + inc a + ld [hl+],a + ld [hl+],a + inc a + ld [hl+],a + + ld hl,$d24f + ld a,33 + ld [hl+],a + xor a + ld [hl+],a + ld [hl+],a + ld a,35 + ld [hl+],a + + ld hl,$d28f + ld a,36 + ld [hl+],a + inc a + ld [hl+],a + ld [hl+],a + inc a + ld [hl+],a + + ld a,STATE_NORMAL + ldio [mapState],a + ret + +.removeRow + push bc + + ld a,MAPBANK + ldio [$ff70],a + + xor a +.removeRowLoop + ld [hl+],a + dec c + jr nz,.removeRowLoop + + pop bc + ret + +shipSound: + DB 1,$1f,$80,$f5,$80,$86 + +bigExplosionSound: + DB 4,$00,$f3,$81,$80 + +L0113_CheckFinished: +PRINTT "0113 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0113_LoadFinished - L0113_Load2) +PRINTT " / " +PRINTV (L0113_InitFinished - L0113_Init2) +PRINTT " / " +PRINTV (L0113_CheckFinished - L0113_Check2) +PRINTT "\n" + diff --git a/Source/l0114.asm b/Source/l0114.asm new file mode 100644 index 0000000..7cba2ad --- /dev/null +++ b/Source/l0114.asm @@ -0,0 +1,190 @@ +; l0114.asm haiku in moonbase tunnel +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0114Section",ROMX +;--------------------------------------------------------------------- + +L0114_Contents:: + DW L0114_Load + DW L0114_Init + DW L0114_Check + DW L0114_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0114_Load: + DW ((L0114_LoadFinished - L0114_Load2)) ;size +L0114_Load2: + call ParseMap + ret + +L0114_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0114_Map: +INCBIN "Data/Levels/l0114_intro_haiku2.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +VAR_PREVZONE EQU 0 +VAR_LIGHT EQU 1 + +LIGHTINDEX EQU 41 + +L0114_Init: + DW ((L0114_InitFinished - L0114_Init2)) ;size +L0114_Init2: + ld a,BANK(moon_base_haiku_gbm) + ld hl,moon_base_haiku_gbm + call InitMusic + + ;set default game palette to be bright green + ld hl,((.greenBright-L0114_Init2)+levelCheckRAM) + ld de,gamePalette + call CopyPalette32 + ld de,gamePalette+64 + call CopyPalette32 + ld de,fadeCurPalette+64 + call CopyPalette32 + ld de,fadeFinalPalette+64 + call CopyPalette32 + + xor a + ld [levelVars + VAR_PREVZONE],a + + ld a,[bgTileMap+LIGHTINDEX] ;tile index of first light + ld [levelVars+VAR_LIGHT],a + ret + +.greenBright +DW $0000, $1104, $2208, $3fef +DW $0000, $0005, $000f, $3fef +DW $0000, $2800, $3e00, $3fef +DW $0000, $0140, $03e0, $3fef +DW $0000, $2004, $2989, $3fef +DW $0000, $01c6, $03ef, $3fef +DW $0000, $00c8, $05ef, $3fef +DW $0000, $2009, $3d8e, $3fef + +L0114_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0114_Check: + DW ((L0114_CheckFinished - L0114_Check2)) ;size +L0114_Check2: + ;animate dice lights + ld a,[levelVars+VAR_LIGHT] + ld b,a + + ;slow red lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + ld hl,bgTileMap+LIGHTINDEX + ld [hl+],a + sub b + inc a + and %00000011 + add b + ld [hl+],a + + ;get my hero zone + ld a,[levelVars + VAR_PREVZONE] + ld b,a + ld h,((hero0_data>>8) & $ff) + ld a,[curHeroAddressL] + add HERODATA_INDEX + ld l,a + ld c,[hl] + call GetFirst ;sets up de + call GetCurZone + + ;get random number before branching + push af + ld a,%111 + call GetRandomNumMask + ld h,a + pop af + + cp 4 + jr nc,.darkZone + +.lightZone + ;1/8 chance of resetting to brighter palette + xor a + ld [levelVars + VAR_PREVZONE],a + + ld a,h ;the random number + or a + jr nz,.sameZone + + ld hl,((.greenDark-L0114_Check2)+levelCheckRAM) + ld de,fadeFinalPalette + call CopyPalette32 + ld hl,gamePalette + ld de,fadeCurPalette + call CopyPalette32 + ld a,32 + ld [fadeRange],a + + ld a,16 + call FadeInit + jr .sameZone + +.darkZone + cp b ;in a different zone than last time? + jr z,.sameZone + + ld [levelVars + VAR_PREVZONE],a ;yep + ;set palette to be black except for red color + ld hl,((.greenBlack-L0114_Check2)+levelCheckRAM) + ld de,fadeFinalPalette + call CopyPalette32 + ld a,32 + ld [fadeRange],a + ld a,40 + call FadeInit + +.sameZone + + ret + +.greenDark +DW $0000, $0882, $1104, $1de7 +DW $0000, $0005, $000f, $1de7 ;red stays +DW $0000, $1400, $1d00, $1de7 +DW $0000, $00a0, $01e0, $1de7 +DW $0000, $1002, $14c4, $1de7 +DW $0000, $00e3, $01e7, $1de7 +DW $0000, $0064, $00e7, $1de7 +DW $0000, $1004, $1cc7, $1de7 + +.greenBlack +DW $0000, $0060+$40, $0060+$40, $0060+$40 +DW $0000, $0005+$40, $000f+$40, $0060+$40 ;red stays +DW $0000, $0060+$40, $0060+$40, $0060+$40 +DW $0000, $0060+$40, $0060+$40, $0060+$40 +DW $0000, $0060+$40, $0060+$40, $0060+$40 +DW $0000, $0060+$40, $0060+$40, $0060+$40 +DW $0000, $0060+$40, $0060+$40, $0060+$40 +DW $0000, $0060+$40, $00a0+$40, $0060+$40 + +L0114_CheckFinished: +PRINTT "0114 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0114_LoadFinished - L0114_Load2) +PRINTT " / " +PRINTV (L0114_InitFinished - L0114_Init2) +PRINTT " / " +PRINTV (L0114_CheckFinished - L0114_Check2) +PRINTT "\n" + diff --git a/Source/l0115.asm b/Source/l0115.asm new file mode 100644 index 0000000..1264e84 --- /dev/null +++ b/Source/l0115.asm @@ -0,0 +1,864 @@ +; l0115.asm BS sneaks in the crouton base +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0115Section",ROMX +;--------------------------------------------------------------------- + +L0115_Contents:: + DW L0115_Load + DW L0115_Init + DW L0115_Check + DW L0115_Map + +dialog: +brainiac_detectIntruder_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_detectIntruder.gtx" + +bs_segashuating_gtx: + INCBIN "Data/Dialog/intro_bs/bs_segashuating.gtx" + +brainiac_bringIt_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_bringIt.gtx" + +monitor_onlyCroutons_gtx: + INCBIN "Data/Dialog/intro_bs/monitor_onlyCroutons.gtx" + +bs_idea_gtx: + INCBIN "Data/Dialog/intro_bs/bs_idea.gtx" + +bs_presto_gtx: + INCBIN "Data/Dialog/intro_bs/bs_presto.gtx" + +bs_hangin1_gtx: + INCBIN "Data/Dialog/intro_bs/bs_hangin1.gtx" + +grunt_hangin2_gtx: + INCBIN "Data/Dialog/intro_bs/grunt_hangin2.gtx" + +bs_hangin3_gtx: + INCBIN "Data/Dialog/intro_bs/bs_hangin3.gtx" + +grunt_hangin4_gtx: + INCBIN "Data/Dialog/intro_bs/grunt_hangin4.gtx" + +bs_hangin5_gtx: + INCBIN "Data/Dialog/intro_bs/bs_hangin5.gtx" + +monitor_openDoor_gtx: + INCBIN "Data/Dialog/intro_bs/monitor_openDoor.gtx" + +brainiac_wait_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_wait.gtx" + +monitor_sorry_gtx: + INCBIN "Data/Dialog/intro_bs/monitor_sorry.gtx" + +brainiac_justClose_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_justClose.gtx" + +monitor_oneSecond_gtx: + INCBIN "Data/Dialog/intro_bs/monitor_oneSecond.gtx" + +brainiac_idiotz_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_idiotz.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0115_Load: + DW ((L0115_LoadFinished - L0115_Load2)) ;size +L0115_Load2: + call ParseMap + ret + +L0115_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0115_Map: +INCBIN "Data/Levels/l0115_intro_bs2.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +STATE_DETECT1 EQU 0 +STATE_DETECT2 EQU 1 +STATE_DETECT3 EQU 2 +STATE_PRESTO EQU 3 +STATE_HANGIN2 EQU 4 +STATE_HANGIN3 EQU 5 +STATE_HANGIN4 EQU 6 +STATE_HANGIN5 EQU 7 +STATE_MONITOR1 EQU 8 +STATE_WAIT_ALLBRAINIAC EQU 9 +STATE_MONITOR2 EQU 10 +STATE_MONITOR3 EQU 11 +STATE_MONITOR4 EQU 12 +STATE_MONITOR5 EQU 13 +STATE_NORMAL EQU 14 +STATE_WAIT_DIALOG EQU 15 + +VAR_MONITOR_WARNING EQU 0 +VAR_STATIC EQU 1 +VAR_SPEAKINGHERO EQU 2 +VAR_GRUNT_TILE EQU 3 +VAR_COSTUME_DIALOG EQU 4 +VAR_BS_TILE EQU 5 +VAR_NUMMONITORS EQU 6 +VAR_MONITORS EQU 7 ;7-26, 20 monitors +VAR_HANGIN_DIALOG EQU 27 +VAR_COSTUME_HERO EQU 28 + +STATICINDEX EQU 34 +BGBRAINIACINDEX EQU 31 +GOBLININDEX EQU 46 +GRUNTINDEX EQU 44 +GUARDINDEX EQU 45 +BRAINIACINDEX EQU 49 + +DETECTZONE EQU 11 +PAINTZONE EQU 10 ;8 +HANGINZONE1 EQU 5 +HANGINZONE2 EQU 8 ;5 +MONITORZONE EQU 9 + +L0115_Init: + DW ((L0115_InitFinished - L0115_Init2)) ;size +L0115_Init2: + call SetPressBDialog + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(bs_gbm) + ld hl,bs_gbm + call InitMusic + + xor a + ld [levelVars + VAR_MONITOR_WARNING],a + ld [levelVars + VAR_COSTUME_DIALOG],a + ld [levelVars + VAR_HANGIN_DIALOG],a + + ;save BS's current tile for later + call SetSpeakerToFirstHero + call GetFGMapping + ld [levelVars+VAR_BS_TILE],a + + ld a,20 + ld [levelVars + VAR_NUMMONITORS],a + + xor a + ld c,20 + ld hl,levelVars + VAR_MONITORS +.clearMonitors + ld [hl+],a + dec c + jr nz,.clearMonitors + + + ;ld a,$ff + ;ld [levelVars + VAR_BS_TILE],a + + ld a,[bgTileMap+STATICINDEX] + ld [levelVars+VAR_STATIC],a + + ld a,TILEINDEXBANK + ldio [$ff70],a + ld a,[fgTileMap+GRUNTINDEX] + ld [levelVars+VAR_GRUNT_TILE],a + + ldio a,[mapState] + cp STATE_NORMAL + ret nz + + ;open doors + ;open the security door + ;ld a,MAPBANK + ;ldio [$ff70],a + ;xor a + ;ld hl,$d189 + ;ld [hl+],a + ;ld [hl],a + + ;open the outer door + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d049 + ld [hl+],a + ld [hl],a + + ;mark certain dialogs as having happened + ld a,1 + ld [levelVars + VAR_COSTUME_DIALOG],a + ld [levelVars + VAR_HANGIN_DIALOG],a + + ret + +L0115_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0115_Check: + DW ((L0115_CheckFinished - L0115_Check2)) ;size +L0115_Check2: + call SetSkipStackPos + call CheckSkip + call ((.animateStatic-L0115_Check2)+levelCheckRAM) + call ((.checkBSAttack-L0115_Check2)+levelCheckRAM) + call ((.checkPaintRoom-L0115_Check2)+levelCheckRAM) + call ((.checkHangin-L0115_Check2)+levelCheckRAM) + call ((.adjustCameraInMonitorRoom-L0115_Check2)+levelCheckRAM) + call ((.checkMonitorWarn-L0115_Check2)+levelCheckRAM) + VECTORTOSTATE ((.stateTable-L0115_Check2)+levelCheckRAM) + +.stateTable + DW ((.checkDetect1-L0115_Check2)+levelCheckRAM) + DW ((.checkDetect2-L0115_Check2)+levelCheckRAM) + DW ((.checkDetect3-L0115_Check2)+levelCheckRAM) + DW ((.checkPresto-L0115_Check2)+levelCheckRAM) + DW ((.checkHangin2-L0115_Check2)+levelCheckRAM) + DW ((.checkHangin3-L0115_Check2)+levelCheckRAM) + DW ((.checkHangin4-L0115_Check2)+levelCheckRAM) + DW ((.checkHangin5-L0115_Check2)+levelCheckRAM) + DW ((.checkMonitor1-L0115_Check2)+levelCheckRAM) + DW ((.checkWaitAllBRAINIAC-L0115_Check2)+levelCheckRAM) + DW ((.checkMonitor2-L0115_Check2)+levelCheckRAM) + DW ((.checkMonitor3-L0115_Check2)+levelCheckRAM) + DW ((.checkMonitor4-L0115_Check2)+levelCheckRAM) + DW ((.checkMonitor5-L0115_Check2)+levelCheckRAM) + DW ((.checkNormal-L0115_Check2)+levelCheckRAM) + DW ((.checkWaitDialog-L0115_Check2)+levelCheckRAM) + +.checkDetect1 + ld a,1 + ld hl,((.checkDetect1_hero-L0115_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkDetect1_hero + ld c,a + call GetFirst + call GetCurZone + cp DETECTZONE + ld a,0 + ret nz + + ld a,c + ld [levelVars + VAR_SPEAKINGHERO],a + call SetSpeakerFromHeroIndex + + call MakeIdle + + ld hl,$d85d + call ((.monitorToStatic-L0115_Check2)+levelCheckRAM) + + ld c,8 +.waitStatic + ld de,((.skipDetect - L0115_Check2) + levelCheckRAM) + call SetDialogSkip + + ld a,1 + call Delay + call ((.animateStatic-L0115_Check2)+levelCheckRAM) + ld a,1 + call Delay + dec c + jr nz,.waitStatic + + ld hl,$d85d + call ((.monitorToBRAINIAC-L0115_Check2)+levelCheckRAM) + call ((.setupBRAINIAC-L0115_Check2)+levelCheckRAM) + DIALOGTOP brainiac_detectIntruder_gtx + WAITDIALOG STATE_DETECT2 + ld a,1 + ret + +.checkDetect2 + ld a,[levelVars + VAR_SPEAKINGHERO] + ld c,a + DIALOGBOTTOM bs_segashuating_gtx + WAITDIALOG STATE_DETECT3 + ret + +.checkDetect3 + call ((.setupBRAINIAC-L0115_Check2)+levelCheckRAM) + DIALOGTOP brainiac_bringIt_gtx + call MakeNonIdle + WAITDIALOG STATE_MONITOR1 + ret + +.checkPaintRoom + ldio a,[mapState] + cp STATE_PRESTO + ret z + + xor a + ld hl,((.checkPaintRoom_hero-L0115_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkPaintRoom_hero + ld c,a + call GetFirst + call GetCurZone + cp PAINTZONE + ld a,0 + ret nz + + ;only if hero's attack delay is zero + call GetAttackDelay + or a + ld a,0 + ret nz + + ;possible for costume? + ld a,[levelVars + VAR_GRUNT_TILE] + inc a + ret z ;returns if $ff (no tile) + + ;already talked about costume? + ld a,c + ld [levelVars + VAR_COSTUME_HERO],a + ld a,[levelVars + VAR_COSTUME_DIALOG] + or a + jr nz,.checkPresto + + call SetSpeakerFromHeroIndex + + ld de,((.skipCostume-L0115_Check2)+levelCheckRAM) + call SetDialogSkip + + call MakeIdle + DIALOGBOTTOM bs_idea_gtx + WAITDIALOGNOCLEAR STATE_PRESTO + + ld a,1 + ret + +.checkPresto + call ((.useCostume-L0115_Check2)+levelCheckRAM) + + ld a,[levelVars + VAR_COSTUME_DIALOG] + or a + ret nz + + ld a,[levelVars + VAR_COSTUME_HERO] + ld c,a + call SetSpeakerFromHeroIndex + + call ((.clearSkipAfterDialog-L0115_Check2)+levelCheckRAM) + DIALOGBOTTOM bs_presto_gtx + call MakeNonIdle + WAITDIALOG STATE_MONITOR1 + ld a,1 + ld [levelVars + VAR_COSTUME_DIALOG],a + ret + +.checkHangin + ld a,[levelVars + VAR_HANGIN_DIALOG] + or a + ret nz + + ;jr z,.okayToHang + ;ld a,STATE_MONITOR1 + ;ldio [mapState],a + ;ret +;.okayToHang + ld a,1 + ld hl,((.checkHangin_hero-L0115_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkHangin_hero + ld c,a + call GetFirst + call GetCurZone + cp HANGINZONE1 + jr z,.checkCostume + cp HANGINZONE2 + ld a,0 + ret nz + +.checkCostume + call SetSpeakerFromHeroIndex + ld a,TILEINDEXBANK + ldio [$ff70],a + ld h,((fgTileMap>>8) & $ff) + ld l,c + ld a,[levelVars + VAR_GRUNT_TILE] + cp [hl] + ld a,0 + ret nz ;not in costume! + + ;make sure there's some grunts to talk to + push bc + push de + ld c,GRUNTINDEX + call GetFirst + pop de + pop bc + or a + ret z ;no grunts + + ld a,1 + ld [levelVars + VAR_HANGIN_DIALOG],a + ld de,((.skipHangin-L0115_Check2)+levelCheckRAM) + call SetDialogSkip + call MakeIdle + ld a,c + ld [levelVars + VAR_SPEAKINGHERO],a + call SetSpeakerFromHeroIndex + DIALOGBOTTOM bs_hangin1_gtx + WAITDIALOG STATE_HANGIN2 + ld a,1 + ret + +.checkHangin2 + ld c,GRUNTINDEX + DIALOGTOP grunt_hangin2_gtx + WAITDIALOG STATE_HANGIN3 + ret + +.checkHangin3 + ld a,[levelVars + VAR_SPEAKINGHERO] + ld c,a + call SetSpeakerFromHeroIndex + DIALOGBOTTOM bs_hangin3_gtx + WAITDIALOG STATE_HANGIN4 + ret + +.checkHangin4 + ld c,GRUNTINDEX + DIALOGTOP grunt_hangin4_gtx + WAITDIALOG STATE_HANGIN5 + ret + +.checkHangin5 + call ((.clearSkipAfterDialog-L0115_Check2)+levelCheckRAM) + call MakeNonIdle + ld a,[levelVars + VAR_SPEAKINGHERO] + ld c,a + call SetSpeakerFromHeroIndex + DIALOGBOTTOM bs_hangin5_gtx + WAITDIALOG STATE_MONITOR1 + ret + +.checkMonitor1 + ld a,1 + ld hl,((.checkMonitor1_hero-L0115_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkMonitor1_hero + or a + ret z + + ld c,a + ;hero in costume? + call GetFGMapping + ld hl,levelVars + VAR_GRUNT_TILE + cp [hl] + ld a,0 + ret nz ;not yet! + + call GetFirst + call GetCurZone + cp MONITORZONE + ld a,0 + ret nz + + call SetSpeakerFromHeroIndex + call MakeIdle + ld a,1 ;make sure the warning won't happen + ld [levelVars + VAR_MONITOR_WARNING],a + ld c,GUARDINDEX + DIALOGTOP monitor_openDoor_gtx + WAITDIALOG STATE_WAIT_ALLBRAINIAC + ld a,MAPBANK + ldio [$ff70],a + + ;open the outer door + xor a + ld hl,$d049 + ld [hl+],a + ld [hl],a + + ld de,((.skipMonitor-L0115_Check2)+levelCheckRAM) + call SetDialogSkip + + ld a,1 + ret + +.checkWaitAllBRAINIAC + ld a,[levelVars + VAR_NUMMONITORS] + or a + jr z,.brainiacTalks + + ;animate monitors from normal to static to BRAINIAC + dec a ;pick a monitor at random + call GetRandomNumZeroToN + inc a + ld c,a + ld de,0 + ld hl,levelVars + VAR_MONITORS + + ;find monitor state data +.findActiveMonitor + ld a,[hl+] + inc e + cp 5 + jr nc,.findActiveMonitor ;skip if this one finished + dec c + jr nz,.findActiveMonitor + dec hl + dec e + inc [hl] + inc a + ld c,a ;save monitor state + sla e ;de *= 2 (offset) + rl d + ld hl,((.monitorLocations-L0115_Check2)+levelCheckRAM) + add hl,de ;hl = monitor location table + ld a,[hl+] + ld h,[hl] + ld l,a ;hl is monitor location + ld a,c + cp 5 + jr nc,.changeToFace + + ;change to static + call ((.monitorToStatic-L0115_Check2)+levelCheckRAM) + ret + +.changeToFace + call ((.monitorToBRAINIAC-L0115_Check2)+levelCheckRAM) + ld hl,levelVars + VAR_NUMMONITORS + dec [hl] + ret + +.brainiacTalks + call ((.setupBRAINIAC-L0115_Check2)+levelCheckRAM) + DIALOGTOP brainiac_wait_gtx + WAITDIALOG STATE_MONITOR2 + ret + +.resetHero + or a + ret z + ld c,a + call GetFirst + ld a,10 + call SetAttackDelay + ld b,METHOD_DRAW + call CallMethod + ret + +.checkMonitor2 + call ((.openSecurityDoor-L0115_Check2)+levelCheckRAM) + + ld c,GUARDINDEX + DIALOGTOP monitor_sorry_gtx + WAITDIALOGNOCLEAR STATE_MONITOR3 + ret + +.checkMonitor3 + call ((.setupBRAINIAC-L0115_Check2)+levelCheckRAM) + DIALOGTOP brainiac_justClose_gtx + WAITDIALOGNOCLEAR STATE_MONITOR4 + ret + +.checkMonitor4 + ld c,GUARDINDEX + DIALOGTOP monitor_oneSecond_gtx + WAITDIALOGNOCLEAR STATE_MONITOR5 + ret + +.checkMonitor5 + call ((.setupBRAINIAC-L0115_Check2)+levelCheckRAM) + set DLG_CLEARSKIP_BIT,[hl] + DIALOGTOP brainiac_idiotz_gtx + call MakeNonIdle + WAITDIALOG STATE_NORMAL + ret + +.checkNormal + ret + +.checkWaitDialog + STDWAITDIALOG + ret + +;----support routines------------------------------------------------- +.clearSkipAfterDialog + ld hl,dialogSettings + set DLG_CLEARSKIP_BIT,[hl] + ret + +.skipDetect + call ClearDialog + call MakeNonIdle + ld hl,$d85d + call ((.monitorToBRAINIAC-L0115_Check2)+levelCheckRAM) + ld a,STATE_MONITOR1 + ldio [mapState],a + ld a,1 + ret + +.useCostume + ld a,[levelVars + VAR_COSTUME_HERO] + ld c,a + ld a,[levelVars + VAR_GRUNT_TILE] ;use the grunt's tile + call SetFGMapping + + call GetFirst + ld a,0 + call SetAttackDelay + ld b,METHOD_DRAW + call CallMethod + ld a,GROUP_MONSTERA ;hero is one of the boys now + call SetGroup + ret + +.skipCostume + call ClearDialog + call MakeNonIdle + call ((.useCostume-L0115_Check2)+levelCheckRAM) + ld a,1 + ld [levelVars + VAR_COSTUME_DIALOG],a + ld a,STATE_MONITOR1 + ldio [mapState],a + ret + +.skipHangin + call ClearDialog + call MakeNonIdle + ld a,STATE_MONITOR1 + ldio [mapState],a + ret + +.skipMonitor + call ClearDialog + call MakeNonIdle + ld a,STATE_NORMAL + ldio [mapState],a + + call ((.openSecurityDoor-L0115_Check2)+levelCheckRAM) + + ;set all monitors to brainiac + ld c,20 + ld hl,((.monitorLocations-L0115_Check2)+levelCheckRAM) +.setAllMonitorsLoop + ld a,[hl+] + push hl + ld h,[hl] + ld l,a + call ((.monitorToBRAINIAC-L0115_Check2)+levelCheckRAM) + pop hl + inc hl + dec c + jr nz,.setAllMonitorsLoop + ret + +.openSecurityDoor + ld a,[hero0_index] + call ((.resetHero-L0115_Check2)+levelCheckRAM) + ld a,[hero1_index] + call ((.resetHero-L0115_Check2)+levelCheckRAM) + call ((.checkBSAttack-L0115_Check2)+levelCheckRAM) + + ;open the security door + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d189 + ld [hl+],a + ld [hl],a + + ;ld a,$ff + ;ld [levelVars + VAR_GRUNT_TILE],a ;no more changing + + ret + +.setupBRAINIAC + ld hl,dialogSettings + set DLG_BRAINIAC_BIT,[hl] + ld c,BRAINIACINDEX + ret + +.checkMonitorWarn + ld a,[levelVars + VAR_MONITOR_WARNING] + or a + ret nz + + ld a,1 + ld hl,((.checkMonitorWarn_hero-L0115_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkMonitorWarn_hero + ld c,a + call GetFirst + call GetCurZone + cp MONITORZONE + ld a,0 + ret nz + + ;no warning if I'm in crouton disguise + call GetFGMapping + ld hl,levelVars + VAR_GRUNT_TILE + cp [hl] + ld a,0 + ret z + + ld a,1 + ld [levelVars + VAR_MONITOR_WARNING],a + + ld de,((.skipMonitorWarn-L0115_Check2)+levelCheckRAM) + call SetDialogSkip + + call ((.clearSkipAfterDialog-L0115_Check2)+levelCheckRAM) + ld c,GUARDINDEX + DIALOGTOP monitor_onlyCroutons_gtx + WAITDIALOG STATE_MONITOR1 + ld a,1 + ret + +.skipMonitorWarn + call ClearDialog + call MakeNonIdle + ld a,STATE_MONITOR1 + ldio [mapState],a + ret + +.monitorLocations + DW $d082 + DW $d084 + DW $d086 + DW $d08c + DW $d08e + DW $d090 + DW $d102 + DW $d182 + DW $d202 + DW $d282 + DW $d110 + DW $d190 + DW $d210 + DW $d290 + DW $d302 + DW $d304 + DW $d306 + DW $d30c + DW $d30e + DW $d310 ;20 total (does not include entrance) + +.adjustCameraInMonitorRoom + call GetMyHero + ld c,a + call GetFirst + call GetCurZone + cp 7 + jr z,.adjustCamera + cp 9 + ret nz +.adjustCamera + ld a,1 + ld [camera_i],a + ld [camera_j],a + ret + +.monitorToStatic + push bc + push de + push hl + + ;push hl + ;ld hl,((.staticSound-L0115_Check2)+levelCheckRAM) + ;call PlaySound + ;pop hl + + ld de,$2901 + jr .monitorCommon + +.monitorToBRAINIAC + push bc + push de + push hl + + ld de,$2903 + +.monitorCommon + call ConvertLocHLToXY + push de + push hl + pop de + pop hl + ld bc,$0202 + call BlitMap + + pop hl + pop de + pop bc + ret + +.animateStatic + ld a,[levelVars+VAR_STATIC] + ld b,a + ldio a,[updateTimer] + rrca + and %00000010 + add b + ld hl,bgTileMap+STATICINDEX + ld [hl+],a + inc a + ld [hl+],a + ret + +.checkBSAttack + ;sets BS's group back to hero and get rid of his disguise + ;if he attacks + ld a,[hero0_index] + call ((.groupToHero-L0115_Check2)+levelCheckRAM) + ld a,[hero1_index] + call ((.groupToHero-L0115_Check2)+levelCheckRAM) + ret + +.groupToHero + or a + ret z + + ld c,a + call GetFirst + call GetAttackDelay + or a + ret z + + ;have a copy of BS's original tile? + ld a,[levelVars + VAR_BS_TILE] + cp $ff + ret z + + + ld a,[levelVars + VAR_BS_TILE] + call SetFGMapping + + ld b,METHOD_DRAW + call CallMethod + + ld a,GROUP_HERO + call SetGroup + ld a,TILEINDEXBANK + ret + +;.staticSound + ;DB 4,$00,$f0,$20,$c0 + +L0115_CheckFinished: +PRINTT "0115 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0115_LoadFinished - L0115_Load2) +PRINTT " / " +PRINTV (L0115_InitFinished - L0115_Init2) +PRINTT " / " +PRINTV (L0115_CheckFinished - L0115_Check2) +PRINTT "\n" + diff --git a/Source/l0200.asm b/Source/l0200.asm new file mode 100644 index 0000000..70a03c0 --- /dev/null +++ b/Source/l0200.asm @@ -0,0 +1,90 @@ +; l0200.asm evil village +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;water=lava here +WATERINDEX EQU 29 +FIREINDEX EQU 38 +VAR_FIRE EQU 0 +VAR_WATER EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level0200Section",ROMX +;--------------------------------------------------------------------- + +L0200_Contents:: + DW L0200_Load + DW L0200_Init + DW L0200_Check + DW L0200_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0200_Load: + DW ((L0200_LoadFinished - L0200_Load2)) ;size +L0200_Load2: + call ParseMap + ret + +L0200_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0200_Map: +INCBIN "Data/Levels/l0200_evilvill.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0200_Init: + DW ((L0200_InitFinished - L0200_Init2)) ;size +L0200_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ld a,[bgTileMap + FIREINDEX] + ld [levelVars + VAR_FIRE],a + ret + +L0200_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0200_Check: + DW ((L0200_CheckFinished - L0200_Check2)) ;size +L0200_Check2: + call ((.animateWater-L0200_Check2)+levelCheckRAM) + call ((.animateFire-L0200_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +.animateFire + ldio a,[updateTimer] + rrca + rrca + and %11 + ld hl,levelVars + VAR_FIRE + add [hl] + ld [bgTileMap + FIREINDEX],a + ret + +L0200_CheckFinished: +PRINTT "0200 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0200_LoadFinished - L0200_Load2) +PRINTT " / " +PRINTV (L0200_InitFinished - L0200_Init2) +PRINTT " / " +PRINTV (L0200_CheckFinished - L0200_Check2) +PRINTT "\n" + diff --git a/Source/l0201.asm b/Source/l0201.asm new file mode 100644 index 0000000..5383bfa --- /dev/null +++ b/Source/l0201.asm @@ -0,0 +1,74 @@ +; l0201.asm mist south of evil village +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0201Section",ROMX +;--------------------------------------------------------------------- + +L0201_Contents:: + DW L0201_Load + DW L0201_Init + DW L0201_Check + DW L0201_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0201_Load: + DW ((L0201_LoadFinished - L0201_Load2)) ;size +L0201_Load2: + call ParseMap + ret + +L0201_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0201_Map: +INCBIN "Data/Levels/l0201_mist.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0201_Init: + DW ((L0201_InitFinished - L0201_Init2)) ;size +L0201_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0201_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0201_Check: + DW ((L0201_CheckFinished - L0201_Check2)) ;size +L0201_Check2: + call ((.animateWater-L0201_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0201_CheckFinished: +PRINTT "0201 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0201_LoadFinished - L0201_Load2) +PRINTT " / " +PRINTV (L0201_InitFinished - L0201_Init2) +PRINTT " / " +PRINTV (L0201_CheckFinished - L0201_Check2) +PRINTT "\n" + diff --git a/Source/l0203.asm b/Source/l0203.asm new file mode 100644 index 0000000..d60342f --- /dev/null +++ b/Source/l0203.asm @@ -0,0 +1,166 @@ +;level0203.asm +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "LevelsSection0203",ROMX +;--------------------------------------------------------------------- + +L0203_Contents:: + DW L0203_Load + DW L0203_Init + DW L0203_Check + DW L0203_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0203_Load: + DW ((L0203_LoadFinished - L0203_Load2)) ;size +L0203_Load2: + call ParseMap + ret + +L0203_LoadFinished: + +L0203_Map: +INCBIN "Data/Levels/l0203_path.lvl" + +;gtx_intro: INCBIN "Data/Dialog/Landing/intro.gtx" +;gtx_intro2: INCBIN "Data/Dialog/Landing/intro2.gtx" +;gtx_finished: INCBIN "Data/Dialog/Landing/finished.gtx" +;gtx_finished2: INCBIN "Data/Dialog/Landing/finished2.gtx" + +;--------------------------------------------------------------------- +L0203_Init: +;--------------------------------------------------------------------- + DW ((L0203_InitFinished - L0203_Init2)) ;size +L0203_Init2: + + ret + +L0203_InitFinished: + + +;--------------------------------------------------------------------- +L0203_Check: +;--------------------------------------------------------------------- + DW ((L0203_CheckFinished - L0203_Check) - 2) ;size +L0203_Check2: + ;-----------------see what zone the hero is in------------------ + ;get hero object + ld a,[hero0_object] + ld l,a + ld a,[hero0_object+1] + ld h,a + + ;get hero's location from hero object + ld a,OBJBANK + ld [$ff70],a + ld e,[hl] + inc hl + ld d,[hl] + + ;see what zone he's in + ld a,ZONEBANK + ld [$ff70],a + ld a,[de] + and %1111 ;no exit info please + ld [mapHeroZone],a + + ;change palette if changed zones + ld hl,(.lastZone + (levelCheckRAM-L0203_Check2)) + cp [hl] + jr z,.afterChangePalette + + ;note new zone + ld [(.lastZone + (levelCheckRAM-L0203_Check2))],a + + ld a,FADEBANK + ld [$ff70],a + + ;copy standard palette to fadeFinalPalette, dividing colors by two + ld hl,(.stdPaletteData + (levelCheckRAM-L0203_Check2)) + ld de,fadeFinalPalette + ld c,32 +.copyLoop + push bc + + ld a,[mapHeroZone] + ld c,a + + ld a,[hl+] ;low byte + ld b,a + ld a,[hl+] ;high byte + + ;rotate ab by # bits equal to the current zone number - 1 + dec c + jr z,.shiftDone + +.shiftLoop + rrca + rr b + + ;mask ab with %00111101 11101111 + push af + ld a,b + and %11101111 + ld b,a + pop af + and %00111101 + + dec c + jr nz,.shiftLoop + +.shiftDone + ;write ba to dest + push af + ld a,b + ld [de],a + inc de + pop af + ld [de],a + inc de + + pop bc + + dec c + jr nz,.copyLoop + + ;restore red + ld de,fadeFinalPalette + 10 + ld hl,(.stdPaletteData + (levelCheckRAM-L0203_Check2))+10 + ld c,6 +.restoreLoop + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.restoreLoop + + ld a,60 + call FadeInit + +.afterChangePalette + ret + +.lastZone DB $ff + +.stdPaletteData + DW $0068, $2108, $4210, $7fff ;Palette 0 (Grey) + DW $0068, $000A, $001f, $7fff ;Palette 1 (Red) + DW $0068, $5000, $7e00, $7fff ;Palette 2 (Blue) + DW $0068, $0140, $03e0, $7fff ;Palette 3 (Green) + DW $0068, $4008, $5192, $7fff ;Palette 4 (Purple) + DW $0068, $01cd, $03fe, $7fff ;Palette 5 (Yellow) + DW $0068, $00d1, $09ff, $7fff ;Palette 6 (Brown) + DW $0068, $4412, $799c, $7fff ;Palette 7 (Fuscia) +L0203_CheckFinished: + + +PRINTT " 0203 Level Check Size: " +PRINTV (L0203_CheckFinished - L0203_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l0204.asm b/Source/l0204.asm new file mode 100644 index 0000000..5d150aa --- /dev/null +++ b/Source/l0204.asm @@ -0,0 +1,155 @@ +;level0204.asm +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "LevelsSection0204",ROMX +;--------------------------------------------------------------------- + +L0204_Contents:: + DW L0204_Load + DW L0204_Init + DW L0204_Check + DW L0204_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0204_Load: + DW ((L0204_LoadFinished - L0204_Load2)) ;size +L0204_Load2: + call ParseMap + ret + +L0204_LoadFinished: + +L0204_Map: +INCBIN "Data/Levels/l0204_path.lvl" + +;gtx_intro: INCBIN "Data/Dialog/Landing/intro.gtx" +;gtx_intro2: INCBIN "Data/Dialog/Landing/intro2.gtx" +;gtx_finished: INCBIN "Data/Dialog/Landing/finished.gtx" +;gtx_finished2: INCBIN "Data/Dialog/Landing/finished2.gtx" + +;--------------------------------------------------------------------- +L0204_Init: +;--------------------------------------------------------------------- + DW ((L0204_InitFinished - L0204_Init2)) ;size +L0204_Init2: + + ret + +L0204_InitFinished: + + +;--------------------------------------------------------------------- +L0204_Check: +;--------------------------------------------------------------------- + DW ((L0204_CheckFinished - L0204_Check) - 2) ;size +L0204_Check2: + ;-----------------see what zone the hero is in------------------ + ;get hero object + ld a,[hero0_object] + ld l,a + ld a,[hero0_object+1] + ld h,a + + ;get hero's location from hero object + ld a,OBJBANK + ld [$ff70],a + ld e,[hl] + inc hl + ld d,[hl] + + ;see what zone he's in + ld a,ZONEBANK + ld [$ff70],a + ld a,[de] + and %1111 ;no exit info please + ld [mapHeroZone],a + + ;change palette if changed zones + ld hl,(.lastZone + (levelCheckRAM-L0204_Check2)) + cp [hl] + jr z,.afterChangePalette + + ;note new zone + ld [(.lastZone + (levelCheckRAM-L0204_Check2))],a + + ld a,FADEBANK + ld [$ff70],a + + ;copy standard palette to fadeFinalPalette, dividing colors by two + ld hl,(.stdPaletteData + (levelCheckRAM-L0204_Check2)) + ld de,fadeFinalPalette + ld c,32 +.copyLoop + push bc + + ld a,[mapHeroZone] + ld c,a + + ld a,[hl+] ;low byte + ld b,a + ld a,[hl+] ;high byte + + ;rotate ab by # bits equal to the current zone number - 1 + dec c + jr z,.shiftDone + +.shiftLoop + rrca + rr b + + ;mask ab with %00111101 11101111 + push af + ld a,b + and %11101111 + ld b,a + pop af + and %00111101 + + dec c + jr nz,.shiftLoop + +.shiftDone + ;write ba to dest + push af + ld a,b + ld [de],a + inc de + pop af + ld [de],a + inc de + + pop bc + + dec c + jr nz,.copyLoop + + ld a,60 + call FadeInit + +.afterChangePalette + ret + +.lastZone DB $ff + +.stdPaletteData + DW $0068, $2108, $4210, $7fff ;Palette 0 (Grey) + DW $0068, $000A, $001f, $7fff ;Palette 1 (Red) + DW $0068, $5000, $7e00, $7fff ;Palette 2 (Blue) + DW $0068, $0140, $03e0, $7fff ;Palette 3 (Green) + DW $0068, $4008, $5192, $7fff ;Palette 4 (Purple) + DW $0068, $01cd, $03fe, $7fff ;Palette 5 (Yellow) + DW $0068, $00d1, $09ff, $7fff ;Palette 6 (Brown) + DW $0068, $4412, $799c, $7fff ;Palette 7 (Fuscia) +L0204_CheckFinished: + + +PRINTT " 0204 Level Check Size: " +PRINTV (L0204_CheckFinished - L0204_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l0205.asm b/Source/l0205.asm new file mode 100644 index 0000000..3d25731 --- /dev/null +++ b/Source/l0205.asm @@ -0,0 +1,284 @@ +;level0205.asm bridge +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATER_INDEX EQU 7 +DARKWATER_INDEX EQU 22 +FLOOR_INDEX EQU 40 +STONEHEAD_INDEX EQU 41 +STUNNED_INDEX EQU 42 + +STATE_BROKEN EQU 1 +STATE_BROKEN_TALKED EQU 2 +STATE_FIXED EQU 3 +STATE_TALK_WHAT EQU 4 +STATE_TALK_FORGIVE EQU 5 +STATE_TALK_OKAY EQU 6 +STATE_TALK_GOWEST EQU 7 +STATE_TALK_AFTER EQU 8 +STATE_WAIT_DIALOG EQU 9 + +;from l0312 +STATE_HIVE_DESTROYED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "LevelsSection0205",ROMX,BANK[MAP0ROM] +;--------------------------------------------------------------------- + +dialog: +l0205_idiot_gtx: + INCBIN "Data/Dialog/talk/l0205_idiot.gtx" + +l0205_what_gtx: + INCBIN "Data/Dialog/talk/l0205_what.gtx" + +l0205_forgive_gtx: + INCBIN "Data/Dialog/talk/l0205_forgive.gtx" + +l0205_okay_gtx: + INCBIN "Data/Dialog/talk/l0205_okay.gtx" + +l0205_west_gtx: + INCBIN "Data/Dialog/talk/l0205_west.gtx" + +L0205_Contents:: + DW L0205_Load + DW L0205_Init + DW L0205_Check + DW L0205_Map + +;--------------------------------------------------------------------- +; landing +;--------------------------------------------------------------------- +L0205_Load: + DW ((L0205_LoadFinished - L0205_Load2)) ;size +L0205_Load2: + call ParseMap + ret + +L0205_LoadFinished: + +L0205_Map: +INCBIN "Data/Levels/l0205_bridge.lvl" + +;gtx_intro: INCBIN "Data/Dialog/Landing/intro.gtx" +;gtx_intro2: INCBIN "Data/Dialog/Landing/intro2.gtx" +;gtx_finished: INCBIN "Data/Dialog/Landing/finished.gtx" +;gtx_finished2: INCBIN "Data/Dialog/Landing/finished2.gtx" + +;--------------------------------------------------------------------- +L0205_Init: +;--------------------------------------------------------------------- + DW ((L0205_InitFinished - L0205_Init2)) ;size +L0205_Init2: + ld a,BANK(dialog) + ld [dialogBank],a + call SetPressBDialog + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$c3] ;bee house in sunset + cp STATE_HIVE_DESTROYED + jr nz,.notFixed + + ld a,STATE_FIXED + ldio [mapState],a +.notFixed + + ldio a,[mapState] + ld hl,((.resetStateTable-L0205_Init2)+levelCheckRAM) + call Lookup8 + ldio [mapState],a + + cp STATE_BROKEN + jr nz,.fixed + call ((.removeBridge-L0205_Init2)+levelCheckRAM) + jr .statesDone +.fixed + ld bc,classWallCreature + call DeleteObjectsOfClass +.statesDone + + ret + +.removeBridge + ld bc,classWallCreature + ld de,classWallTalker + call ChangeClass + ld bc,classStunnedWall + call DeleteObjectsOfClass + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d34f + call ((.remove10Tiles-L0205_Init2)+levelCheckRAM) + ld hl,$d350 + call ((.remove10Tiles-L0205_Init2)+levelCheckRAM) + ret + +.remove10Tiles + ld a,[mapPitch] + ld e,a + ld d,0 + ld c,10 + ld a,WATER_INDEX +.remove10TilesLoop + ld [hl],a + add hl,de + dec c + jr nz,.remove10TilesLoop + ret + +.resetStateTable + DB STATE_BROKEN,STATE_BROKEN,STATE_BROKEN + DB STATE_FIXED,STATE_FIXED + +L0205_InitFinished: + + +;--------------------------------------------------------------------- +L0205_Check: +;--------------------------------------------------------------------- + DW ((L0205_CheckFinished - L0205_Check) - 2) ;size +L0205_Check2: + call SetSkipStackPos + call CheckSkip + + call ((.animateWater-L0205_Check2)+levelCheckRAM) + + VECTORTOSTATE ((.stateTable - L0205_Check2) + levelCheckRAM) + ret + +.stateTable + DW ((.checkDialog-L0205_Check2)+levelCheckRAM) + DW ((.checkDialog-L0205_Check2)+levelCheckRAM) + DW ((.normal-L0205_Check2)+levelCheckRAM) + DW ((.normal-L0205_Check2)+levelCheckRAM) + DW ((.what-L0205_Check2)+levelCheckRAM) + DW ((.forgive-L0205_Check2)+levelCheckRAM) + DW ((.okay-L0205_Check2)+levelCheckRAM) + DW ((.gowest-L0205_Check2)+levelCheckRAM) + DW ((.afterDialog-L0205_Check2)+levelCheckRAM) + DW ((.waitDialog-L0205_Check2)+levelCheckRAM) + +.normal + ret + +.checkDialog + ld a,[dialogNPC_speakerIndex] + or a + ret z + + ld a,%1 + call DisableDialogBalloons + + call MakeIdle + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ;Idiot says what? + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,((.what-L0205_Check2) + levelCheckRAM) + call SetDialogForward + ld de,((.afterDialog-L0205_Check2) + levelCheckRAM) + call SetDialogSkip + DIALOGTOP l0205_idiot_gtx + WAITDIALOG STATE_TALK_WHAT + ret + +.what + ;what? + call ClearDialog + ld a,[dialogNPC_heroIndex] + ld c,a + DIALOGBOTTOM l0205_what_gtx + WAITDIALOG STATE_TALK_FORGIVE + ret + +.forgive + ;Forgive me + call ClearDialog + ld a,[dialogNPC_speakerIndex] + ld c,a + DIALOGTOP l0205_forgive_gtx + WAITDIALOG STATE_TALK_OKAY + ret + +.okay + ;okay + call ClearDialog + ld a,[dialogNPC_heroIndex] + ld c,a + DIALOGBOTTOM l0205_okay_gtx + WAITDIALOG STATE_TALK_GOWEST + ret + +.gowest + ;go west + call ClearDialog + ld a,[dialogNPC_speakerIndex] + ld c,a + DIALOGTOP l0205_west_gtx + WAITDIALOG STATE_TALK_AFTER + ret + +.afterDialog + ld a,STATE_BROKEN_TALKED + ldio [mapState],a + call ClearDialog + call MakeNonIdle + + ld de,0 + call SetDialogForward + call SetDialogSkip + + xor a + ld [dialogNPC_speakerIndex],a + + ret + + +.animateWater + ldio a,[updateTimer] + and %11 + ret nz + + ;animate water by cycling the tile mapping of class 7 from + ;7-10 and class 22 from 22-25 + ld a,TILEINDEXBANK + ld [$ff70],a + + ld hl,bgTileMap+WATER_INDEX + ld a,[hl] + sub WATER_INDEX + inc a + and %11 + add WATER_INDEX + ld [hl],a + + ld hl,bgTileMap+DARKWATER_INDEX + ld a,[hl] + sub DARKWATER_INDEX + inc a + and %11 + add DARKWATER_INDEX + ld [hl],a + + ret + +.waitDialog + STDWAITDIALOG + ret + +L0205_CheckFinished: + + +PRINTT " 0205 Level Check Size: " +PRINTV (L0205_CheckFinished - L0205_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l0211.asm b/Source/l0211.asm new file mode 100644 index 0000000..37cc473 --- /dev/null +++ b/Source/l0211.asm @@ -0,0 +1,90 @@ +; l0211.asm +; Generated 10.20.2000 by mlevel +; Modified 10.20.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +FIRST_HOLE EQU 26 + +;--------------------------------------------------------------------- +SECTION "Level0211Section",ROMX +;--------------------------------------------------------------------- + +L0211_Contents:: + DW L0211_Load + DW L0211_Init + DW L0211_Check + DW L0211_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0211_Load: + DW ((L0211_LoadFinished - L0211_Load2)) ;size +L0211_Load2: + call ParseMap + + ;alter yellow palette to purple w/black + ld a,FADEBANK + ld bc,6 + ld de,gamePalette + 5*8 + 2 + ld hl,((.purpleBlackPalette-L0211_Load2)+levelCheckRAM) + call MemCopy + ret + +.purpleBlackPalette + DW $4008,$5192,$0000 + +L0211_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0211_Map: +INCBIN "Data/Levels/l0211_tower.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0211_Init: + DW ((L0211_InitFinished - L0211_Init2)) ;size +L0211_Init2: + ret + +L0211_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0211_Check: + DW ((L0211_CheckFinished - L0211_Check2)) ;size +L0211_Check2: + call ((.checkFalling-L0211_Check2)+levelCheckRAM) + ret + +.checkFalling + ld a,[timeToChangeLevel] + or a + ret z + + ld a,[exitTileIndex] + cp FIRST_HOLE + ret c + + ld hl,((.fallSound-L0211_Check2)+levelCheckRAM) + call PlaySound + ld a,15 + call Delay + ret + +.fallSound + DB 1,$7e,$80,$f5,$00,$86 + +L0211_CheckFinished: +PRINTT "0211 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0211_LoadFinished - L0211_Load2) +PRINTT " / " +PRINTV (L0211_InitFinished - L0211_Init2) +PRINTT " / " +PRINTV (L0211_CheckFinished - L0211_Check2) +PRINTT "\n" + diff --git a/Source/l0212.asm b/Source/l0212.asm new file mode 100644 index 0000000..dde8690 --- /dev/null +++ b/Source/l0212.asm @@ -0,0 +1,59 @@ +; l0212.asm +; Generated 08.31.2000 by mlevel +; Modified 08.31.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0212Section",ROMX +;--------------------------------------------------------------------- + +L0212_Contents:: + DW L0212_Load + DW L0212_Init + DW L0212_Check + DW L0212_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0212_Load: + DW ((L0212_LoadFinished - L0212_Load2)) ;size +L0212_Load2: + call ParseMap + ret + +L0212_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0212_Map: +INCBIN "Data/Levels/l0212_sunsethouseup.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0212_Init: + DW ((L0212_InitFinished - L0212_Init2)) ;size +L0212_Init2: + ret + +L0212_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0212_Check: + DW ((L0212_CheckFinished - L0212_Check2)) ;size +L0212_Check2: + ret + +L0212_CheckFinished: +PRINTT "0212 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0212_LoadFinished - L0212_Load2) +PRINTT " / " +PRINTV (L0212_InitFinished - L0212_Init2) +PRINTT " / " +PRINTV (L0212_CheckFinished - L0212_Check2) +PRINTT "\n" + diff --git a/Source/l0213.asm b/Source/l0213.asm new file mode 100644 index 0000000..da8e513 --- /dev/null +++ b/Source/l0213.asm @@ -0,0 +1,249 @@ +; l0213.asm storming moonbase obliteration +; Generated 07.09.2000 by mlevel +; Modified 07.31.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0213Section",ROMX +;--------------------------------------------------------------------- + +L0213_Contents:: + DW L0213_Load + DW L0213_Init + DW L0213_Check + DW L0213_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0213_Load: + DW ((L0213_LoadFinished - L0213_Load2)) ;size +L0213_Load2: + call ParseMap + ret + +L0213_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0213_Map: +INCBIN "Data/Levels/l0213_intro_ba3.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +VAR_LIGHT EQU 0 +VAR_STATIC EQU 1 +VAR_FACEON EQU 2 + +MONITORINDEX EQU 36 +LIGHTINDEX EQU 40 +FACEINDEX EQU 44 +STATICINDEX EQU 48 + + +L0213_Init: + DW ((L0213_InitFinished - L0213_Init2)) ;size +L0213_Init2: + ld a,[bgTileMap+LIGHTINDEX] ;tile index of first light + ld [levelVars+VAR_LIGHT],a + ld a,[bgTileMap+STATICINDEX] ;tile index of monitor + ld [levelVars+VAR_STATIC],a + xor a + ld [levelVars+VAR_FACEON],a + + ;have general gyro face west + ld bc,classGeneralGyro + call FindClassIndex + ld c,a + call GetFirst + ld a,DIR_WEST + call SetFacing + ld b,METHOD_DRAW + call CallMethod + + ld bc,classGeneralGyro + ld de,classDoNothing + call ChangeClass + ret + +L0213_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0213_Check: + DW ((L0213_CheckFinished - L0213_Check2)) ;size +L0213_Check2: + ;animate dice lights + ld a,[levelVars+VAR_LIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+LIGHTINDEX + call ((.updateTwoLights - L0213_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L0213_Check2) + levelCheckRAM) + + ;animate static + ld a,[levelVars+VAR_STATIC] + ld b,a + ldio a,[updateTimer] + rrca + and %00000010 + add b + ld hl,bgTileMap+STATICINDEX + ld [hl+],a + inc a + ld [hl+],a + + ;----cycle monitor displays----------------------------------- + ld a,MAPBANK + ldio [$ff70],a + + ;pick a random location + ld a,22 + call GetRandomNumZeroToN + + ;ld a,31 + ;call GetRandomNumMask + ;cp 23 + ;jr nc,.afterScreen + + sla a + ld d,0 + ld e,a + ld hl,((.monitorLocations-L0213_Check2)+levelCheckRAM) + add de + ld a,[hl+] + ld h,[hl] + ld l,a + + ;is this static? + ld a,[hl] + cp STATICINDEX + jr z,.staticToFace + + ;is this the face? + ld a,[hl] + cp FACEINDEX + jr z,.turnOffFace + + ;is the face on elsewhere? + ld a,[levelVars+VAR_FACEON] + or a + jr nz,.afterScreen ;face is on; skip + + ;turn this to static to become the face + ld a,1 + ld [levelVars+VAR_FACEON],a + ld a,STATICINDEX + jr .pickedScreen + +.turnOffFace + xor a + ld [levelVars+VAR_FACEON],a + ld a,MONITORINDEX ;monitor + jr .pickedScreen + +.staticToFace + ld a,FACEINDEX ;face +.pickedScreen + ld [hl+],a + inc a + ld [hl+],a + inc a + cp STATICINDEX+2 + jr nz,.afterStaticCheck + sub 2 +.afterStaticCheck + ld de,30 ;map pitch + add hl,de + ld [hl+],a + inc a + ld [hl+],a + +.afterScreen + ;----Check to see if confronting General Gyro----------------- + ld hl,hero0_data + call ((.checkConfrontGyro - L0213_Check2) + levelCheckRAM) + ld hl,hero1_data + call ((.checkConfrontGyro - L0213_Check2) + levelCheckRAM) + ret + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L0213_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + +.checkConfrontGyro + inc hl + ld a,[hl-] + or a ;look at the hero class index I've been given + ret z ;not present if zero + + ld c,a ;save class index + ld a,[hl] ;get my joy index + ld [dialogJoyIndex],a ;save that in case I talk + + ld de,HERODATA_TYPE + add hl,de + ld a,[hl] ;get my type + ld [dialogSpeakerIndex],a ;save that for talking too + + ;get my object then my zone + call GetFirst + call GetCurZone + + cp 9 ;in same zone as Gyro? + ret nz ;all for naught + + ld hl,$1302 ;next level + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + call YankRemotePlayer + ld a,1 + ld [timeToChangeLevel],a + ret + + +.monitorLocations +DW $d021,$d033,$d056,$d058,$d05a,$d05c ;6 +DW $d262,$d264,$d266 ;3 +DW $d2d2,$d312,$d352,$d392 ;4 +DW $d255,$d295,$d2d5,$d315,$d355,$d395 ;6 +DW $d25c,$d29c,$d2dc,$d31c ;4 23 + +L0213_CheckFinished: + +PRINTT "0213 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0213_LoadFinished - L0213_Load2) +PRINTT " / " +PRINTV (L0213_InitFinished - L0213_Init2) +PRINTT " / " +PRINTV (L0213_CheckFinished - L0213_Check2) +PRINTT "\n" + diff --git a/Source/l0214.asm b/Source/l0214.asm new file mode 100644 index 0000000..1d45169 --- /dev/null +++ b/Source/l0214.asm @@ -0,0 +1,552 @@ +; l0214.asm skippy's prison +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0214Section",ROMX +;--------------------------------------------------------------------- + +L0214_Contents:: + DW L0214_Load + DW L0214_Init + DW L0214_Check + DW L0214_Map + +dialog: +haiku_enterPrison_gtx: + INCBIN "Data/Dialog/intro_haiku/haiku_enterPrison.gtx" + +skippy_clues_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_clues.gtx" + +skippy_letsGo_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_letsGo.gtx" + +skippy_holdOn_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_holdOn.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0214_Load: + DW ((L0214_LoadFinished - L0214_Load2)) ;size +L0214_Load2: + call ParseMap + ret + +L0214_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0214_Map: +INCBIN "Data/Levels/l0214_intro_haiku3.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +STATE_INITIALDRAW EQU 0 +STATE_ENTER EQU 1 +STATE_CLUES EQU 2 +STATE_ALARMOFF EQU 3 +STATE_DIALOG_WAIT EQU 4 +STATE_WAIT_DIALOG EQU 4 +STATE_NEXTLEVEL EQU 5 +STATE_LEAVE EQU 6 +STATE_NORMAL EQU 7 + +VAR_LIGHT EQU 0 +VAR_FLASHER EQU 1 +VAR_PRISONOPEN EQU 2 + +LIGHTINDEX EQU 37 +FLASHERINDEX EQU 42 +GUARDINDEX EQU 48 +GOBLININDEX EQU 49 +SKIPPYINDEX EQU 50 + +L0214_Init: + DW ((L0214_InitFinished - L0214_Init2)) ;size +L0214_Init2: + call SetPressBDialog + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,[bgTileMap+LIGHTINDEX] ;tile index of first light + ld [levelVars+VAR_LIGHT],a + + ld a,[bgTileMap+FLASHERINDEX] ;tile index of first light + ld [levelVars+VAR_FLASHER],a + + ld bc,classCroutonDoctor + ld de,classGuard + call ChangeClass + + ;dest dest to unreachable so Skippy will pace around + ld c,SKIPPYINDEX + call GetFirst + ld hl,$d1ef + call SetActorDestLoc + + xor a + ld [guardAlarm],a + ldio [mapState],a + ld [levelVars + VAR_PRISONOPEN],a + + ret + +L0214_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0214_Check: + DW ((L0214_CheckFinished - L0214_Check2)) ;size +L0214_Check2: + call ((.animateLights - L0214_Check2) + levelCheckRAM) + call ((.moveGuards - L0214_Check2) + levelCheckRAM) + call ((.checkOpenPrison - L0214_Check2) + levelCheckRAM) + + ldio a,[mapState] + cp STATE_NORMAL + jr nz,.checkInitialDraw + + call ((.checkNearSkippy - L0214_Check2) + levelCheckRAM) + call ((.addGoblins - L0214_Check2) + levelCheckRAM) + + ret + +.checkInitialDraw + cp STATE_INITIALDRAW + jr nz,.checkAlarmOff + + ld a,STATE_ENTER + ldio [mapState],a + ret + +.checkAlarmOff + cp STATE_ALARMOFF + jr nz,.checkDialogWait + + call ((.checkNearSkippy - L0214_Check2) + levelCheckRAM) + ;fade the palette if alarm just tripped + ld a,[guardAlarm] + or a + ret z + + ld a,BANK(alarm_gbm) + ld hl,alarm_gbm + call InitMusic + + ld hl,gamePalette + ld de,fadeCurPalette + call CopyPalette64 + ld hl,((.darkRedPalette - L0214_Check2) + levelCheckRAM) + ld de,fadeFinalPalette + call CopyPalette32 + ld de,fadeFinalPalette+64 + call CopyPalette32 + ld a,16 + call FadeInit + ld de,gamePalette + call CopyPalette32 + ld de,gamePalette+64 + call CopyPalette32 + + ;remove door + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d023 + xor a + ld [hl+],a + ld [hl+],a + ld hl,$d242 + ld [hl+],a + ld [hl+],a + + ld a,STATE_NORMAL + ;ldio [mapState+1],a + ;ld a,STATE_DIALOG_WAIT + ldio [mapState],a + + ret + +.checkDialogWait + cp STATE_DIALOG_WAIT + jr nz,.checkNextLevel + + call CheckDialogContinue + or a + ret z + + call RestoreIdle + + ld bc,classDoNothing + ld de,classCroutonGoblin + call ChangeClass + ld bc,classDoNothing2 + ld de,classGuard + call ChangeClass + + ldio a,[mapState+1] + ldio [mapState],a + ret + +.checkNextLevel + cp STATE_NEXTLEVEL + jr nz,.checkEnter + + ld hl,$0314 + ld a,h + ld [curLevelIndex+1],a + ld a,l + ld [curLevelIndex],a + ld a,EXIT_D + call YankRemotePlayer + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.checkEnter + cp STATE_ENTER + jr nz,.checkClues + + ;ld a,1 + ;ld [heroesIdle],a + ;call SetSpeakerToFirstHero + ;ld a,BANK(haiku_enterPrison_gtx) + ;ld de,haiku_enterPrison_gtx + ;call ShowDialogAtBottomNoWait + ;ld a,STATE_CLUES + ;ldio [mapState+1],a + ;ld a,STATE_DIALOG_WAIT + ;ldio [mapState],a + + xor a + ld [heroesIdle],a + ld [allIdle],a + call SetSpeakerToFirstHero + DIALOGBOTTOM haiku_enterPrison_gtx + WAITDIALOG STATE_CLUES + ret + +.checkClues + cp STATE_CLUES + jr nz,.checkLeave + + xor a + ld [heroesIdle],a + ld [allIdle],a + ld c,SKIPPYINDEX + DIALOGTOP skippy_clues_gtx + WAITDIALOG STATE_ALARMOFF + ret + +.checkLeave + call ((.addGoblins - L0214_Check2) + levelCheckRAM) + ret + +;----support routines------------------------------------------------- + +.addGoblins + ;normal state + ;add goblins + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d023 + ld a,[hl] + or a + jr nz,.afterAddGoblin1 + + ld c,GOBLININDEX + call CreateInitAndDrawObject + +.afterAddGoblin1 + ld hl,$d242 + ld a,[hl] + or a + jr nz,.afterAddGoblin2 + + ld c,GOBLININDEX + call CreateInitAndDrawObject + +.afterAddGoblin2 + ret + +.checkOpenPrison + ld a,[levelVars + VAR_PRISONOPEN] + or a + ret nz + + ld a,[hero0_index] + call ((.checkHeroOpen - L0214_Check2) + levelCheckRAM) + ld a,[hero1_index] + call ((.checkHeroOpen - L0214_Check2) + levelCheckRAM) + ret + +.checkHeroOpen + or a + ret z + + ld c,a + ld [dialogSpeakerIndex],a + call GetFirst + call GetCurLocation + ld a,h + cp $d1 + ret nz + ld a,l + cp $ca + ret nz + + ;open bars + ld a,1 + ld [levelVars + VAR_PRISONOPEN],a + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d1cc + call ((.clearBars - L0214_Check2) + levelCheckRAM) + ld hl,$d1ec + call ((.clearBars - L0214_Check2) + levelCheckRAM) + ld hl,((.openBarsSound - L0214_Check2) + levelCheckRAM) + call PlaySound + ld c,SKIPPYINDEX + call GetFirst + ld hl,$d1ef + call SetActorDestLoc + ret + +.openBarsSound + DB 4,$00,$f4,$4f,$80 + +.clearBars + ld c,8 + xor a +.clearBarsLoop + ld [hl+],a + dec c + jr nz,.clearBarsLoop + ret + +.checkNearSkippy + ld a,[hero0_index] + call ((.checkHeroNearSkippy - L0214_Check2) + levelCheckRAM) + ld a,[hero1_index] + call ((.checkHeroNearSkippy - L0214_Check2) + levelCheckRAM) + ret + +.checkHeroNearSkippy + or a + ret z + + ld c,a + call GetFirst + call GetCurZone + cp 3 + ret nz + + call SetSpeakerFromHeroIndex + ld a,[guardAlarm] + or a + jr nz,.alarmIsOn + + ld a,1 + ld [heroesIdle],a + ld bc,classCroutonGoblin + ld de,classDoNothing + call ChangeClass + ld bc,classGuard + ld de,classDoNothing2 + call ChangeClass + ld a,BANK(skippy_letsGo_gtx) + ld de,skippy_letsGo_gtx + ld c,SKIPPYINDEX + call ShowDialogAtTopNoWait + + ld a,STATE_NEXTLEVEL + ldio [mapState+1],a + ld a,STATE_DIALOG_WAIT + ldio [mapState],a + ret + +.alarmIsOn + ld a,1 + ld [heroesIdle],a + ld bc,classCroutonGoblin + ld de,classDoNothing + call ChangeClass + ld bc,classGuard + ld de,classDoNothing2 + call ChangeClass + ld a,BANK(skippy_holdOn_gtx) + ld de,skippy_holdOn_gtx + ld c,SKIPPYINDEX + call ShowDialogAtTopNoWait + + ld a,STATE_LEAVE + ldio [mapState+1],a + ld a,STATE_DIALOG_WAIT + ldio [mapState],a + ret + +.animateLights + + ;animate dice lights + ld a,[levelVars+VAR_LIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+LIGHTINDEX + call ((.updateTwoLights - L0214_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L0214_Check2) + levelCheckRAM) + + ;flasher + ld a,[guardAlarm] + or a + jr z,.afterAnimateFlasher + + ld hl,levelVars+VAR_FLASHER + ldio a,[updateTimer] + rrca + rrca + push af + and %11 + add [hl] + ld [bgTileMap+FLASHERINDEX],a + pop af + and %100 + jr z,.afterAnimateFlasher + ld hl,((.klaxonSound - L0214_Check2) + levelCheckRAM) + call PlaySound +.afterAnimateFlasher + ret + +.moveGuards + ;----move guards---------------------------------------------- + ld c,GUARDINDEX + call GetFirst + or a + jr z,.afterMoveGuards + +.moveGuard + call IsActorAtDest + or a + jr z,.nextGuard + call GetCurLocation + push bc + push de + ld d,h ;save location + ld e,l + ld hl,((.patrolTable-L0214_Check2)+levelCheckRAM) + ld c,14 ;14 chances to find cur location + +.tryNextLocation + ld a,[hl+] + cp e + jr nz,.notTheOne + ld a,[hl] + cp d + jr nz,.notTheOne + + ;found it + pop de + pop bc + inc hl + ld a,[hl+] + ld h,[hl] + ld l,a + call SetActorDestLoc + jr .nextGuard + +.notTheOne + inc hl + inc hl + inc hl + dec c + jr nz,.tryNextLocation + pop de + pop bc + +.nextGuard + call GetNextObject + or a + jr nz,.moveGuard + +.afterMoveGuards + ret + +.patrolTable + DW $d042,$d046 + DW $d046,$d0a6 + DW $d0a6,$d0a2 + DW $d0a2,$d042 + + DW $d0eb,$d16b + DW $d16b,$d0eb + + DW $d0f1,$d171 + DW $d171,$d0f1 + + DW $d166,$d126 + DW $d126,$d166 + + DW $d204,$d202 + DW $d202,$d204 + + DW $d206,$d208 + DW $d208,$d206 + ;14 total + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L0214_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + +.darkRedPalette +DW $0000, $0424, $0848, $0c6f +DW $0000, $0005, $000f, $0c6f +DW $0000, $080a, $0c4f, $0c6f +DW $0000, $0025, $006f, $0c6f +DW $0000, $0808, $082a, $0c6f +DW $0000, $0027, $006f, $0c6f +DW $0000, $0008, $002f, $0c6f +DW $0000, $0809, $0c2f, $0c6f + + +.klaxonSound + DB 4,$00,$f7,$5a,$c0 + +L0214_CheckFinished: +PRINTT "0214 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0214_LoadFinished - L0214_Load2) +PRINTT " / " +PRINTV (L0214_InitFinished - L0214_Init2) +PRINTT " / " +PRINTV (L0214_CheckFinished - L0214_Check2) +PRINTT "\n" + diff --git a/Source/l0215.asm b/Source/l0215.asm new file mode 100644 index 0000000..7afc7ca --- /dev/null +++ b/Source/l0215.asm @@ -0,0 +1,1148 @@ +; l0215.asm BRAINIAC computer room +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + + +;--------------------------------------------------------------------- +SECTION "Level0215Section",ROMX +;--------------------------------------------------------------------- + +L0215_Contents:: + DW L0215_Load + DW L0215_Init + DW L0215_Check + DW L0215_Map + +brainiac_bg:: + INCBIN "../fgbpix/main_intro/brainiac.bg" + +haiku_bg:: + INCBIN "../fgbpix/mainchardialog/haiku.bg" + +dialog: +skippycapture_gyves1_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_gyves1.gtx" + +skippycapture_gyves1_2_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_gyves1_2.gtx" + +skippycapture_brainiac1_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_brainiac1.gtx" + +skippycapture_skippy1_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_skippy1.gtx" + +skippycapture_skippy1_2_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_skippy1_2.gtx" + +skippycapture_brainiac2_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_brainiac2.gtx" + +skippycapture_skippy2_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_skippy2.gtx" + +skippycapture_brainiac3_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_brainiac3.gtx" + +skippycapture_flour1_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_flour1.gtx" + +skippycapture_haiku1_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_haiku1.gtx" + +skippycapture_flour2_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_flour2.gtx" + +skippycapture_haiku2_gtx: + INCBIN "Data/Dialog/main_intro/skippycapture_haiku2.gtx" + +;----BS Dialog-------------------------------------- + +bs_justYouAnMe_gtx: + INCBIN "Data/Dialog/intro_bs/bs_justYouAnMe.gtx" + +brainiac_sorry_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_sorry.gtx" + +bs_answerSomeQuestions_gtx: + INCBIN "Data/Dialog/intro_bs/bs_answerSomeQuestions.gtx" + +brainiac_lovzHelping_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_lovzHelping.gtx" + +bs_showMe_gtx: + INCBIN "Data/Dialog/intro_bs/bs_showMe.gtx" + +brainiac_notNeedBRAINIAC_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_notNeedBRAINIAC.gtx" + +bs_gotAPoint_gtx: + INCBIN "Data/Dialog/intro_bs/bs_gotAPoint.gtx" + +brainiac_sezAsk_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_sezAsk.gtx" + +bs_reallyHard_gtx: + INCBIN "Data/Dialog/intro_bs/bs_reallyHard.gtx" + +brainiac_canAnswerAny_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_canAnswerAny.gtx" + +bs_hereGoes_gtx: + INCBIN "Data/Dialog/intro_bs/bs_hereGoes.gtx" + +brainiac_computes1_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes1.gtx" + +brainiac_computes2_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes2.gtx" + +brainiac_computes3_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes3.gtx" + +brainiac_computes4_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes4.gtx" + +brainiac_computes5_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes5.gtx" + +brainiac_computes6_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes6.gtx" + +brainiac_computes7_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_computes7.gtx" + +bs_well_gtx: + INCBIN "Data/Dialog/intro_bs/bs_well.gtx" + +brainiac_surrender_gtx: + INCBIN "Data/Dialog/intro_bs/brainiac_surrender.gtx" + +bs_wellSee_gtx: + INCBIN "Data/Dialog/intro_bs/bs_wellSee.gtx" + +STATE_MOVETOBRAINIAC EQU 1 +STATE_GYROTALKDELAY1 EQU 2 +STATE_GYROTALKDELAY2 EQU 3 +STATE_BRAINIACCINEMA EQU 4 +STATE_SKIPPY_CAPTURE EQU 5 +STATE_FLOUR_ORDERS_RESCUE EQU 6 +STATE_NORMAL EQU 7 +STATE_WAIT_DIALOG EQU 8 +STATE_BS1 EQU 9 +STATE_BS2 EQU 10 +STATE_BS3 EQU 11 +STATE_BS4 EQU 12 +STATE_BS5 EQU 13 +STATE_BS6 EQU 14 +STATE_BS7 EQU 15 +STATE_BS8 EQU 16 +STATE_BS9 EQU 17 +STATE_BS10 EQU 18 +STATE_BS11 EQU 19 +STATE_BS12 EQU 20 +STATE_BS13 EQU 21 +STATE_BS14 EQU 22 +STATE_BS15 EQU 23 +STATE_BS16 EQU 24 +STATE_BS17 EQU 25 +STATE_BS18 EQU 26 +STATE_BS19 EQU 27 +STATE_BS20 EQU 28 +STATE_BS21 EQU 29 + +VAR_LIGHT EQU 0 +VAR_GYRO EQU 1 +VAR_SKIPPY EQU 2 +VAR_DELAY EQU 3 +GYRO_DEST EQU $d0ce + +LIGHTINDEX EQU 45 +HULKINDEX EQU 134 +GRUNTINDEX EQU 135 +GYROINDEX EQU 137 +SKIPPYINDEX EQU 138 +PURPLEINDEX EQU 139 +YELLOWINDEX EQU 140 +BRAINIACINDEX EQU 141 + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0215_Load: + DW ((L0215_LoadFinished - L0215_Load2)) ;size +L0215_Load2: +;ld a,STATE_NORMAL +;ldio [mapState],a + ldio a,[mapState] + or a + jr nz,.notZero + + ld a,1 + ld [mapState],a + +.notZero + cp STATE_BRAINIACCINEMA + jr z,.brainiacCinema + + cp STATE_MOVETOBRAINIAC + jr z,.zeroHealth + + cp STATE_SKIPPY_CAPTURE + jr nz,.parseMap + + ld a,BANK(alarm_gbm) + ld hl,alarm_gbm + call InitMusic + +.zeroHealth + ;zero health so sparklies don't show up on screen + xor a + ld [hero0_health],a + ld [hero1_health],a + + ld a,2 + ld [canJoinMap],a + + +.parseMap + call ParseMap + ret + +.brainiacCinema + ;----display cinema scenes------------------------------------ + ;----"BRAINIAC givez it to you straight :)"------------------- + ld a,BANK(dialog) + ld [dialogBank],a + +.brain1 + ld hl,dialogSettings + res DLG_BORDER_BIT,[hl] + ld a,BANK(brainiac_bg) + ld hl,brainiac_bg + call LoadCinemaBG + call ((.fadeFromBlack16-L0215_Load2)+levelCheckRAM) + + ld de,((.skippy1 - L0215_Load2) + levelCheckRAM) + call SetDialogForward + ld de,((.endCinemaPart1 - L0215_Load2) + levelCheckRAM) + call SetDialogSkip + + ld c,0 + ld de,skippycapture_brainiac1_gtx + call ShowDialogAtBottomNoWait + + ld d,4 + LONGCALLNOARGS AnimateBRAINIAC + + ;----"Well hot dang!!!"--------------------------------------- +.skippy1 + call ((.fadeToBlack1 - L0215_Load2) + levelCheckRAM) + call ((.loadSkippy - L0215_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L0215_Load2) + levelCheckRAM) + + ld de,((.skippy2 - L0215_Load2) + levelCheckRAM) + call SetDialogForward + + ld c,0 + ld de,skippycapture_skippy1_gtx + call ShowDialogAtBottomNoWait + + ld d,3 + LONGCALLNOARGS AnimateSkippy + + ;----"just what were you fellers plannin to do"--------------- +.skippy2 + ld c,0 + ld de,skippycapture_skippy1_2_gtx + call ShowDialogAtBottomNoWait + + ld de,((.brain2 - L0215_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,5 + LONGCALLNOARGS AnimateSkippy + + ;----"we gonna capture big B12 officer"----------------------- +.brain2 + call ((.loadBRAINIAC - L0215_Load2) + levelCheckRAM) + + ld de,((.skippy3 - L0215_Load2) + levelCheckRAM) + call SetDialogForward + + ld c,0 + ld de,skippycapture_brainiac2_gtx + call ShowDialogAtBottomNoWait + + ld d,6 + LONGCALLNOARGS AnimateBRAINIAC + + ;----"And just how were you thinkin you'd do that?"----------- +.skippy3 + call ((.fadeToBlack1 - L0215_Load2) + levelCheckRAM) + call ((.loadSkippy - L0215_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L0215_Load2) + levelCheckRAM) + + ld de,((.brain3 - L0215_Load2) + levelCheckRAM) + call SetDialogForward + + ld c,0 + ld de,skippycapture_skippy2_gtx + call ShowDialogAtBottomNoWait + + ld d,4 + LONGCALLNOARGS AnimateSkippy + + ;----"BRAINIAC sez gonna make him think he capture the base"-- +.brain3 + call ((.loadBRAINIAC - L0215_Load2) + levelCheckRAM) + + ld de,((.endCinemaPart1 - L0215_Load2) + levelCheckRAM) + call SetDialogForward + + ld c,0 + ld de,skippycapture_brainiac3_gtx + call ShowDialogAtBottomNoWait + + ld d,6 + LONGCALLNOARGS AnimateBRAINIAC + +.endCinemaPart1 + call ClearDialog + + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld a,STATE_SKIPPY_CAPTURE + ldio [mapState],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.fadeToBlack1 + call ClearDialog + ld a,1 + call SetupFadeToBlack + jr .fadeCommon + +.fadeFromBlack1 + ld a,1 + call SetupFadeFromBlack + jr .fadeCommon + +.fadeToBlack16 + ld a,16 + call SetupFadeToBlack + jr .fadeCommon + +.fadeFromBlack16 + ld a,16 + call SetupFadeFromBlack + jr .fadeCommon + +.fadeCommon + call WaitFade + ret + +.loadSkippy + ld a,BANK(skippy_bg) + ld hl,skippy_bg + call LoadCinemaBG + ret + +.loadBRAINIAC + call ((.fadeToBlack1-L0215_Load2)+levelCheckRAM) + call ClearDialog + ld a,BANK(brainiac_bg) + ld hl,brainiac_bg + jr .loadCommon + ret + +.loadFlour + ld a,BANK(flour_bg) + ld hl,flour_bg + call LoadCinemaBG + ret + +.loadCommon + call LoadCinemaBG + call ((.fadeFromBlack1-L0215_Load2)+levelCheckRAM) + ret + +L0215_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0215_Map: +INCBIN "Data/Levels/l0215_intro_bs3.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0215_Init: + DW ((L0215_InitFinished - L0215_Init2)) ;size +L0215_Init2: +;ld a,STATE_NORMAL +;ldio [mapState],a + call SetPressBDialog + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,10 + ld [camera_i],a + ld [camera_j],a + ld a,1 + ld [mapLeft],a + + ld a,[bgTileMap+LIGHTINDEX] ;tile index of first light + ld [levelVars+VAR_LIGHT],a + + ldio a,[mapState] + cp STATE_MOVETOBRAINIAC + jr nz,.checkSkippyCapture + + ;----skippy and gyro moving to brainiac----------------------- + ;create Gyro, Skippy, and some B12 guards + call ((.removeHulks - L0215_Init2) + levelCheckRAM) + ld c,GYROINDEX ;gyro + ld hl,$d22a + call CreateInitAndDrawObject + ld hl,$d18e + call SetActorDestLoc + call PointerDEToIndex + ld [levelVars + VAR_GYRO],a + + ld c,SKIPPYINDEX ;skippy + ld hl,$d1ea + call CreateInitAndDrawObject + ld hl,$d14e + call SetActorDestLoc + call PointerDEToIndex + ld [levelVars + VAR_SKIPPY],a + + call ((.createGuards - L0215_Init2) + levelCheckRAM) + call ((.removeHeroes - L0215_Init2) + levelCheckRAM) + + ld bc,classB12Soldier + ld de,classDoNothing + call ChangeClass + + ld bc,classMajorSkippy + ld de,classActor2x2 + call ChangeClass + + ld bc,classGeneralGyro + ld de,classActor2x2 + call ChangeClass + ret + +.checkSkippyCapture + cp STATE_SKIPPY_CAPTURE + jr nz,.checkNormal + + ;----crouton grunts moving to kill guards--------------------- + call ((.removeHulks - L0215_Init2) + levelCheckRAM) + ld c,GYROINDEX + ld hl,$d0ce + call CreateInitAndDrawObject + ld b,DIR_EAST + call ((.faceDirection - L0215_Init2) + levelCheckRAM) + ld a,GROUP_MONSTERN + call SetGroup + + ld c,SKIPPYINDEX ;skippy + ld hl,$d0cb + call CreateInitAndDrawObject + ld b,DIR_EAST + call ((.faceDirection - L0215_Init2) + levelCheckRAM) + ld a,GROUP_MONSTERN + call SetGroup + + call ((.createGuards - L0215_Init2) + levelCheckRAM) + call ((.removeHeroes - L0215_Init2) + levelCheckRAM) + + ;create croutons + ld b,6 + ld hl,$d1e9 + call ((.createCroutons - L0215_Init2) + levelCheckRAM) + ld b,6 + ld hl,$d209 + call ((.createCroutons - L0215_Init2) + levelCheckRAM) + ld b,2 + ld hl,$d22a + call ((.createCroutons - L0215_Init2) + levelCheckRAM) + ld b,2 + ld hl,$d24a + call ((.createCroutons - L0215_Init2) + levelCheckRAM) + + ld bc,classMajorSkippy + ld de,classDoNothing + call ChangeClass + + ld bc,classGeneralGyro + ld de,classDoNothing + call ChangeClass + + ret + +.checkNormal + ;----BS Enters room, must kill hulks-------------------------- + ld a,30 ;delay after killing last hulk before text box + ld [levelVars + VAR_DELAY],a + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +.createGuards + ld c,PURPLEINDEX ;purple guard + ld hl,$d144 + call CreateInitAndDrawObject + ld b,DIR_EAST + call ((.faceDirection - L0215_Init2) + levelCheckRAM) + ld hl,$d184 + call CreateInitAndDrawObject + ld b,DIR_EAST + call ((.faceDirection - L0215_Init2) + levelCheckRAM) + + ld c,YELLOWINDEX ;yellow guard + ld hl,$d152 + call CreateInitAndDrawObject + ld b,DIR_WEST + call ((.faceDirection - L0215_Init2) + levelCheckRAM) + ld hl,$d192 + call CreateInitAndDrawObject + ld b,DIR_WEST + call ((.faceDirection - L0215_Init2) + levelCheckRAM) + ret + +.createCroutons + ld c,GRUNTINDEX ;crouton class index + call CreateInitAndDrawObject + inc hl + dec b + jr nz,.createCroutons + ret + +.faceDirection + ld a,b + call SetFacing + ld b,METHOD_DRAW + call CallMethod + ret + +.removeHeroes + ld a,[hero0_index] + call ((.removeHero - L0215_Init2) + levelCheckRAM) + + ld a,[hero1_index] + call ((.removeHero - L0215_Init2) + levelCheckRAM) + + ld a,1 + ld [heroesIdle],a + ret + +.removeHero + or a + ret z + ld c,a + call GetFirst + call GetFacing + ld c,a + call RemoveFromMap + ret + +.removeHulks + ld a,HULKINDEX + call DeleteObjectsOfClassIndex + ret + +L0215_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +;STATE_MOVETOBRAINIAC EQU 0 +;STATE_SKIPPY_CAPTURE EQU 1 +;STATE_NORMAL EQU 2 +L0215_Check: + DW ((L0215_CheckFinished - L0215_Check2)) ;size +L0215_Check2: + call SetSkipStackPos + call CheckSkip + + ;animate dice lights + ld a,[levelVars+VAR_LIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+LIGHTINDEX + call ((.updateTwoLights - L0215_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L0215_Check2) + levelCheckRAM) + + VECTORTOSTATE ((.stateTable - L0215_Check2) + levelCheckRAM) + +.stateTable + DW ((.checkMoveToBRAINIAC-L0215_Check2)+levelCheckRAM) + DW ((.checkMoveToBRAINIAC-L0215_Check2)+levelCheckRAM) + DW ((.checkGyroTalkDelay1-L0215_Check2)+levelCheckRAM) + DW ((.checkGyroTalkDelay2-L0215_Check2)+levelCheckRAM) + DW ((.checkBRAINIACCinema-L0215_Check2)+levelCheckRAM) + DW ((.checkSkippyCapture-L0215_Check2)+levelCheckRAM) + DW ((.checkFlourOrdersRescue-L0215_Check2)+levelCheckRAM) + DW ((.checkNormal-L0215_Check2)+levelCheckRAM) + DW ((.checkWaitDialog-L0215_Check2)+levelCheckRAM) + DW ((.checkBS1-L0215_Check2)+levelCheckRAM) + DW ((.checkBS2-L0215_Check2)+levelCheckRAM) + DW ((.checkBS3-L0215_Check2)+levelCheckRAM) + DW ((.checkBS4-L0215_Check2)+levelCheckRAM) + DW ((.checkBS5-L0215_Check2)+levelCheckRAM) + DW ((.checkBS6-L0215_Check2)+levelCheckRAM) + DW ((.checkBS7-L0215_Check2)+levelCheckRAM) + DW ((.checkBS8-L0215_Check2)+levelCheckRAM) + DW ((.checkBS9-L0215_Check2)+levelCheckRAM) + DW ((.checkBS10-L0215_Check2)+levelCheckRAM) + DW ((.checkBS11-L0215_Check2)+levelCheckRAM) + DW ((.checkBS12-L0215_Check2)+levelCheckRAM) + DW ((.checkBS13-L0215_Check2)+levelCheckRAM) + DW ((.checkBS14-L0215_Check2)+levelCheckRAM) + DW ((.checkBS15-L0215_Check2)+levelCheckRAM) + DW ((.checkBS16-L0215_Check2)+levelCheckRAM) + DW ((.checkBS17-L0215_Check2)+levelCheckRAM) + DW ((.checkBS18-L0215_Check2)+levelCheckRAM) + DW ((.checkBS19-L0215_Check2)+levelCheckRAM) + DW ((.checkBS20-L0215_Check2)+levelCheckRAM) + DW ((.checkBS21-L0215_Check2)+levelCheckRAM) + +.checkNormal + ;normal state + ;wait 'till all hulks are dead + ld c,HULKINDEX + call GetFirst + or a + ret nz + + ld a,1 + ld [heroesIdle],a + ld a,STATE_BS1 + ldio [mapState],a + ret + +.checkWaitDialog + STDWAITDIALOG + ret + +.setupBRAINIAC + call SetSpeakerToFirstHero + ld c,BRAINIACINDEX + ld hl,dialogSettings + set DLG_BRAINIAC_BIT,[hl] + ret + +.checkBS1 + ld hl,levelVars + VAR_DELAY ;allow bullets to explode etc + dec [hl] + ret nz + + ld de,((.endBSBRAINIAC - L0215_Check2) + levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_justYouAnMe_gtx + WAITDIALOG STATE_BS2 + ret +.checkBS2 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_sorry_gtx + WAITDIALOG STATE_BS3 + ret +.checkBS3 + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_answerSomeQuestions_gtx + WAITDIALOG STATE_BS4 + ret +.checkBS4 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_lovzHelping_gtx + WAITDIALOG STATE_BS5 + ret +.checkBS5 + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_showMe_gtx + WAITDIALOG STATE_BS6 + ret +.checkBS6 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_notNeedBRAINIAC_gtx + WAITDIALOG STATE_BS7 + ret +.checkBS7 + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_gotAPoint_gtx + WAITDIALOG STATE_BS8 + ret +.checkBS8 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_sezAsk_gtx + WAITDIALOG STATE_BS9 + ret +.checkBS9 + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_reallyHard_gtx + WAITDIALOG STATE_BS10 + ret +.checkBS10 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_canAnswerAny_gtx + WAITDIALOG STATE_BS11 + ret +.checkBS11 + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_hereGoes_gtx + WAITDIALOG STATE_BS12 + ret +.checkBS12 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes1_gtx + WAITDIALOGNOCLEAR STATE_BS13 + ret +.checkBS13 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes2_gtx + WAITDIALOGNOCLEAR STATE_BS14 + ret +.checkBS14 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes3_gtx + WAITDIALOGNOCLEAR STATE_BS15 + ret +.brainiacPrint + ld h,29 + ld de,$1205 + ld bc,$0203 + call BlitMap + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + ret +.checkBS15 + ld l,1 + call ((.brainiacPrint-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes4_gtx + WAITDIALOGNOCLEAR STATE_BS16 + ret +.checkBS16 + ld l,4 + call ((.brainiacPrint-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes5_gtx + WAITDIALOGNOCLEAR STATE_BS17 + ret +.checkBS17 + ld l,7 + call ((.brainiacPrint-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes6_gtx + WAITDIALOGNOCLEAR STATE_BS18 + ret +.checkBS18 + ld l,10 + call ((.brainiacPrint-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_computes7_gtx + WAITDIALOG STATE_BS19 + ret +.checkBS19 + call SetSpeakerToFirstHero + DIALOGBOTTOM bs_well_gtx + WAITDIALOG STATE_BS20 + ret +.checkBS20 + call ((.setupBRAINIAC-L0215_Check2)+levelCheckRAM) + DIALOGTOP brainiac_surrender_gtx + WAITDIALOG STATE_BS21 + ret +.checkBS21 + ;call SetSpeakerToFirstHero + ;DIALOGBOTTOM bs_wellSee_gtx +.endBSBRAINIAC + call ClearDialog + ld a,96 + call SetupFadeToStandard + call WaitFade + ld hl,fadeFinalPalette + ld de,gamePalette + call CopyPalette64 + + ld hl,$1402 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + call YankRemotePlayer + ld a,1 + ld [timeToChangeLevel],a + ret + + +.checkMoveToBRAINIAC + ld de,((.checkBRAINIACCinema - L0215_Check2) + levelCheckRAM) + call SetDialogSkip + ld de,((.bothAtFinalDest - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + ;skippy there yet? + ld c,SKIPPYINDEX ;skippy class index + ld a,[levelVars + VAR_SKIPPY] + call ((.checkActorAtDest - L0215_Check2) + levelCheckRAM) + jr z,.afterResetSkippy + + ;reset skippy once he gets to his waypoint + call GetCurZone + cp 4 + jr nz,.afterResetSkippy + + ld hl,$d0cb + call SetActorDestLoc + ret + +.checkActorAtDest + call IndexToPointerDE + call IsActorAtDest + or a + ret + +.afterResetSkippy + ;do the same for gyro + ld c,GYROINDEX + ld a,[levelVars + VAR_GYRO] + call ((.checkActorAtDest - L0215_Check2) + levelCheckRAM) + ret z + + call GetCurZone + cp 4 + jr nz,.bothAtFinalDest + + ld hl,GYRO_DEST + call SetActorDestLoc + ret + +.bothAtFinalDest + call SetSpeakerToFirstHero + ld c,GYROINDEX + ld de,skippycapture_gyves1_gtx + call ShowDialogAtBottomNoWait + + ld de,((.checkBRAINIACCinema - L0215_Check2) + levelCheckRAM) + call SetDialogSkip + ld de,((.gyvesIntroduce2 - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + ld a,100 + ld [levelVars + VAR_DELAY],a + ld a,STATE_GYROTALKDELAY1 + ldio [mapState],a + ret + +.checkGyroTalkDelay1 + ld hl,levelVars + VAR_DELAY + dec [hl] + ret nz + +.gyvesIntroduce2 + ld a,140 ;reset delay for next dialog + ld [levelVars + VAR_DELAY],a + + ;display second half of dialog + ld c,GYROINDEX ;gyro class index + ld de,skippycapture_gyves1_2_gtx + call ShowDialogAtBottomNoWait + + ld de,((.checkBRAINIACCinema - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + ld a,STATE_GYROTALKDELAY2 + ldio [mapState],a + ld a,1 + ;ld [timeToChangeLevel],a + ret + +.checkGyroTalkDelay2 + ld hl,levelVars + VAR_DELAY + dec [hl] + ret nz + +.checkBRAINIACCinema + call ClearDialog + ld a,STATE_BRAINIACCINEMA + ldio [mapState],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.checkSkippyCapture + ld de,((.fadeOut - L0215_Check2) + levelCheckRAM) + call SetDialogForward + call SetDialogSkip + + ;wait until all the guards (PURPLEINDEX & YELLOWINDEX are dead + ;OR all the croutons (GRUNTINDEX) are dead (god forbid) + ld c,PURPLEINDEX + call GetFirst + or a + jr nz,.checkCroutonsRemaining + + ld c,YELLOWINDEX + call GetFirst + or a + jr z,.fadeOut + +.checkCroutonsRemaining + ld c,GRUNTINDEX + call GetFirst + or a + ret nz + +.fadeOut + ld a,96 + call SetupFadeToBlack + + ld de,0 + call SetDialogForward + call SetDialogSkip + + ld a,STATE_FLOUR_ORDERS_RESCUE + ldio [mapState],a + + ret + +.checkFlourOrdersRescue +.isFlourOrdersRescue + ld a,[specialFX] + and FX_FADE + ret nz + + ld hl,dialogSettings + res DLG_BORDER_BIT,[hl] + call ResetSprites + ld a,BANK(moon_bg) + ld hl,moon_bg + call LoadCinemaBG + + ld de,((.endCinemaPart2 - L0215_Check2) + levelCheckRAM) + call SetDialogSkip + ld de,((.flour1 - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + ld a,60 + call SetupFadeFromBlack + call WaitFade + + ld a,60 + call Delay + + call ((.fadeToBlack16-L0215_Check2)+levelCheckRAM) + + ld a,BANK(triumphBIG_bg) + ld hl,triumphBIG_bg + call LoadCinemaBG + + ld bc,$140c + ld hl,$1402 + ld de,$0000 + call CinemaBlitRect + ld a,1 + call Delay + + call ((.fadeFromBlack16-L0215_Check2)+levelCheckRAM) + + ld a,30 + call Delay + +.flour1 + ;----"Oh my gosh Major Skippy's been kidnapped!"-------------- + call ((.fadeToBlack16-L0215_Check2)+levelCheckRAM) + call ((.loadFlour - L0215_Check2) + levelCheckRAM) + call ((.fadeFromBlack16-L0215_Check2)+levelCheckRAM) + + ld c,0 + ld de,skippycapture_flour1_gtx + call ShowDialogAtBottomNoWait + + ld de,((.haiku1 - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + ld d,6 + LONGCALLNOARGS AnimateFlour + +.haiku1 + ;----"Yes what is it?"---------------------------------------- + call ((.loadHaiku - L0215_Check2) + levelCheckRAM) + + ld a,BANK(haiku_gbm) + ld hl,haiku_gbm + call InitMusic + + ld c,0 + ld de,skippycapture_haiku1_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour2 - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + LONGCALLNOARGS AnimateHaiku + +.flour2 + ;----"Take your merry band of Ninjas..."---------------------- + call ((.fadeToBlack1-L0215_Check2)+levelCheckRAM) + call ((.loadFlour - L0215_Check2) + levelCheckRAM) + call ((.fadeFromBlack1-L0215_Check2)+levelCheckRAM) + + ld c,0 + ld de,skippycapture_flour2_gtx + call ShowDialogAtBottomNoWait + + ld de,((.haiku2 - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + ld d,6 + LONGCALLNOARGS AnimateFlour + +.haiku2 + ;----"I will take Quatrain..."-------------------------------- + call ((.loadHaiku - L0215_Check2) + levelCheckRAM) + + ld c,0 + ld de,skippycapture_haiku2_gtx + call ShowDialogAtBottomNoWait + + ld de,((.endCinemaPart2 - L0215_Check2) + levelCheckRAM) + call SetDialogForward + + LONGCALLNOARGS AnimateHaiku + +.endCinemaPart2 + call ClearDialog + + ;ld a,16 + ;call SetupFadeToWhite + ;call WaitFade + + ld hl,2058 ;haiku + ld a,l + ld [hero0_class],a + ld a,h + ld [hero0_class+1],a + ld a,HERO_HAIKU_FLAG + ld [hero0_type],a + + ld hl,FREEVERSE_CINDEX + ld a,l + ld [hero1_class],a + ld a,h + ld [hero1_class+1],a + ld a,HERO_BS_FLAG + ld [hero1_type],a + + xor a + ld [hero0_health],a + ld [hero1_health],a + + ld hl,$0014 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld a,1 + ld [timeToChangeLevel],a + + ld a,STATE_NORMAL + ldio [mapState],a + + ret + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L0215_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.fadeToBlack1 + ld a,1 + call SetupFadeToBlack + jr .fadeCommon + +.fadeFromBlack1 + ld a,1 + call SetupFadeFromBlack + jr .fadeCommon + +.fadeToBlack16 + ld a,16 + call SetupFadeToBlack + jr .fadeCommon + +.fadeFromBlack16 + ld a,16 + call SetupFadeFromBlack + jr .fadeCommon + +.fadeCommon + call WaitFade + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + +.loadSkippy + ld a,BANK(skippy_bg) + ld hl,skippy_bg + jr .loadCommon + ret + +.loadFlour + ld a,BANK(flour_bg) + ld hl,flour_bg + call LoadCinemaBG + ret + +.loadHaiku + call ((.fadeToBlack1-L0215_Check2)+levelCheckRAM) + ld a,BANK(haiku_bg) + ld hl,haiku_bg + jr .loadCommon + ret + +.loadCommon + call LoadCinemaBG + call ((.fadeFromBlack1-L0215_Check2)+levelCheckRAM) + ret + +L0215_CheckFinished: +PRINTT "0215 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0215_LoadFinished - L0215_Load2) +PRINTT " / " +PRINTV (L0215_InitFinished - L0215_Init2) +PRINTT " / " +PRINTV (L0215_CheckFinished - L0215_Check2) +PRINTT "\n" + diff --git a/Source/l0300.asm b/Source/l0300.asm new file mode 100644 index 0000000..5389db3 --- /dev/null +++ b/Source/l0300.asm @@ -0,0 +1,59 @@ +; l0300.asm +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0300Section",ROMX +;--------------------------------------------------------------------- + +L0300_Contents:: + DW L0300_Load + DW L0300_Init + DW L0300_Check + DW L0300_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0300_Load: + DW ((L0300_LoadFinished - L0300_Load2)) ;size +L0300_Load2: + call ParseMap + ret + +L0300_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0300_Map: +INCBIN "Data/Levels/l0300_mist.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0300_Init: + DW ((L0300_InitFinished - L0300_Init2)) ;size +L0300_Init2: + ret + +L0300_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0300_Check: + DW ((L0300_CheckFinished - L0300_Check2)) ;size +L0300_Check2: + ret + +L0300_CheckFinished: +PRINTT "0300 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0300_LoadFinished - L0300_Load2) +PRINTT " / " +PRINTV (L0300_InitFinished - L0300_Init2) +PRINTT " / " +PRINTV (L0300_CheckFinished - L0300_Check2) +PRINTT "\n" + diff --git a/Source/l0301.asm b/Source/l0301.asm new file mode 100644 index 0000000..3ca516d --- /dev/null +++ b/Source/l0301.asm @@ -0,0 +1,74 @@ +; l0301.asm mist se of evil village +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0301Section",ROMX +;--------------------------------------------------------------------- + +L0301_Contents:: + DW L0301_Load + DW L0301_Init + DW L0301_Check + DW L0301_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0301_Load: + DW ((L0301_LoadFinished - L0301_Load2)) ;size +L0301_Load2: + call ParseMap + ret + +L0301_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0301_Map: +INCBIN "Data/Levels/l0301_mist.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0301_Init: + DW ((L0301_InitFinished - L0301_Init2)) ;size +L0301_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0301_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0301_Check: + DW ((L0301_CheckFinished - L0301_Check2)) ;size +L0301_Check2: + call ((.animateWater-L0301_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0301_CheckFinished: +PRINTT "0301 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0301_LoadFinished - L0301_Load2) +PRINTT " / " +PRINTV (L0301_InitFinished - L0301_Init2) +PRINTT " / " +PRINTV (L0301_CheckFinished - L0301_Check2) +PRINTT "\n" + diff --git a/Source/l0302.asm b/Source/l0302.asm new file mode 100644 index 0000000..135c74d --- /dev/null +++ b/Source/l0302.asm @@ -0,0 +1,111 @@ +; l0302.asm mist landing +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +LIGHTINDEX EQU 61 +VAR_WATER EQU 0 +VAR_LIGHT EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level0302Section",ROMX +;--------------------------------------------------------------------- + +L0302_Contents:: + DW L0302_Load + DW L0302_Init + DW L0302_Check + DW L0302_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0302_Load: + DW ((L0302_LoadFinished - L0302_Load2)) ;size +L0302_Load2: + call ParseMap + ret + +L0302_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0302_Map: +INCBIN "Data/Levels/l0302_mistland.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0302_Init: + DW ((L0302_InitFinished - L0302_Init2)) ;size +L0302_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + ld a,BANK(mysterious_gbm) + ld hl,mysterious_gbm + call InitMusic + ret + +L0302_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0302_Check: + DW ((L0302_CheckFinished - L0302_Check2)) ;size +L0302_Check2: + call ((.animateWater-L0302_Check2)+levelCheckRAM) + call ((.animateLandingLights-L0302_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0302_Check2)+levelCheckRAM) + call ((.animateLight-L0302_Check2)+levelCheckRAM) + call ((.animateLight-L0302_Check2)+levelCheckRAM) + call ((.animateLight-L0302_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0302_CheckFinished: +PRINTT "0302 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0302_LoadFinished - L0302_Load2) +PRINTT " / " +PRINTV (L0302_InitFinished - L0302_Init2) +PRINTT " / " +PRINTV (L0302_CheckFinished - L0302_Check2) +PRINTT "\n" + diff --git a/Source/l0303.asm b/Source/l0303.asm new file mode 100644 index 0000000..170f33b --- /dev/null +++ b/Source/l0303.asm @@ -0,0 +1,78 @@ +; l0303.asm mist stone henge +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 3 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0303Section",ROMX +;--------------------------------------------------------------------- + +L0303_Contents:: + DW L0303_Load + DW L0303_Init + DW L0303_Check + DW L0303_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0303_Load: + DW ((L0303_LoadFinished - L0303_Load2)) ;size +L0303_Load2: + call ParseMap + ret + +L0303_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0303_Map: +INCBIN "Data/Levels/l0303_stone_mist.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0303_Init: + DW ((L0303_InitFinished - L0303_Init2)) ;size +L0303_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + ld a,BANK(mysterious_gbm) + ld hl,mysterious_gbm + call InitMusic + ret + +L0303_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0303_Check: + DW ((L0303_CheckFinished - L0303_Check2)) ;size +L0303_Check2: + call ((.animateWater-L0303_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0303_CheckFinished: +PRINTT "0303 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0303_LoadFinished - L0303_Load2) +PRINTT " / " +PRINTV (L0303_InitFinished - L0303_Init2) +PRINTT " / " +PRINTV (L0303_CheckFinished - L0303_Check2) +PRINTT "\n" + diff --git a/Source/l0304.asm b/Source/l0304.asm new file mode 100644 index 0000000..b40e836 --- /dev/null +++ b/Source/l0304.asm @@ -0,0 +1,253 @@ +; l0304.asm pansies eat shrooms +; Generated 08.03.2000 by mlevel +; Modified 08.03.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0304Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0304_spores_gtx: + INCBIN "Data/Dialog/talk/l0304_spores.gtx" + +L0304_Contents:: + DW L0304_Load + DW L0304_Init + DW L0304_Check + DW L0304_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0304_Load: + DW ((L0304_LoadFinished - L0304_Load2)) ;size +L0304_Load2: + call ParseMap + ret + +L0304_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0304_Map: +INCBIN "Data/Levels/l0304_shroom.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +PANSYINDEX1 EQU 45 +PANSYINDEX2 EQU 46 +PANSYINDEX3 EQU 47 +LOWSHROOMINDEX EQU 2 +HIGHSHROOMINDEX EQU 13 + +MAPPITCH EQU 32 + +STATE_NORMAL_INIT EQU 1 +STATE_NORMAL_TALK EQU 2 +STATE_NORMAL EQU 3 +STATE_SOLVED_INIT EQU 4 +STATE_SOLVED_TALK EQU 5 +STATE_SOLVED EQU 6 + +L0304_Init: + DW ((L0304_InitFinished - L0304_Init2)) ;size +L0304_Init2: + ldio a,[mapState] + ld hl,((.resetStateTable-L0304_Init2)+levelCheckRAM) + call Lookup8 + ldio [mapState],a + + STDSETUPDIALOG + + ld bc,ITEM_SPOREMASK + call HasInventoryItem + jr nz,.hasMask + + ld hl,HOffsetOnHBlank + call InstallHBlankHandler +.hasMask + + ;ld a,BANK(shroom_gbm) + ;ld hl,shroom_gbm + ;call InitMusic + + ;set the pansies to be friendly and to eat the shrooms + ld c,PANSYINDEX1 + call ((.makeFriendly-L0304_Init2)+levelCheckRAM) + ld c,PANSYINDEX2 + call ((.makeFriendly-L0304_Init2)+levelCheckRAM) + ld c,PANSYINDEX3 + call ((.makeFriendly-L0304_Init2)+levelCheckRAM) + + ld bc,classPansy + ld de,classHippiePansy + call ChangeClass + + ;remove the shrooms blocking the exit if level solved already + ldio a,[mapState] + cp STATE_SOLVED_INIT + ret nz + + ld hl,$d1dd + call ((.remove2x2-L0304_Init2)+levelCheckRAM) + + ld hl,$d23d + call ((.remove2x2-L0304_Init2)+levelCheckRAM) + ret + +.makeFriendly + call GetFirst + or a + ret z + +.continue + ld a,GROUP_MONSTERB + call SetGroup + ld hl,((HIGHSHROOMINDEX<<8) | LOWSHROOMINDEX) + call SetActorDestLoc + call GetNextObject + or a + jr nz,.continue + ret + +.remove2x2 + ld a,MAPBANK + ldio [$ff70],a + xor a + ld [hl+],a + ld [hl-],a + ld de,MAPPITCH + add hl,de + ld [hl+],a + ld [hl],a + ret + +.resetStateTable + DB STATE_NORMAL_INIT,STATE_NORMAL_INIT,STATE_NORMAL_INIT + DB STATE_NORMAL_INIT,STATE_SOLVED_INIT,STATE_SOLVED_INIT + DB STATE_SOLVED_INIT + +L0304_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0304_Check: + DW ((L0304_CheckFinished - L0304_Check2)) ;size +L0304_Check2: + call ((.updateWave-L0304_Check2)+levelCheckRAM) + ldio a,[mapState] + + cp STATE_NORMAL_INIT + jr z,.initialUpdate + cp STATE_SOLVED_INIT + jr z,.initialUpdate + + cp STATE_NORMAL_TALK + jr z,.talk + cp STATE_SOLVED_TALK + jr z,.talk + + ld a,1 + ld hl,((.checkSolved-L0304_Check2)+levelCheckRAM) + call CheckEachHero + ret + +.initialUpdate + inc a + ldio [mapState],a + ret + +.talk + ld bc,ITEM_SPOREMASK + call HasInventoryItem + jr nz,.afterTalk + + call MakeIdle + + ld de,((.afterTalk-L0304_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + ld de,l0304_spores_gtx + call ShowDialogAtBottom +.afterTalk + call ClearDialogSkipForward + call MakeNonIdle + ldio a,[mapState] + inc a + ldio [mapState],a + ret + +.checkSolved + or a + ret z + + ld c,a + call GetFirst ;get my hero object + call GetCurZone + cp 2 + jr z,.inZone2 + xor a ;return false + ret + +.inZone2 + ;in zone 2, level solved + ld a,STATE_SOLVED + ldio [mapState],a + ld a,1 ;return true + ret + +.updateWave + ld bc,ITEM_SPOREMASK + call HasInventoryItem + ret nz + + ;fill the horizontalOffset table with values from the sine table + ld a,TILEINDEXBANK + ldio [$ff70],a + ldio a,[updateTimer] + and 63 + ld e,a + ld d,0 + ld hl,((.sineTable-L0304_Check2)+levelCheckRAM) + add hl,de + ld de,horizontalOffset + ld c,144 +.updateLoop + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.updateLoop + + ld a,[horizontalOffset] + ld [lineZeroHorizontalOffset],a + + ld hl,hblankFlag + set 2,[hl] + + ret + +.sineTable ;four 64-byte sine waves, values between 0 and 7 +REPT 4 +DB 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7 +DB 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4 +DB 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 +DB 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3 +ENDR + +L0304_CheckFinished: +PRINTT "0304 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0304_LoadFinished - L0304_Load2) +PRINTT " / " +PRINTV (L0304_InitFinished - L0304_Init2) +PRINTT " / " +PRINTV (L0304_CheckFinished - L0304_Check2) +PRINTT "\n" + diff --git a/Source/l0305.asm b/Source/l0305.asm new file mode 100644 index 0000000..470abdc --- /dev/null +++ b/Source/l0305.asm @@ -0,0 +1,59 @@ +; l0305.asm +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0305Section",ROMX +;--------------------------------------------------------------------- + +L0305_Contents:: + DW L0305_Load + DW L0305_Init + DW L0305_Check + DW L0305_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0305_Load: + DW ((L0305_LoadFinished - L0305_Load2)) ;size +L0305_Load2: + call ParseMap + ret + +L0305_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0305_Map: +INCBIN "Data/Levels/L0305_path.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0305_Init: + DW ((L0305_InitFinished - L0305_Init2)) ;size +L0305_Init2: + ret + +L0305_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0305_Check: + DW ((L0305_CheckFinished - L0305_Check2)) ;size +L0305_Check2: + ret + +L0305_CheckFinished: +PRINTT "0305 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0305_LoadFinished - L0305_Load2) +PRINTT " / " +PRINTV (L0305_InitFinished - L0305_Init2) +PRINTT " / " +PRINTV (L0305_CheckFinished - L0305_Check2) +PRINTT "\n" + diff --git a/Source/l0306.asm b/Source/l0306.asm new file mode 100644 index 0000000..e3cc717 --- /dev/null +++ b/Source/l0306.asm @@ -0,0 +1,61 @@ +; l0306.asm Two Guns +; Generated 11.07.2000 by mlevel +; Modified 11.07.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0306Section",ROMX +;--------------------------------------------------------------------- + +L0306_Contents:: + DW L0306_Load + DW L0306_Init + DW L0306_Check + DW L0306_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0306_Load: + DW ((L0306_LoadFinished - L0306_Load2)) ;size +L0306_Load2: + call ParseMap + ret + +L0306_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0306_Map: +INCBIN "Data/Levels/l0306_twoguns.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0306_Init: + DW ((L0306_InitFinished - L0306_Init2)) ;size +L0306_Init2: + ld a,ENV_DIRT + call SetEnvEffect + ret + +L0306_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0306_Check: + DW ((L0306_CheckFinished - L0306_Check2)) ;size +L0306_Check2: + ret + +L0306_CheckFinished: +PRINTT "0306 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0306_LoadFinished - L0306_Load2) +PRINTT " / " +PRINTV (L0306_InitFinished - L0306_Init2) +PRINTT " / " +PRINTV (L0306_CheckFinished - L0306_Check2) +PRINTT "\n" + diff --git a/Source/l0307.asm b/Source/l0307.asm new file mode 100644 index 0000000..051bc21 --- /dev/null +++ b/Source/l0307.asm @@ -0,0 +1,66 @@ +; l0307.asm crouton outpost: desolation +; Generated 11.07.2000 by mlevel +; Modified 11.07.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0307Section",ROMX +;--------------------------------------------------------------------- + +L0307_Contents:: + DW L0307_Load + DW L0307_Init + DW L0307_Check + DW L0307_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0307_Load: + DW ((L0307_LoadFinished - L0307_Load2)) ;size +L0307_Load2: + call ParseMap + ret + +L0307_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0307_Map: +INCBIN "Data/Levels/l0307_outpost.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0307_Init: + DW ((L0307_InitFinished - L0307_Init2)) ;size +L0307_Init2: + ld a,ENV_DIRT + call SetEnvEffect + + ld bc,ITEM_CODE0307 + call RemoveClearanceIfTaken + ret + +L0307_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0307_Check: + DW ((L0307_CheckFinished - L0307_Check2)) ;size +L0307_Check2: + ret + +L0307_CheckFinished: +PRINTT "0307 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0307_LoadFinished - L0307_Load2) +PRINTT " / " +PRINTV (L0307_InitFinished - L0307_Init2) +PRINTT " / " +PRINTV (L0307_CheckFinished - L0307_Check2) +PRINTT "\n" + diff --git a/Source/l0308.asm b/Source/l0308.asm new file mode 100644 index 0000000..6c760fa --- /dev/null +++ b/Source/l0308.asm @@ -0,0 +1,61 @@ +; l0308.asm desert bridge +; Generated 11.07.2000 by mlevel +; Modified 11.07.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0308Section",ROMX +;--------------------------------------------------------------------- + +L0308_Contents:: + DW L0308_Load + DW L0308_Init + DW L0308_Check + DW L0308_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0308_Load: + DW ((L0308_LoadFinished - L0308_Load2)) ;size +L0308_Load2: + call ParseMap + ret + +L0308_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0308_Map: +INCBIN "Data/Levels/l0308_drylake.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0308_Init: + DW ((L0308_InitFinished - L0308_Init2)) ;size +L0308_Init2: + ld a,ENV_DIRT + call SetEnvEffect + ret + +L0308_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0308_Check: + DW ((L0308_CheckFinished - L0308_Check2)) ;size +L0308_Check2: + ret + +L0308_CheckFinished: +PRINTT "0308 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0308_LoadFinished - L0308_Load2) +PRINTT " / " +PRINTV (L0308_InitFinished - L0308_Init2) +PRINTT " / " +PRINTV (L0308_CheckFinished - L0308_Check2) +PRINTT "\n" + diff --git a/Source/l0309.asm b/Source/l0309.asm new file mode 100644 index 0000000..dadbbda --- /dev/null +++ b/Source/l0309.asm @@ -0,0 +1,59 @@ +; l0309.asm +; Generated 11.14.2000 by mlevel +; Modified 11.14.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0309Section",ROMX +;--------------------------------------------------------------------- + +L0309_Contents:: + DW L0309_Load + DW L0309_Init + DW L0309_Check + DW L0309_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0309_Load: + DW ((L0309_LoadFinished - L0309_Load2)) ;size +L0309_Load2: + call ParseMap + ret + +L0309_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0309_Map: +INCBIN "Data/Levels/l0309_desert.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0309_Init: + DW ((L0309_InitFinished - L0309_Init2)) ;size +L0309_Init2: + ret + +L0309_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0309_Check: + DW ((L0309_CheckFinished - L0309_Check2)) ;size +L0309_Check2: + ret + +L0309_CheckFinished: +PRINTT "0309 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0309_LoadFinished - L0309_Load2) +PRINTT " / " +PRINTV (L0309_InitFinished - L0309_Init2) +PRINTT " / " +PRINTV (L0309_CheckFinished - L0309_Check2) +PRINTT "\n" + diff --git a/Source/l0310.asm b/Source/l0310.asm new file mode 100644 index 0000000..375be81 --- /dev/null +++ b/Source/l0310.asm @@ -0,0 +1,93 @@ +; l0310.asm desert landing +; Generated 11.03.2000 by mlevel +; Modified 11.03.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 59 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0310Section",ROMX +;--------------------------------------------------------------------- + +L0310_Contents:: + DW L0310_Load + DW L0310_Init + DW L0310_Check + DW L0310_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0310_Load: + DW ((L0310_LoadFinished - L0310_Load2)) ;size +L0310_Load2: + call ParseMap + ret + +L0310_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0310_Map: +INCBIN "Data/Levels/l0310_desertland.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0310_Init: + DW ((L0310_InitFinished - L0310_Init2)) ;size +L0310_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + ret + +L0310_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0310_Check: + DW ((L0310_CheckFinished - L0310_Check2)) ;size +L0310_Check2: + call ((.animateLandingLights-L0310_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0310_Check2)+levelCheckRAM) + call ((.animateLight-L0310_Check2)+levelCheckRAM) + call ((.animateLight-L0310_Check2)+levelCheckRAM) + call ((.animateLight-L0310_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0310_CheckFinished: +PRINTT "0310 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0310_LoadFinished - L0310_Load2) +PRINTT " / " +PRINTV (L0310_InitFinished - L0310_Init2) +PRINTT " / " +PRINTV (L0310_CheckFinished - L0310_Check2) +PRINTT "\n" + diff --git a/Source/l0311.asm b/Source/l0311.asm new file mode 100644 index 0000000..01a590b --- /dev/null +++ b/Source/l0311.asm @@ -0,0 +1,90 @@ +; l0311.asm +; Generated 10.20.2000 by mlevel +; Modified 10.20.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +FIRST_HOLE EQU 25 + +;--------------------------------------------------------------------- +SECTION "Level0311Section",ROMX +;--------------------------------------------------------------------- + +L0311_Contents:: + DW L0311_Load + DW L0311_Init + DW L0311_Check + DW L0311_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0311_Load: + DW ((L0311_LoadFinished - L0311_Load2)) ;size +L0311_Load2: + call ParseMap + + ;alter yellow palette to purple w/black + ld a,FADEBANK + ld bc,6 + ld de,gamePalette + 5*8 + 2 + ld hl,((.purpleBlackPalette-L0311_Load2)+levelCheckRAM) + call MemCopy + ret + +.purpleBlackPalette + DW $4008,$5192,$0000 + +L0311_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0311_Map: +INCBIN "Data/Levels/l0311_tower.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0311_Init: + DW ((L0311_InitFinished - L0311_Init2)) ;size +L0311_Init2: + ret + +L0311_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0311_Check: + DW ((L0311_CheckFinished - L0311_Check2)) ;size +L0311_Check2: + call ((.checkFalling-L0311_Check2)+levelCheckRAM) + ret + +.checkFalling + ld a,[timeToChangeLevel] + or a + ret z + + ld a,[exitTileIndex] + cp FIRST_HOLE + ret c + + ld hl,((.fallSound-L0311_Check2)+levelCheckRAM) + call PlaySound + ld a,15 + call Delay + ret + +.fallSound + DB 1,$7e,$80,$f5,$00,$86 + +L0311_CheckFinished: +PRINTT "0311 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0311_LoadFinished - L0311_Load2) +PRINTT " / " +PRINTV (L0311_InitFinished - L0311_Init2) +PRINTT " / " +PRINTV (L0311_CheckFinished - L0311_Check2) +PRINTT "\n" + diff --git a/Source/l0312.asm b/Source/l0312.asm new file mode 100644 index 0000000..8275a58 --- /dev/null +++ b/Source/l0312.asm @@ -0,0 +1,70 @@ +; l0312.asm sunset bee house +; Generated 08.31.2000 by mlevel +; Modified 08.31.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +HIVE_INDEX EQU 15 + +STATE_HIVE_DESTROYED EQU 2 + +;--------------------------------------------------------------------- +SECTION "Level0312Section",ROMX +;--------------------------------------------------------------------- + +L0312_Contents:: + DW L0312_Load + DW L0312_Init + DW L0312_Check + DW L0312_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0312_Load: + DW ((L0312_LoadFinished - L0312_Load2)) ;size +L0312_Load2: + call ParseMap + ret + +L0312_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0312_Map: +INCBIN "Data/Levels/l0312_sunsethousedown.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0312_Init: + DW ((L0312_InitFinished - L0312_Init2)) ;size +L0312_Init2: + ret + +L0312_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0312_Check: + DW ((L0312_CheckFinished - L0312_Check2)) ;size +L0312_Check2: + ld c,15 + call GetFirst + or a + ret nz + + ld a,STATE_HIVE_DESTROYED + ldio [mapState],a + ret + +L0312_CheckFinished: +PRINTT "0312 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0312_LoadFinished - L0312_Load2) +PRINTT " / " +PRINTV (L0312_InitFinished - L0312_Init2) +PRINTT " / " +PRINTV (L0312_CheckFinished - L0312_Check2) +PRINTT "\n" + diff --git a/Source/l0314.asm b/Source/l0314.asm new file mode 100644 index 0000000..d9f43a2 --- /dev/null +++ b/Source/l0314.asm @@ -0,0 +1,560 @@ +; l0314.asm skippy runs for it +; Generated 07.09.2000 by mlevel +; Modified 07.09.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + + +;--------------------------------------------------------------------- +SECTION "Level0314Section",ROMX +;--------------------------------------------------------------------- + +L0314_Contents:: + DW L0314_Load + DW L0314_Init + DW L0314_Check + DW L0314_Map + +dialog: +skippy_woowee_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_woowee.gtx" + +flour_anySign_gtx: + INCBIN "Data/Dialog/intro_haiku/flour_anySign.gtx" + +haiku_theyNever_gtx: + INCBIN "Data/Dialog/intro_haiku/haiku_theyNever.gtx" + +flour_poorIambic_gtx: + INCBIN "Data/Dialog/intro_haiku/flour_poorIambic.gtx" + +flour_poorQuatrain_gtx: + INCBIN "Data/Dialog/intro_haiku/flour_poorQuatrain.gtx" + +flour_headHome_gtx: + INCBIN "Data/Dialog/intro_haiku/flour_headHome.gtx" + +skippy_notJustYet_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_notJustYet.gtx" + +skippy_smartestThing_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_smartestThing.gtx" + +skippy_loseForSure_gtx: + INCBIN "Data/Dialog/intro_haiku/skippy_loseForSure.gtx" + +flour_sendBS_gtx: + INCBIN "Data/Dialog/intro_haiku/flour_sendBS.gtx" + +flour_sabotage_gtx: + INCBIN "Data/Dialog/intro_haiku/flour_sabotage.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +STATE_WAITSKIPPY EQU 0 +STATE_WAITFADE EQU 1 +STATE_CINEMA EQU 2 + +L0314_Load: + DW ((L0314_LoadFinished - L0314_Load2)) ;size +L0314_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + + ldio a,[mapState] + cp STATE_WAITSKIPPY + jr nz,.doCinema + call ParseMap + ret + +.doCinema + ld a,BANK(intro_cinema_gbm) + ld hl,intro_cinema_gbm + call InitMusic + + ld a,BANK(moon_bg) + ld hl,moon_bg + call LoadCinemaBG + + ld de,((.endCinema - L0314_Load2) + levelCheckRAM) + call SetDialogSkip + ld de,((.skippy1 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,60 + call SetupFadeFromStandard + call WaitFade + + ld a,30 + call Delay + + ld a,16 + call SetupFadeToBlack + call WaitFade + + ld a,BANK(triumphBIG_bg) + ld hl,triumphBIG_bg + call LoadCinemaBG + + ld bc,$140c + ld hl,$1402 + ld de,$0000 + call CinemaBlitRect + ld a,1 + call Delay + + ld a,16 + call SetupFadeFromBlack + call WaitFade + + ld a,30 + call Delay + +.skippy1 + ;----"Woowee that was a close one!"--------------------------- + ld a,16 + call SetupFadeToBlack + call WaitFade + + call ((.loadSkippy - L0314_Load2) + levelCheckRAM) + + ld a,16 + call SetupFadeFromBlack + call WaitFade + + ld a,BANK(skippy_woowee_gtx) + ld c,0 + ld de,skippy_woowee_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour1 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,3 + LONGCALLNOARGS AnimateSkippy + +.flour1 + ;----"Any sign of Quatrain and Iambic Pentameter?"------------ + call ClearDialog + ld a,1 + call SetupFadeToBlack + call WaitFade + + call ((.loadFlour - L0314_Load2) + levelCheckRAM) + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld a,BANK(flour_anySign_gtx) + ld c,0 + ld de,flour_anySign_gtx + call ShowDialogAtBottomNoWait + + ld de,((.haiku1 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.haiku1 + call ClearDialog + ;----"They never returned..."--------------------------------- + ld a,1 + call SetupFadeToBlack + call WaitFade + + call ((.loadHaiku - L0314_Load2) + levelCheckRAM) + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld a,BANK(haiku_theyNever_gtx) + ld c,0 + ld de,haiku_theyNever_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour2 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + LONGCALLNOARGS AnimateHaiku + +.flour2 + call ClearDialog + ;----"Oh poor Iambic Pentamter!..."--------------------------- + ld a,1 + call SetupFadeToBlack + call WaitFade + + call ((.loadFlour - L0314_Load2) + levelCheckRAM) + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld a,BANK(flour_poorIambic_gtx) + ld c,0 + ld de,flour_poorIambic_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour3 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,6 + LONGCALLNOARGS AnimateFlour + +.flour3 + ;----"And poor Quatrain!..."---------------------------------- + ld a,BANK(flour_poorQuatrain_gtx) + ld c,0 + ld de,flour_poorQuatrain_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour4 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,6 + LONGCALLNOARGS AnimateFlour + +.flour4 + ;----"Well I guess it's time to head back home."-------------- + ld a,BANK(flour_headHome_gtx) + ld c,0 + ld de,flour_headHome_gtx + call ShowDialogAtBottomNoWait + + ld de,((.skippy2 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.skippy2 + call ClearDialog + ;----"Not just yet! We have to get rid..."------------------- + ld a,1 + call SetupFadeToBlack + call WaitFade + + call ((.loadSkippy - L0314_Load2) + levelCheckRAM) + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld a,BANK(skippy_notJustYet_gtx) + ld c,0 + ld de,skippy_notJustYet_gtx + call ShowDialogAtBottomNoWait + + ld de,((.skippy3 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateSkippy + +.skippy3 + ;----"I reckon it's just about the smartest thing..."--------- + ld a,BANK(skippy_smartestThing_gtx) + ld c,0 + ld de,skippy_smartestThing_gtx + call ShowDialogAtBottomNoWait + + ld de,((.skippy4 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,5 + LONGCALLNOARGS AnimateSkippy + +.skippy4 + ;----""We'll lose for sure..."-------------------------------- + ld a,BANK(skippy_loseForSure_gtx) + ld c,0 + ld de,skippy_loseForSure_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour5 - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,5 + LONGCALLNOARGS AnimateSkippy + +.flour5 + call ClearDialog + ;----"Okay let's send BS!"------------------------------------ + ld a,1 + call SetupFadeToBlack + call WaitFade + + call ((.loadFlour - L0314_Load2) + levelCheckRAM) + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld a,BANK(flour_sendBS_gtx) + ld c,0 + ld de,flour_sendBS_gtx + call ShowDialogAtBottomNoWait + + ld de,((.transitionToMoon - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld d,6 + LONGCALLNOARGS AnimateFlour + +.transitionToMoon + call ClearDialog + ld a,16 + call SetupFadeToBlack + call WaitFade + + ld a,BANK(moon_bg) + ld hl,moon_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromBlack + call WaitFade + + ld de,((.endCinema - L0314_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,30 + call Delay + +.endCinema + call ClearDialog + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld hl,$0015 + ld a,l + ld [respawnMap],a + ld a,h + ld [respawnMap+1],a + + ld hl,2056 ;bs + ld a,l + ld [hero0_class],a + ld a,h + ld [hero0_class+1],a + ld a,HERO_BS_FLAG + ld [hero0_type],a + + ld hl,CS_CINDEX + ld a,l + ld [hero1_class],a + ld a,h + ld [hero1_class+1],a + ld a,HERO_BA_FLAG + ld [hero1_type],a + + xor a + ld [hero0_health],a + ld [hero1_health],a + + ld hl,$0015 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.loadSkippy + ld a,BANK(skippy_bg) + ld hl,skippy_bg + call LoadCinemaBG + ret + +.loadFlour + ld a,BANK(flour_bg) + ld hl,flour_bg + call LoadCinemaBG + ret + +.loadHaiku + ld a,BANK(haiku_bg) + ld hl,haiku_bg + call LoadCinemaBG + ret + +L0314_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0314_Map: +INCBIN "Data/Levels/l0314_intro_haiku4.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +CROUTONINDEX EQU 21 +SKIPPYINDEX EQU 22 + +L0314_Init: + DW ((L0314_InitFinished - L0314_Init2)) ;size +L0314_Init2: + ld a,2 + ld [canJoinMap],a + + ;ld a,BANK(alarm_gbm) + ;ld hl,alarm_gbm + ;call InitMusic + + ;all friends here + ld bc,((GROUP_MONSTERB<<8) | GROUP_MONSTERA) + ld a,1 + call SetFOF + + ;set everybody to run to the right + ld c,CROUTONINDEX + call GetFirst +.setCroutonLoop + call ((.runRight-L0314_Init2)+levelCheckRAM) + call GetNextObject + or a + jr nz,.setCroutonLoop + + ld c,SKIPPYINDEX + call GetFirst + call ((.runRight-L0314_Init2)+levelCheckRAM) + + ld a,[hero0_index] + or a + jr z,.afterSetHero0 + ld c,a + call GetFirst + call ((.runRight-L0314_Init2)+levelCheckRAM) + +.afterSetHero0 + ld a,[hero1_index] + or a + jr z,.afterSetHero1 + ld c,a + call GetFirst + call ((.runRight-L0314_Init2)+levelCheckRAM) +.afterSetHero1 + + ;everybody's an actor + ld bc,classCroutonDoctor + ld de,classActor + call ChangeClass + + ld bc,classHaikuPlayer + ld de,classActor + call ChangeClass + + ld bc,classMajorSkippy + ld de,classActorSpeed1 + call ChangeClass + + ld hl,((.greenDark-L0314_Init2)+levelCheckRAM) + ld de,gamePalette + call CopyPalette32 + +IF 0 + ld c,9 +.updateLoop + call UpdateObjTimers + ld b,METHOD_CHECK + call IterateAllLists + dec c + jr nz,.updateLoop +ENDC + + ret + +.runRight + call GetCurLocation + call ConvertLocHLToXY + ld h,61 + call ConvertXYToLocHL + call SetActorDestLoc + call GetFacing + and %11111100 + or %00000001 + call SetFacing + ld b,METHOD_DRAW + call CallMethod + ret + +.greenDark +DW $0000, $0882, $1104, $1de7 +DW $0000, $0005, $000f, $1de7 ;red stays +DW $0000, $1400, $1d00, $1de7 +DW $0000, $00a0, $01e0, $1de7 +DW $0000, $1002, $14c4, $1de7 +DW $0000, $00e3, $01e7, $1de7 +DW $0000, $0064, $00e7, $1de7 +DW $0000, $1004, $1cc7, $1de7 + +L0314_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0314_Check: + DW ((L0314_CheckFinished - L0314_Check2)) ;size +L0314_Check2: + ldio a,[mapState] + cp STATE_WAITSKIPPY + jr nz,.checkWaitFade + + ;skippy far enough? + ld c,SKIPPYINDEX + call GetFirst + call GetCurLocation + ld a,h + cp $d2 + ret nz + ld a,l + cp $e9 + ret nz + + ;end level + ld a,48 + call SetupFadeToStandard + ld a,STATE_WAITFADE + ldio [mapState],a + ret + +.checkWaitFade + ld a,[specialFX] + and FX_FADE + ret nz + + ld hl,fadeFinalPalette + ld de,gamePalette + call CopyPalette64 + + ld hl,$0314 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + + ld a,STATE_CINEMA + ldio [mapState],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +L0314_CheckFinished: +PRINTT "0314 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0314_LoadFinished - L0314_Load2) +PRINTT " / " +PRINTV (L0314_InitFinished - L0314_Init2) +PRINTT " / " +PRINTV (L0314_CheckFinished - L0314_Check2) +PRINTT "\n" + diff --git a/Source/l0315.asm b/Source/l0315.asm new file mode 100644 index 0000000..3d291d5 --- /dev/null +++ b/Source/l0315.asm @@ -0,0 +1,59 @@ +; l0315.asm +; Generated 07.30.2000 by mlevel +; Modified 07.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0315Section",ROMX +;--------------------------------------------------------------------- + +L0315_Contents:: + DW L0315_Load + DW L0315_Init + DW L0315_Check + DW L0315_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0315_Load: + DW ((L0315_LoadFinished - L0315_Load2)) ;size +L0315_Load2: + call ParseMap + ret + +L0315_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0315_Map: +INCBIN "Data/Levels/l0315_intro_bs4.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0315_Init: + DW ((L0315_InitFinished - L0315_Init2)) ;size +L0315_Init2: + ret + +L0315_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0315_Check: + DW ((L0315_CheckFinished - L0315_Check2)) ;size +L0315_Check2: + ret + +L0315_CheckFinished: +PRINTT "0315 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0315_LoadFinished - L0315_Load2) +PRINTT " / " +PRINTV (L0315_InitFinished - L0315_Init2) +PRINTT " / " +PRINTV (L0315_CheckFinished - L0315_Check2) +PRINTT "\n" + diff --git a/Source/l0400.asm b/Source/l0400.asm new file mode 100644 index 0000000..3aefd5e --- /dev/null +++ b/Source/l0400.asm @@ -0,0 +1,65 @@ +; l0400.asm crouton ice post +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0400Section",ROMX +;--------------------------------------------------------------------- + +L0400_Contents:: + DW L0400_Load + DW L0400_Init + DW L0400_Check + DW L0400_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0400_Load: + DW ((L0400_LoadFinished - L0400_Load2)) ;size +L0400_Load2: + call ParseMap + ret + +L0400_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0400_Map: +INCBIN "Data/Levels/L0400_ice_out.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0400_Init: + DW ((L0400_InitFinished - L0400_Init2)) ;size +L0400_Init2: + call UseAlternatePalette + + ld bc,ITEM_CODE0400 + call RemoveClearanceIfTaken + ret + +L0400_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0400_Check: + DW ((L0400_CheckFinished - L0400_Check2)) ;size +L0400_Check2: + ret + +L0400_CheckFinished: +PRINTT "0400 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0400_LoadFinished - L0400_Load2) +PRINTT " / " +PRINTV (L0400_InitFinished - L0400_Init2) +PRINTT " / " +PRINTV (L0400_CheckFinished - L0400_Check2) +PRINTT "\n" + diff --git a/Source/l0401.asm b/Source/l0401.asm new file mode 100644 index 0000000..8e71259 --- /dev/null +++ b/Source/l0401.asm @@ -0,0 +1,136 @@ +; l0401.asm pitch black +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0401Section",ROMX +;--------------------------------------------------------------------- + +L0401_Contents:: + DW L0401_Load + DW L0401_Init + DW L0401_Check + DW L0401_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0401_Load: + DW ((L0401_LoadFinished - L0401_Load2)) ;size +L0401_Load2: + call ParseMap + ret + +L0401_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0401_Map: +INCBIN "Data/Levels/L0401_pitch_black.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0401_Init: + DW ((L0401_InitFinished - L0401_Init2)) ;size +L0401_Init2: + ld hl,((.blackPalette-L0401_Init2)+levelCheckRAM) + ld de,gamePalette + call CopyPalette32 + ld de,fadeFinalPalette + call CopyPalette32 + ld de,fadeCurPalette + call CopyPalette32 + ;call InstallGamePalette + + ld a,ENV_RAIN + call SetEnvEffect + + ret + + +.blackPalette + DW $0000, $2108, $4210, $7fff ;Palette 0 (Grey) + DW $0000, $0000, $0000, $0000 + DW $0000, $0000, $0000, $0000 + DW $0000, $0000, $0000, $0000 + DW $0000, $0000, $0000, $0000 + DW $0000, $0000, $0000, $0000 + DW $0000, $0000, $0000, $0000 + DW $0000, $0000, $0000, $0000 + +L0401_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0401_Check: + DW ((L0401_CheckFinished - L0401_Check2)) ;size +L0401_Check2: + ld hl,((.heroToGrey-L0401_Check2)+levelCheckRAM) + xor a + call CheckEachHero + + call ((.lightening-L0401_Check2)+levelCheckRAM) + ret + +.heroToGrey + or a + ret z + + ld c,a + call GetFGAttributes + and %11111000 ;palette to grey + call SetFGAttributes + call GetFirst + ld b,METHOD_DRAW + call CallMethod + ret + +.lightening + ld a,31 + call GetRandomNumMask + cp 31 + jr nz,.playThunderSound + + ld hl,((.lighteningPalette-L0401_Check2)+levelCheckRAM) + ld de,fadeCurPalette + call CopyPalette32 + ld a,7 + call GetRandomNumMask + add 8 + call FadeInit + ret + +.playThunderSound + and 15 + ret nz + + ld hl,((.thunderSound-L0401_Check2)+levelCheckRAM) + call PlaySound + ret + +.thunderSound + DB 4,$00,$f4,$66,$80 + +.lighteningPalette + DW $7fff, $0000, $0000, $0000 ;Palette 0 (Grey) + DW $7fff, $0000, $0000, $0000 + DW $7fff, $0000, $0000, $0000 + DW $7fff, $0000, $0000, $0000 + DW $7fff, $0000, $0000, $0000 + DW $7fff, $0000, $0000, $0000 + DW $7fff, $0000, $0000, $0000 + DW $7fff, $0000, $0000, $0000 + +L0401_CheckFinished: +PRINTT "0401 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0401_LoadFinished - L0401_Load2) +PRINTT " / " +PRINTV (L0401_InitFinished - L0401_Init2) +PRINTT " / " +PRINTV (L0401_CheckFinished - L0401_Check2) +PRINTT "\n" + diff --git a/Source/l0402.asm b/Source/l0402.asm new file mode 100644 index 0000000..58185b6 --- /dev/null +++ b/Source/l0402.asm @@ -0,0 +1,59 @@ +; l0402.asm +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0402Section",ROMX +;--------------------------------------------------------------------- + +L0402_Contents:: + DW L0402_Load + DW L0402_Init + DW L0402_Check + DW L0402_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0402_Load: + DW ((L0402_LoadFinished - L0402_Load2)) ;size +L0402_Load2: + call ParseMap + ret + +L0402_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0402_Map: +INCBIN "Data/Levels/L0402_dusk.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0402_Init: + DW ((L0402_InitFinished - L0402_Init2)) ;size +L0402_Init2: + ret + +L0402_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0402_Check: + DW ((L0402_CheckFinished - L0402_Check2)) ;size +L0402_Check2: + ret + +L0402_CheckFinished: +PRINTT "0402 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0402_LoadFinished - L0402_Load2) +PRINTT " / " +PRINTV (L0402_InitFinished - L0402_Init2) +PRINTT " / " +PRINTV (L0402_CheckFinished - L0402_Check2) +PRINTT "\n" + diff --git a/Source/l0403.asm b/Source/l0403.asm new file mode 100644 index 0000000..12483f3 --- /dev/null +++ b/Source/l0403.asm @@ -0,0 +1,108 @@ +; l0403.asm +; Generated 08.26.2000 by mlevel +; Modified 08.26.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +;--------------------------------------------------------------------- +SECTION "Level0403Section",ROMX +;--------------------------------------------------------------------- + +L0403_Contents:: + DW L0403_Load + DW L0403_Init + DW L0403_Check + DW L0403_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0403_Load: + DW ((L0403_LoadFinished - L0403_Load2)) ;size +L0403_Load2: + call ParseMap + ret + +L0403_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0403_Map: +INCBIN "Data/Levels/l0403_shroom.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0403_Init: + DW ((L0403_InitFinished - L0403_Init2)) ;size +L0403_Init2: + ld bc,ITEM_SPOREMASK + call HasInventoryItem + jr nz,.hasMask + + ld hl,HOffsetOnHBlank + call InstallHBlankHandler +.hasMask + + ;ld a,BANK(shroom_gbm) + ;ld hl,shroom_gbm + ;call InitMusic + ret + +L0403_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0403_Check: + DW ((L0403_CheckFinished - L0403_Check2)) ;size +L0403_Check2: + call ((.updateWave-L0403_Check2)+levelCheckRAM) + ret + +.updateWave + ld bc,ITEM_SPOREMASK + call HasInventoryItem + ret nz + + ;fill the horizontalOffset table with values from the sine table + ld a,TILEINDEXBANK + ldio [$ff70],a + ldio a,[updateTimer] + and 63 + ld e,a + ld d,0 + ld hl,((.sineTable-L0403_Check2)+levelCheckRAM) + add hl,de + ld de,horizontalOffset + ld c,144 +.updateLoop + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.updateLoop + + ld a,[horizontalOffset] + ld [lineZeroHorizontalOffset],a + + ld hl,hblankFlag + set 2,[hl] + + ret + +.sineTable ;sixteen 16-byte sine waves, values between 0 and 24 +REPT 16 + DB 0, 3, 5, 7, 7, 7, 5, 3, 0, 253, 251, 249, 249, 249, 251, 253 +ENDR + +L0403_CheckFinished: +PRINTT "0403 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0403_LoadFinished - L0403_Load2) +PRINTT " / " +PRINTV (L0403_InitFinished - L0403_Init2) +PRINTT " / " +PRINTV (L0403_CheckFinished - L0403_Check2) +PRINTT "\n" + diff --git a/Source/l0404.asm b/Source/l0404.asm new file mode 100644 index 0000000..c77d189 --- /dev/null +++ b/Source/l0404.asm @@ -0,0 +1,189 @@ +; l0404.asm +; Generated 08.26.2000 by mlevel +; Modified 08.26.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0404Section",ROMX +;--------------------------------------------------------------------- + +L0404_Contents:: + DW L0404_Load + DW L0404_Init + DW L0404_Check + DW L0404_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0404_Load: + DW ((L0404_LoadFinished - L0404_Load2)) ;size +L0404_Load2: + call ParseMap + ret + +L0404_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0404_Map: +INCBIN "Data/Levels/l0404_shroom.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +VAR_SLIMETRIGGERED EQU 0 + +L0404_Init: + DW ((L0404_InitFinished - L0404_Init2)) ;size +L0404_Init2: + ld bc,ITEM_SPOREMASK + call HasInventoryItem + jr nz,.hasMask + + ld hl,HOffsetOnHBlank + call InstallHBlankHandler +.hasMask + + ;ld a,BANK(shroom_gbm) + ;ld hl,shroom_gbm + ;call InitMusic + + xor a + ld [levelVars + VAR_SLIMETRIGGERED],a + ret + +L0404_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0404_Check: + DW ((L0404_CheckFinished - L0404_Check2)) ;size +L0404_Check2: + call ((.updateWave-L0404_Check2)+levelCheckRAM) + call ((.checkMossTriggered469-L0404_Check2)+levelCheckRAM) + ret + +.checkMossTriggered469 + ld a,[levelVars + VAR_SLIMETRIGGERED] + or a + ret nz + + ld hl,((.heroInZone469-L0404_Check2)+levelCheckRAM) + ld a,1 + call CheckEachHero + or a + ret z ;hero not in zone 4, 6, or 9 + + ;activate slime in any zone 15 location + ld [levelVars + VAR_SLIMETRIGGERED],a + ld hl,$d000 + ld a,ZONEBANK + ldio [$ff70],a + + ld a,[mapHeight] +.outer push af + push hl + ld a,[mapWidth] + +.inner push af + ld a,[hl+] + and $0f + cp 15 + jr nz,.afterActivate + + dec hl + ld bc,classSlime + call FindClassIndex + ld c,a + call CreateInitAndDrawObject + ld a,ZONEBANK + ldio [$ff70],a + inc hl + +.afterActivate + pop af + dec a + jr nz,.inner + + pop hl + call ConvertLocHLToXY + inc l + call ConvertXYToLocHL + pop af + dec a + jr nz,.outer + + ret + +.heroInZone469 + or a + ret z + + ld c,a + call GetFirst + call GetCurZone + cp 4 + jr z,.true + cp 6 + jr z,.true + cp 9 + jr z,.true + +.false xor a + ret + +.true ld a,1 + ret + +.updateWave + ld bc,ITEM_SPOREMASK + call HasInventoryItem + ret nz + + ;fill the horizontalOffset table with values from the sine table + ld a,TILEINDEXBANK + ldio [$ff70],a + ldio a,[updateTimer] + and 63 + ld e,a + ld d,0 + ld hl,((.sineTable-L0404_Check2)+levelCheckRAM) + add hl,de + ld de,horizontalOffset + ld c,144 +.updateLoop + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.updateLoop + + ld a,[horizontalOffset] + ld [lineZeroHorizontalOffset],a + + ld hl,hblankFlag + set 2,[hl] + + ret + +.sineTable ;eight 32-byte sine waves, values between 0 and 15 +REPT 8 + DB 0, 1, 3, 4, 5, 6, 7, 7, 7, 7, 7, 6, 5, 4, 3, 1 + DB 0,$fe,$fc,$fb,$fa,$f9,$f8,$f8,$f8,$f8,$f8,$f9,$fa,$fb,$fc,$fe +ENDR + + +L0404_CheckFinished: +PRINTT "0404 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0404_LoadFinished - L0404_Load2) +PRINTT " / " +PRINTV (L0404_InitFinished - L0404_Init2) +PRINTT " / " +PRINTV (L0404_CheckFinished - L0404_Check2) +PRINTT "\n" + diff --git a/Source/l0405.asm b/Source/l0405.asm new file mode 100644 index 0000000..ee2e45d --- /dev/null +++ b/Source/l0405.asm @@ -0,0 +1,234 @@ +; l0405.asm west gardens +; Generated 10.16.2000 by mlevel +; Modified 10.16.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 40 +LOW_INDEX EQU 46 +HIGH_INDEX EQU 49 + +VAR_WATER EQU 0 +VAR_ALARM EQU 1 + +STATE_NORMAL EQU 1 +STATE_TALKED EQU 2 + +;for l0505 +STATE_AFTERWEDDING EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0405Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0405_ho_gtx: + INCBIN "Data/Dialog/talk/l0405_ho.gtx" + +l0405_hero_reaction_gtx: + INCBIN "Data/Dialog/talk/l0405_hero_reaction.gtx" + +l0405_final_word_gtx: + INCBIN "Data/Dialog/talk/l0405_final_word.gtx" + +L0405_Contents:: + DW L0405_Load + DW L0405_Init + DW L0405_Check + DW L0405_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0405_Load: + DW ((L0405_LoadFinished - L0405_Load2)) ;size +L0405_Load2: + call ParseMap + ret + +L0405_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0405_Map: +INCBIN "Data/Levels/l0405_garden.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0405_Init: + DW ((L0405_InitFinished - L0405_Init2)) ;size +L0405_Init2: + ld a,STATE_NORMAL + ldio [mapState],a + + STDSETUPDIALOG + + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + ld bc,classPansy + ld de,classActor2 + call ChangeClass + + xor a + ld [levelVars+VAR_ALARM],a + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$55] ;palace + cp STATE_AFTERWEDDING + jr nc,.afterWedding + +.beforeWedding + ld bc,classDandelionGuard + ld de,classTreeTalker + call ChangeClass + + jr .done + +.afterWedding + call ((.openGate-L0405_Init2)+levelCheckRAM) + ld bc,classDandelionGuard + ld de,classActor + call ChangeClass + +.done + ret + +.openGate + ld a,MAPBANK + ldio [$ff70],a + ld hl,$d113 + xor a + ld [hl+],a + ld [hl],a + ld hl,$d133 + ld [hl+],a + ld [hl],a + ret + +L0405_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0405_Check: + DW ((L0405_CheckFinished - L0405_Check2)) ;size +L0405_Check2: + call ((.animateWater-L0405_Check2)+levelCheckRAM) + call ((.checkAlarm-L0405_Check2)+levelCheckRAM) + call ((.checkDialog-L0405_Check2)+levelCheckRAM) + ret + +.checkDialog + ldio a,[mapState] + cp STATE_TALKED + ret z + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + call MakeIdle + + ld de,((.afterDialog-L0405_Check2)+levelCheckRAM) + call SetDialogSkip + + ;Ho, miscreant! + ld de,l0405_ho_gtx + call ShowDialogNPC + + ;Reaction + ld de,l0405_hero_reaction_gtx + call ShowDialogHero + + ;Final word + ld de,l0405_final_word_gtx + call ShowDialogNPC + +.afterDialog + call ClearDialog + + call MakeNonIdle + ld a,STATE_TALKED + ldio [mapState],a + + ld a,$ff + call DisableDialogBalloons + + xor a + ld [dialogNPC_speakerIndex],a + ret + + +.checkAlarm + ld a,[levelVars+VAR_ALARM] + or a + ret nz + + ;ld a,[guardAlarm] + ;or a + ;jr nz,.soundAlarm + + ;count pansies + ld b,0 + ld c,LOW_INDEX + call GetNumObjects + add b + ld b,a + ld c,LOW_INDEX+1 + call GetNumObjects + add b + ld b,a + ld c,LOW_INDEX+2 + call GetNumObjects + add b + ld b,a + ld c,LOW_INDEX+3 + call GetNumObjects + add b + ld b,a + cp 49 ;all still here? + ret nc + +.soundAlarm + xor a + ld [dialogBalloonClassIndex],a + + ld a,1 + ld [levelVars+VAR_ALARM],a + + ld bc,classActor2 + ld de,classPansy + call ChangeClass + + ld bc,classActor + ld de,classDandelionGuard + call ChangeClass + + ld bc,classTreeTalker + ld de,classDandelionGuard + call ChangeClass + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0405_CheckFinished: +PRINTT "0405 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0405_LoadFinished - L0405_Load2) +PRINTT " / " +PRINTV (L0405_InitFinished - L0405_Init2) +PRINTT " / " +PRINTV (L0405_CheckFinished - L0405_Check2) +PRINTT "\n" + diff --git a/Source/l0406.asm b/Source/l0406.asm new file mode 100644 index 0000000..e775866 --- /dev/null +++ b/Source/l0406.asm @@ -0,0 +1,59 @@ +; l0406.asm +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0406Section",ROMX +;--------------------------------------------------------------------- + +L0406_Contents:: + DW L0406_Load + DW L0406_Init + DW L0406_Check + DW L0406_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0406_Load: + DW ((L0406_LoadFinished - L0406_Load2)) ;size +L0406_Load2: + call ParseMap + ret + +L0406_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0406_Map: +INCBIN "Data/Levels/l0406_bios.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0406_Init: + DW ((L0406_InitFinished - L0406_Init2)) ;size +L0406_Init2: + ret + +L0406_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0406_Check: + DW ((L0406_CheckFinished - L0406_Check2)) ;size +L0406_Check2: + ret + +L0406_CheckFinished: +PRINTT "0406 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0406_LoadFinished - L0406_Load2) +PRINTT " / " +PRINTV (L0406_InitFinished - L0406_Init2) +PRINTT " / " +PRINTV (L0406_CheckFinished - L0406_Check2) +PRINTT "\n" + diff --git a/Source/l0407.asm b/Source/l0407.asm new file mode 100644 index 0000000..b64acf3 --- /dev/null +++ b/Source/l0407.asm @@ -0,0 +1,59 @@ +; l0407.asm +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0407Section",ROMX +;--------------------------------------------------------------------- + +L0407_Contents:: + DW L0407_Load + DW L0407_Init + DW L0407_Check + DW L0407_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0407_Load: + DW ((L0407_LoadFinished - L0407_Load2)) ;size +L0407_Load2: + call ParseMap + ret + +L0407_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0407_Map: +INCBIN "Data/Levels/l0407_bios.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0407_Init: + DW ((L0407_InitFinished - L0407_Init2)) ;size +L0407_Init2: + ret + +L0407_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0407_Check: + DW ((L0407_CheckFinished - L0407_Check2)) ;size +L0407_Check2: + ret + +L0407_CheckFinished: +PRINTT "0407 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0407_LoadFinished - L0407_Load2) +PRINTT " / " +PRINTV (L0407_InitFinished - L0407_Init2) +PRINTT " / " +PRINTV (L0407_CheckFinished - L0407_Check2) +PRINTT "\n" + diff --git a/Source/l0408.asm b/Source/l0408.asm new file mode 100644 index 0000000..d663efb --- /dev/null +++ b/Source/l0408.asm @@ -0,0 +1,61 @@ +; l0408.asm death valley +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0408Section",ROMX +;--------------------------------------------------------------------- + +L0408_Contents:: + DW L0408_Load + DW L0408_Init + DW L0408_Check + DW L0408_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0408_Load: + DW ((L0408_LoadFinished - L0408_Load2)) ;size +L0408_Load2: + call ParseMap + ret + +L0408_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0408_Map: +INCBIN "Data/Levels/l0408_deathvalley.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0408_Init: + DW ((L0408_InitFinished - L0408_Init2)) ;size +L0408_Init2: + ld a,ENV_DIRT + call SetEnvEffect + ret + +L0408_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0408_Check: + DW ((L0408_CheckFinished - L0408_Check2)) ;size +L0408_Check2: + ret + +L0408_CheckFinished: +PRINTT "0408 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0408_LoadFinished - L0408_Load2) +PRINTT " / " +PRINTV (L0408_InitFinished - L0408_Init2) +PRINTT " / " +PRINTV (L0408_CheckFinished - L0408_Check2) +PRINTT "\n" + diff --git a/Source/l0409.asm b/Source/l0409.asm new file mode 100644 index 0000000..8abed53 --- /dev/null +++ b/Source/l0409.asm @@ -0,0 +1,59 @@ +; l0409.asm +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0409Section",ROMX +;--------------------------------------------------------------------- + +L0409_Contents:: + DW L0409_Load + DW L0409_Init + DW L0409_Check + DW L0409_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0409_Load: + DW ((L0409_LoadFinished - L0409_Load2)) ;size +L0409_Load2: + call ParseMap + ret + +L0409_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0409_Map: +INCBIN "Data/Levels/l0409_desert.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0409_Init: + DW ((L0409_InitFinished - L0409_Init2)) ;size +L0409_Init2: + ret + +L0409_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0409_Check: + DW ((L0409_CheckFinished - L0409_Check2)) ;size +L0409_Check2: + ret + +L0409_CheckFinished: +PRINTT "0409 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0409_LoadFinished - L0409_Load2) +PRINTT " / " +PRINTV (L0409_InitFinished - L0409_Init2) +PRINTT " / " +PRINTV (L0409_CheckFinished - L0409_Check2) +PRINTT "\n" + diff --git a/Source/l0410.asm b/Source/l0410.asm new file mode 100644 index 0000000..34202be --- /dev/null +++ b/Source/l0410.asm @@ -0,0 +1,100 @@ +; l0410.asm crouton outpost +; Generated 11.07.2000 by mlevel +; Modified 11.07.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +HFENCE_INDEX EQU 72 +VFENCE_INDEX EQU 76 +VAR_HFENCE EQU 0 +VAR_VFENCE EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level0410Section",ROMX +;--------------------------------------------------------------------- + +L0410_Contents:: + DW L0410_Load + DW L0410_Init + DW L0410_Check + DW L0410_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0410_Load: + DW ((L0410_LoadFinished - L0410_Load2)) ;size +L0410_Load2: + call ParseMap + ret + +L0410_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0410_Map: +INCBIN "Data/Levels/l0410_outpost.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0410_Init: + DW ((L0410_InitFinished - L0410_Init2)) ;size +L0410_Init2: + ld a,[bgTileMap+HFENCE_INDEX] + ld [levelVars + VAR_HFENCE],a + ld a,[bgTileMap+VFENCE_INDEX] + ld [levelVars + VAR_VFENCE],a + + ld bc,ITEM_CODE0410 + call RemoveClearanceIfTaken + ret + +L0410_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0410_Check: + DW ((L0410_CheckFinished - L0410_Check2)) ;size +L0410_Check2: + call ((.animateFence-L0410_Check2)+levelCheckRAM) + ret + +.animateFence + ldio a,[updateTimer] + rrca + and 3 + ld b,a + ld hl,bgTileMap+HFENCE_INDEX + ld a,[levelVars+VAR_HFENCE] + ld d,a + call ((.animateFourFrames-L0410_Check2)+levelCheckRAM) + ld a,[levelVars+VAR_VFENCE] + ld d,a + jp ((.animateFourFrames-L0410_Check2)+levelCheckRAM) + +.animateFourFrames + ld c,4 + +.animateFourFrames_loop + ld a,b + add c + and 3 + add d + ld [hl+],a + dec c + jr nz,.animateFourFrames_loop + ret + +L0410_CheckFinished: +PRINTT "0410 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0410_LoadFinished - L0410_Load2) +PRINTT " / " +PRINTV (L0410_InitFinished - L0410_Init2) +PRINTT " / " +PRINTV (L0410_CheckFinished - L0410_Check2) +PRINTT "\n" + diff --git a/Source/l0411.asm b/Source/l0411.asm new file mode 100644 index 0000000..c7eec25 --- /dev/null +++ b/Source/l0411.asm @@ -0,0 +1,109 @@ +; l0411.asm top of tower +; Generated 10.20.2000 by mlevel +; Modified 10.20.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +FIRST_HOLE EQU 32 + +;--------------------------------------------------------------------- +SECTION "Level0411Section",ROMX +;--------------------------------------------------------------------- + +L0411_Contents:: + DW L0411_Load + DW L0411_Init + DW L0411_Check + DW L0411_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0411_Load: + DW ((L0411_LoadFinished - L0411_Load2)) ;size +L0411_Load2: + call ParseMap + + ;alter yellow palette to purple w/black + ld a,FADEBANK + ld bc,6 + ld de,gamePalette + 5*8 + 2 + ld hl,((.purpleBlackPalette-L0411_Load2)+levelCheckRAM) + call MemCopy + + ret + +.purpleBlackPalette + DW $4008,$5192,$0000 + +L0411_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0411_Map: +INCBIN "Data/Levels/l0411_tower.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0411_Init: + DW ((L0411_InitFinished - L0411_Init2)) ;size +L0411_Init2: + ;already rescued guys? + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$3c] ;rescue from tower cinema state + or a + jr z,.done + + ;rescued already + ld bc,classActor + call DeleteObjectsOfClass + + ;disable up exit + ld de,$4040 + ld hl,mapExitLinks+EXIT_U*2 + ld [hl],e + inc hl + ld [hl],d +.done + ret + +L0411_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0411_Check: + DW ((L0411_CheckFinished - L0411_Check2)) ;size +L0411_Check2: + call ((.checkFalling-L0411_Check2)+levelCheckRAM) + ret + +.checkFalling + ld a,[timeToChangeLevel] + or a + ret z + + ld a,[exitTileIndex] + cp FIRST_HOLE + ret c + + ld hl,((.fallSound-L0411_Check2)+levelCheckRAM) + call PlaySound + ld a,15 + call Delay + ret + +.fallSound + DB 1,$7e,$80,$f5,$00,$86 + +L0411_CheckFinished: +PRINTT "0411 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0411_LoadFinished - L0411_Load2) +PRINTT " / " +PRINTV (L0411_InitFinished - L0411_Init2) +PRINTT " / " +PRINTV (L0411_CheckFinished - L0411_Check2) +PRINTT "\n" + diff --git a/Source/l0412.asm b/Source/l0412.asm new file mode 100644 index 0000000..e6107db --- /dev/null +++ b/Source/l0412.asm @@ -0,0 +1,198 @@ +; l0412.asm sunset village stonehead house +; Generated 08.31.2000 by mlevel +; Modified 08.31.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +STATE_TALK_MISSION EQU 1 +STATE_MISSION_TALKED EQU 2 +STATE_TALK_FIXED EQU 3 +STATE_FIXED_TALKED EQU 4 + +STATE_HIVE_DESTROYED EQU 2 ;from 0312 + +;--------------------------------------------------------------------- +SECTION "Level0412Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0006_avacado_gtx: + INCBIN "Data/Dialog/talk/l0006_avacado.gtx" + +l0006_hero_sayagain_gtx: + INCBIN "Data/Dialog/talk/l0006_hero_sayagain.gtx" + +l0006_fixbridge_gtx: + INCBIN "Data/Dialog/talk/l0006_fixbridge.gtx" + +l0006_fixed_gtx: + INCBIN "Data/Dialog/talk/l0006_fixed.gtx" + +L0412_Contents:: + DW L0412_Load + DW L0412_Init + DW L0412_Check + DW L0412_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0412_Load: + DW ((L0412_LoadFinished - L0412_Load2)) ;size +L0412_Load2: + call ParseMap + ret + +L0412_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0412_Map: +INCBIN "Data/Levels/l0412_sunsethousewest.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0412_Init: + DW ((L0412_InitFinished - L0412_Init2)) ;size +L0412_Init2: + ld a,BANK(dialog) + ld [dialogBank],a + call SetPressBDialog + + ldio a,[mapState] + cp STATE_TALK_FIXED + jr nc,.fixed + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState + $c3] ;hive in house map + cp STATE_HIVE_DESTROYED + jr z,.fixed + + ld a,STATE_TALK_MISSION + ldio [mapState],a + jr .stateSet + +.fixed + ld a,STATE_TALK_FIXED + ldio [mapState],a +.stateSet + ld bc,classWallCreature + ld de,classWallTalker + call ChangeClass + ret + +L0412_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0412_Check: + DW ((L0412_CheckFinished - L0412_Check2)) ;size +L0412_Check2: + call ((.checkDialog-L0412_Check2)+levelCheckRAM) + ret + +.checkDialog + ldio a,[mapState] + cp STATE_MISSION_TALKED + ret z + cp STATE_FIXED_TALKED + ret z + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + ld a,%11 + call DisableDialogBalloons + ld bc,classStunnedWall + call FindClassIndex + or a + jr z,.afterDisableDialogStunned + + ;disable dialog for any stunned walls + ld c,a + call GetFirst + ld a,1 + call SetMisc + call GetNextObject + or a + jr z,.afterDisableDialogStunned + ld a,1 + call SetMisc + +.afterDisableDialogStunned + call MakeIdle + + ld a,[dialogNPC_heroIndex] + ld c,a + call SetSpeakerFromHeroIndex + + ldio a,[mapState] + cp STATE_TALK_FIXED + jr z,.fixed + + ld de,((.afterFixDialog-L0412_Check2)+levelCheckRAM) + call SetDialogSkip + + ;Crush you like avacado + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0006_avacado_gtx + call ShowDialogAtTop + call ClearDialog + + ;say again? + ld a,[dialogNPC_heroIndex] + ld c,a + ld de,l0006_hero_sayagain_gtx + call ShowDialogAtBottom + call ClearDialog + + ;Fix bridge + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0006_fixbridge_gtx + call ShowDialogAtTop + +.afterFixDialog + call ClearDialog + ld a,STATE_MISSION_TALKED + ldio [mapState],a + jr .afterDialog + +.fixed + ld de,((.afterFixedDialog-L0412_Check2)+levelCheckRAM) + call SetDialogSkip + + ;bridge fixed + ld a,[dialogNPC_speakerIndex] + ld c,a + ld de,l0006_fixed_gtx + call ShowDialogAtTop +.afterFixedDialog + call ClearDialog + ld a,STATE_FIXED_TALKED + ldio [mapState],a + +.afterDialog + call MakeNonIdle + + xor a + ld [dialogNPC_speakerIndex],a + + ret + +L0412_CheckFinished: +PRINTT "0412 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0412_LoadFinished - L0412_Load2) +PRINTT " / " +PRINTV (L0412_InitFinished - L0412_Init2) +PRINTT " / " +PRINTV (L0412_CheckFinished - L0412_Check2) +PRINTT "\n" + diff --git a/Source/l0413.asm b/Source/l0413.asm new file mode 100644 index 0000000..67bdf94 --- /dev/null +++ b/Source/l0413.asm @@ -0,0 +1,57 @@ +; l0413.asm +; Generated 04.22.2001 by mlevel +; Modified 04.22.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0413Section",ROMX +;--------------------------------------------------------------------- + +L0413_Contents:: + DW L0413_Load + DW L0413_Init + DW L0413_Check + DW L0413_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0413_Load: + DW ((L0413_LoadFinished - L0413_Load2)) ;size +L0413_Load2: + ret + +L0413_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0413_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0413_Init: + DW ((L0413_InitFinished - L0413_Init2)) ;size +L0413_Init2: + ret + +L0413_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0413_Check: + DW ((L0413_CheckFinished - L0413_Check2)) ;size +L0413_Check2: + ret + +L0413_CheckFinished: +PRINTT "0413 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0413_LoadFinished - L0413_Load2) +PRINTT " / " +PRINTV (L0413_InitFinished - L0413_Init2) +PRINTT " / " +PRINTV (L0413_CheckFinished - L0413_Check2) +PRINTT "\n" + diff --git a/Source/l0500.asm b/Source/l0500.asm new file mode 100644 index 0000000..2259adc --- /dev/null +++ b/Source/l0500.asm @@ -0,0 +1,63 @@ +; l0500.asm +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0500Section",ROMX +;--------------------------------------------------------------------- + +L0500_Contents:: + DW L0500_Load + DW L0500_Init + DW L0500_Check + DW L0500_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0500_Load: + DW ((L0500_LoadFinished - L0500_Load2)) ;size +L0500_Load2: + call ParseMap + ret + +L0500_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0500_Map: +INCBIN "Data/Levels/L0500_ice.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0500_Init: + DW ((L0500_InitFinished - L0500_Init2)) ;size +L0500_Init2: + call UseAlternatePalette + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0500_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0500_Check: + DW ((L0500_CheckFinished - L0500_Check2)) ;size +L0500_Check2: + ret + +L0500_CheckFinished: +PRINTT "0500 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0500_LoadFinished - L0500_Load2) +PRINTT " / " +PRINTV (L0500_InitFinished - L0500_Init2) +PRINTT " / " +PRINTV (L0500_CheckFinished - L0500_Check2) +PRINTT "\n" + diff --git a/Source/l0501.asm b/Source/l0501.asm new file mode 100644 index 0000000..431c332 --- /dev/null +++ b/Source/l0501.asm @@ -0,0 +1,66 @@ +; l0501.asm +; Generated 09.05.2000 by mlevel +; Modified 09.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0501Section",ROMX +;--------------------------------------------------------------------- + +L0501_Contents:: + DW L0501_Load + DW L0501_Init + DW L0501_Check + DW L0501_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0501_Load: + DW ((L0501_LoadFinished - L0501_Load2)) ;size +L0501_Load2: + call ParseMap + ret + +L0501_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0501_Map: +INCBIN "Data/Levels/l0501_winter.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0501_Init: + DW ((L0501_InitFinished - L0501_Init2)) ;size +L0501_Init2: + call UseAlternatePalette + ld a,ENV_SNOW + call SetEnvEffect + + ld a,BANK(frosty_gbm) + ld hl,frosty_gbm + call InitMusic + ret + +L0501_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0501_Check: + DW ((L0501_CheckFinished - L0501_Check2)) ;size +L0501_Check2: + ret + +L0501_CheckFinished: +PRINTT "0501 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0501_LoadFinished - L0501_Load2) +PRINTT " / " +PRINTV (L0501_InitFinished - L0501_Init2) +PRINTT " / " +PRINTV (L0501_CheckFinished - L0501_Check2) +PRINTT "\n" + diff --git a/Source/l0502.asm b/Source/l0502.asm new file mode 100644 index 0000000..c4ca252 --- /dev/null +++ b/Source/l0502.asm @@ -0,0 +1,62 @@ +; l0502.asm +; Generated 09.05.2000 by mlevel +; Modified 09.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0502Section",ROMX +;--------------------------------------------------------------------- + +L0502_Contents:: + DW L0502_Load + DW L0502_Init + DW L0502_Check + DW L0502_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0502_Load: + DW ((L0502_LoadFinished - L0502_Load2)) ;size +L0502_Load2: + call ParseMap + ret + +L0502_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0502_Map: +INCBIN "Data/Levels/l0502_chill.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0502_Init: + DW ((L0502_InitFinished - L0502_Init2)) ;size +L0502_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0502_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0502_Check: + DW ((L0502_CheckFinished - L0502_Check2)) ;size +L0502_Check2: + ret + +L0502_CheckFinished: +PRINTT "0502 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0502_LoadFinished - L0502_Load2) +PRINTT " / " +PRINTV (L0502_InitFinished - L0502_Init2) +PRINTT " / " +PRINTV (L0502_CheckFinished - L0502_Check2) +PRINTT "\n" + diff --git a/Source/l0503.asm b/Source/l0503.asm new file mode 100644 index 0000000..c22b1fe --- /dev/null +++ b/Source/l0503.asm @@ -0,0 +1,59 @@ +; l0503.asm +; Generated 09.05.2000 by mlevel +; Modified 09.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0503Section",ROMX +;--------------------------------------------------------------------- + +L0503_Contents:: + DW L0503_Load + DW L0503_Init + DW L0503_Check + DW L0503_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0503_Load: + DW ((L0503_LoadFinished - L0503_Load2)) ;size +L0503_Load2: + call ParseMap + ret + +L0503_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0503_Map: +INCBIN "Data/Levels/l0503_hermit.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0503_Init: + DW ((L0503_InitFinished - L0503_Init2)) ;size +L0503_Init2: + ret + +L0503_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0503_Check: + DW ((L0503_CheckFinished - L0503_Check2)) ;size +L0503_Check2: + ret + +L0503_CheckFinished: +PRINTT "0503 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0503_LoadFinished - L0503_Load2) +PRINTT " / " +PRINTV (L0503_InitFinished - L0503_Init2) +PRINTT " / " +PRINTV (L0503_CheckFinished - L0503_Check2) +PRINTT "\n" + diff --git a/Source/l0504.asm b/Source/l0504.asm new file mode 100644 index 0000000..e9f26ac --- /dev/null +++ b/Source/l0504.asm @@ -0,0 +1,59 @@ +; l0504.asm north gardens +; Generated 10.16.2000 by mlevel +; Modified 10.16.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0504Section",ROMX +;--------------------------------------------------------------------- + +L0504_Contents:: + DW L0504_Load + DW L0504_Init + DW L0504_Check + DW L0504_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0504_Load: + DW ((L0504_LoadFinished - L0504_Load2)) ;size +L0504_Load2: + call ParseMap + ret + +L0504_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0504_Map: +INCBIN "Data/Levels/L0504_garden.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0504_Init: + DW ((L0504_InitFinished - L0504_Init2)) ;size +L0504_Init2: + ret + +L0504_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0504_Check: + DW ((L0504_CheckFinished - L0504_Check2)) ;size +L0504_Check2: + ret + +L0504_CheckFinished: +PRINTT "0504 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0504_LoadFinished - L0504_Load2) +PRINTT " / " +PRINTV (L0504_InitFinished - L0504_Init2) +PRINTT " / " +PRINTV (L0504_CheckFinished - L0504_Check2) +PRINTT "\n" + diff --git a/Source/l0505.asm b/Source/l0505.asm new file mode 100644 index 0000000..9955a5a --- /dev/null +++ b/Source/l0505.asm @@ -0,0 +1,187 @@ +; l0505.asm palace / wedding +; Generated 10.19.2000 by mlevel +; Modified 10.19.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 71 + +VAR_LIGHT EQU 0 +VAR_WEDDINGSTAGE EQU 10 +VAR_HERO EQU 11 + +STATE_INIT EQU 0 +STATE_WEDDING EQU 1 +;STATE_AFTERWEDDING referenced in l0405 and l0505 +STATE_AFTERWEDDING EQU 2 + + + +;--------------------------------------------------------------------- +SECTION "Level0505Section",ROMX +;--------------------------------------------------------------------- + +L0505_Contents:: + DW L0505_Load + DW L0505_Init + DW L0505_Check + DW L0505_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0505_Load: + DW ((L0505_LoadFinished - L0505_Load2)) ;size +L0505_Load2: + call ParseMap + ret + +L0505_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0505_Map: +INCBIN "Data/Levels/l0505_palace.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0505_Init: + DW ((L0505_InitFinished - L0505_Init2)) ;size +L0505_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + ldio a,[mapState] + cp STATE_AFTERWEDDING + jr nc,.afterWedding + + xor a + ld [levelVars+VAR_WEDDINGSTAGE],a + ld bc,classPansy + ld de,classActor + call ChangeClass + + ld bc,classDandelionGuard + call ChangeClass + + ld a,BANK(wedding_gbm) + ld hl,wedding_gbm + call InitMusic + jr .done + +.afterWedding + ld bc,classPansy + call DeleteObjectsOfClass + ld bc,classCaptainFlour + call DeleteObjectsOfClass + ld bc,classLadyFlower + call DeleteObjectsOfClass + ld bc,classDandelionGuard + call DeleteObjectsOfClass + +.done + ret + +L0505_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0505_Check: + DW ((L0505_CheckFinished - L0505_Check2)) ;size +L0505_Check2: + ldio a,[mapState] + cp STATE_AFTERWEDDING + jr z,.afterWedding + + cp STATE_INIT + jr nz,.wedding + + ;initial draw + ld a,STATE_WEDDING + ldio [mapState],a + + ld a,1 + ld [heroesIdle],a + ;call MakeIdle + ret + +.wedding + ld a,$11 + ldio [scrollSpeed],a + xor a + ld [camera_i],a + ld [camera_j],a + + ld de,((.endPan-L0505_Check2)+levelCheckRAM) + call SetDialogForward + call SetDialogSkip + + ld a,220 + call Delay + +.endPan + call SetSpeakerToFirstHero + ld a,[dialogSpeakerIndex] + ld [levelVars+VAR_HERO],a + + ld hl,levelVars+VAR_HERO + xor a + call LinkTransmitMemoryLocation + + ld hl,$1103 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + call MakeNonIdle + ld a,STATE_AFTERWEDDING + ldio [mapState],a + ret + +.afterWedding + call ((.animateLandingLights-L0505_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0505_Check2)+levelCheckRAM) + call ((.animateLight-L0505_Check2)+levelCheckRAM) + call ((.animateLight-L0505_Check2)+levelCheckRAM) + call ((.animateLight-L0505_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + + +L0505_CheckFinished: +PRINTT "0505 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0505_LoadFinished - L0505_Load2) +PRINTT " / " +PRINTV (L0505_InitFinished - L0505_Init2) +PRINTT " / " +PRINTV (L0505_CheckFinished - L0505_Check2) +PRINTT "\n" + diff --git a/Source/l0506.asm b/Source/l0506.asm new file mode 100644 index 0000000..033ac4d --- /dev/null +++ b/Source/l0506.asm @@ -0,0 +1,78 @@ +; l0506.asm +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0506Section",ROMX +;--------------------------------------------------------------------- + +L0506_Contents:: + DW L0506_Load + DW L0506_Init + DW L0506_Check + DW L0506_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0506_Load: + DW ((L0506_LoadFinished - L0506_Load2)) ;size +L0506_Load2: + call ParseMap + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$3c] ;rescue from tower + or a + jr z,.notRescued + + ;rescued, open gates + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d04f + ld [hl+],a + ld [hl],a + ld hl,$d06f + ld [hl+],a + ld [hl],a + +.notRescued + ret + +L0506_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0506_Map: +INCBIN "Data/Levels/l0506_garden.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0506_Init: + DW ((L0506_InitFinished - L0506_Init2)) ;size +L0506_Init2: + ret + +L0506_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0506_Check: + DW ((L0506_CheckFinished - L0506_Check2)) ;size +L0506_Check2: + ret + +L0506_CheckFinished: +PRINTT "0506 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0506_LoadFinished - L0506_Load2) +PRINTT " / " +PRINTV (L0506_InitFinished - L0506_Init2) +PRINTT " / " +PRINTV (L0506_CheckFinished - L0506_Check2) +PRINTT "\n" + diff --git a/Source/l0507.asm b/Source/l0507.asm new file mode 100644 index 0000000..6d2766f --- /dev/null +++ b/Source/l0507.asm @@ -0,0 +1,74 @@ +; l0507.asm swamp +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0507Section",ROMX +;--------------------------------------------------------------------- + +L0507_Contents:: + DW L0507_Load + DW L0507_Init + DW L0507_Check + DW L0507_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0507_Load: + DW ((L0507_LoadFinished - L0507_Load2)) ;size +L0507_Load2: + call ParseMap + ret + +L0507_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0507_Map: +INCBIN "Data/Levels/l0507_swamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0507_Init: + DW ((L0507_InitFinished - L0507_Init2)) ;size +L0507_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0507_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0507_Check: + DW ((L0507_CheckFinished - L0507_Check2)) ;size +L0507_Check2: + call ((.animateWater-L0507_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0507_CheckFinished: +PRINTT "0507 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0507_LoadFinished - L0507_Load2) +PRINTT " / " +PRINTV (L0507_InitFinished - L0507_Init2) +PRINTT " / " +PRINTV (L0507_CheckFinished - L0507_Check2) +PRINTT "\n" + diff --git a/Source/l0508.asm b/Source/l0508.asm new file mode 100644 index 0000000..65556e8 --- /dev/null +++ b/Source/l0508.asm @@ -0,0 +1,59 @@ +; l0508.asm +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0508Section",ROMX +;--------------------------------------------------------------------- + +L0508_Contents:: + DW L0508_Load + DW L0508_Init + DW L0508_Check + DW L0508_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0508_Load: + DW ((L0508_LoadFinished - L0508_Load2)) ;size +L0508_Load2: + call ParseMap + ret + +L0508_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0508_Map: +INCBIN "Data/Levels/l0508_witch.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0508_Init: + DW ((L0508_InitFinished - L0508_Init2)) ;size +L0508_Init2: + ret + +L0508_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0508_Check: + DW ((L0508_CheckFinished - L0508_Check2)) ;size +L0508_Check2: + ret + +L0508_CheckFinished: +PRINTT "0508 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0508_LoadFinished - L0508_Load2) +PRINTT " / " +PRINTV (L0508_InitFinished - L0508_Init2) +PRINTT " / " +PRINTV (L0508_CheckFinished - L0508_Check2) +PRINTT "\n" + diff --git a/Source/l0509.asm b/Source/l0509.asm new file mode 100644 index 0000000..985edef --- /dev/null +++ b/Source/l0509.asm @@ -0,0 +1,77 @@ +; l0509.asm big desert +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0509Section",ROMX +;--------------------------------------------------------------------- + +L0509_Contents:: + DW L0509_Load + DW L0509_Init + DW L0509_Check + DW L0509_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0509_Load: + DW ((L0509_LoadFinished - L0509_Load2)) ;size +L0509_Load2: + call ParseMap + ret + +L0509_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0509_Map: +INCBIN "Data/Levels/l0509_bigdesert.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +WATERINDEX EQU 22 + +VAR_WATER EQU 0 + +L0509_Init: + DW ((L0509_InitFinished - L0509_Init2)) ;size +L0509_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ld a,ENV_DIRT + call SetEnvEffect + ret + +L0509_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0509_Check: + DW ((L0509_CheckFinished - L0509_Check2)) ;size +L0509_Check2: + call ((.animateWater-L0509_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0509_CheckFinished: +PRINTT "0509 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0509_LoadFinished - L0509_Load2) +PRINTT " / " +PRINTV (L0509_InitFinished - L0509_Init2) +PRINTT " / " +PRINTV (L0509_CheckFinished - L0509_Check2) +PRINTT "\n" + diff --git a/Source/l0510.asm b/Source/l0510.asm new file mode 100644 index 0000000..bd122cd --- /dev/null +++ b/Source/l0510.asm @@ -0,0 +1,59 @@ +; l0510.asm +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0510Section",ROMX +;--------------------------------------------------------------------- + +L0510_Contents:: + DW L0510_Load + DW L0510_Init + DW L0510_Check + DW L0510_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0510_Load: + DW ((L0510_LoadFinished - L0510_Load2)) ;size +L0510_Load2: + call ParseMap + ret + +L0510_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0510_Map: +INCBIN "Data/Levels/L0510_summer.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0510_Init: + DW ((L0510_InitFinished - L0510_Init2)) ;size +L0510_Init2: + ret + +L0510_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0510_Check: + DW ((L0510_CheckFinished - L0510_Check2)) ;size +L0510_Check2: + ret + +L0510_CheckFinished: +PRINTT "0510 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0510_LoadFinished - L0510_Load2) +PRINTT " / " +PRINTV (L0510_InitFinished - L0510_Init2) +PRINTT " / " +PRINTV (L0510_CheckFinished - L0510_Check2) +PRINTT "\n" + diff --git a/Source/l0512.asm b/Source/l0512.asm new file mode 100644 index 0000000..3ce8414 --- /dev/null +++ b/Source/l0512.asm @@ -0,0 +1,59 @@ +; l0512.asm +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0512Section",ROMX +;--------------------------------------------------------------------- + +L0512_Contents:: + DW L0512_Load + DW L0512_Init + DW L0512_Check + DW L0512_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0512_Load: + DW ((L0512_LoadFinished - L0512_Load2)) ;size +L0512_Load2: + call ParseMap + ret + +L0512_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0512_Map: +INCBIN "Data/Levels/l0512_witch_house.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0512_Init: + DW ((L0512_InitFinished - L0512_Init2)) ;size +L0512_Init2: + ret + +L0512_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0512_Check: + DW ((L0512_CheckFinished - L0512_Check2)) ;size +L0512_Check2: + ret + +L0512_CheckFinished: +PRINTT "0512 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0512_LoadFinished - L0512_Load2) +PRINTT " / " +PRINTV (L0512_InitFinished - L0512_Init2) +PRINTT " / " +PRINTV (L0512_CheckFinished - L0512_Check2) +PRINTT "\n" + diff --git a/Source/l0600.asm b/Source/l0600.asm new file mode 100644 index 0000000..4497f9b --- /dev/null +++ b/Source/l0600.asm @@ -0,0 +1,103 @@ +; l0600.asm +; Generated 08.24.2000 by mlevel +; Modified 08.24.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 57 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0600Section",ROMX +;--------------------------------------------------------------------- + +L0600_Contents:: + DW L0600_Load + DW L0600_Init + DW L0600_Check + DW L0600_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0600_Load: + DW ((L0600_LoadFinished - L0600_Load2)) ;size +L0600_Load2: + call ParseMap + ret + +L0600_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0600_Map: +INCBIN "Data/Levels/l0600_ice.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0600_Init: + DW ((L0600_InitFinished - L0600_Init2)) ;size +L0600_Init2: + call UseAlternatePalette + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + + LONGCALLNOARGS AddAppomattoxIfPresent + + ld a,ENV_SNOW + call SetEnvEffect + + ld a,BANK(frosty_gbm) + ld hl,frosty_gbm + call InitMusic + + ret + +L0600_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0600_Check: + DW ((L0600_CheckFinished - L0600_Check2)) ;size +L0600_Check2: + call ((.animateLandingLights-L0600_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0600_Check2)+levelCheckRAM) + call ((.animateLight-L0600_Check2)+levelCheckRAM) + call ((.animateLight-L0600_Check2)+levelCheckRAM) + call ((.animateLight-L0600_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0600_CheckFinished: +PRINTT "0600 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0600_LoadFinished - L0600_Load2) +PRINTT " / " +PRINTV (L0600_InitFinished - L0600_Init2) +PRINTT " / " +PRINTV (L0600_CheckFinished - L0600_Check2) +PRINTT "\n" + diff --git a/Source/l0601.asm b/Source/l0601.asm new file mode 100644 index 0000000..c3e41c1 --- /dev/null +++ b/Source/l0601.asm @@ -0,0 +1,60 @@ +; l0601.asm +; Generated 09.05.2000 by mlevel +; Modified 09.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0601Section",ROMX +;--------------------------------------------------------------------- + +L0601_Contents:: + DW L0601_Load + DW L0601_Init + DW L0601_Check + DW L0601_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0601_Load: + DW ((L0601_LoadFinished - L0601_Load2)) ;size +L0601_Load2: + call ParseMap + ret + +L0601_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0601_Map: +INCBIN "Data/Levels/l0601_wolf.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0601_Init: + DW ((L0601_InitFinished - L0601_Init2)) ;size +L0601_Init2: + call UseAlternatePalette + ret + +L0601_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0601_Check: + DW ((L0601_CheckFinished - L0601_Check2)) ;size +L0601_Check2: + ret + +L0601_CheckFinished: +PRINTT "0601 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0601_LoadFinished - L0601_Load2) +PRINTT " / " +PRINTV (L0601_InitFinished - L0601_Init2) +PRINTT " / " +PRINTV (L0601_CheckFinished - L0601_Check2) +PRINTT "\n" + diff --git a/Source/l0602.asm b/Source/l0602.asm new file mode 100644 index 0000000..4855de4 --- /dev/null +++ b/Source/l0602.asm @@ -0,0 +1,76 @@ +; l0602.asm +; Generated 10.25.2000 by mlevel +; Modified 10.25.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_FIRE EQU 0 +FIRE_INDEX EQU 24 + +;--------------------------------------------------------------------- +SECTION "Level0602Section",ROMX +;--------------------------------------------------------------------- + +L0602_Contents:: + DW L0602_Load + DW L0602_Init + DW L0602_Check + DW L0602_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0602_Load: + DW ((L0602_LoadFinished - L0602_Load2)) ;size +L0602_Load2: + call ParseMap + ret + +L0602_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0602_Map: +INCBIN "Data/Levels/l0602_hillpeople.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0602_Init: + DW ((L0602_InitFinished - L0602_Init2)) ;size +L0602_Init2: + ;store index of first (of 4) fire frames + ld a,[bgTileMap + FIRE_INDEX] + ld [levelVars + VAR_FIRE],a + ret + +L0602_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0602_Check: + DW ((L0602_CheckFinished - L0602_Check2)) ;size +L0602_Check2: + call ((.animateFire-L0602_Check2)+levelCheckRAM) + ret + +.animateFire + ldio a,[updateTimer] + rrca + rrca + and %11 + ld hl,levelVars + VAR_FIRE + add [hl] + ld [bgTileMap + FIRE_INDEX],a + ret + +L0602_CheckFinished: +PRINTT "0602 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0602_LoadFinished - L0602_Load2) +PRINTT " / " +PRINTV (L0602_InitFinished - L0602_Init2) +PRINTT " / " +PRINTV (L0602_CheckFinished - L0602_Check2) +PRINTT "\n" + diff --git a/Source/l0603.asm b/Source/l0603.asm new file mode 100644 index 0000000..a6f24b1 --- /dev/null +++ b/Source/l0603.asm @@ -0,0 +1,76 @@ +; l0603.asm +; Generated 10.23.2000 by mlevel +; Modified 10.23.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_FIRE EQU 0 +FIRE_INDEX EQU 19 + +;--------------------------------------------------------------------- +SECTION "Level0603Section",ROMX +;--------------------------------------------------------------------- + +L0603_Contents:: + DW L0603_Load + DW L0603_Init + DW L0603_Check + DW L0603_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0603_Load: + DW ((L0603_LoadFinished - L0603_Load2)) ;size +L0603_Load2: + call ParseMap + ret + +L0603_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0603_Map: +INCBIN "Data/Levels/l0603_hillpeople.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0603_Init: + DW ((L0603_InitFinished - L0603_Init2)) ;size +L0603_Init2: + ;store index of first (of 4) fire frames + ld a,[bgTileMap + FIRE_INDEX] + ld [levelVars + VAR_FIRE],a + ret + +L0603_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0603_Check: + DW ((L0603_CheckFinished - L0603_Check2)) ;size +L0603_Check2: + call ((.animateFire-L0603_Check2)+levelCheckRAM) + ret + +.animateFire + ldio a,[updateTimer] + rrca + rrca + and %11 + ld hl,levelVars + VAR_FIRE + add [hl] + ld [bgTileMap + FIRE_INDEX],a + ret + +L0603_CheckFinished: +PRINTT "0603 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0603_LoadFinished - L0603_Load2) +PRINTT " / " +PRINTV (L0603_InitFinished - L0603_Init2) +PRINTT " / " +PRINTV (L0603_CheckFinished - L0603_Check2) +PRINTT "\n" + diff --git a/Source/l0604.asm b/Source/l0604.asm new file mode 100644 index 0000000..8fd8302 --- /dev/null +++ b/Source/l0604.asm @@ -0,0 +1,82 @@ +; l0604.asm outside of tower +; Generated 10.20.2000 by mlevel +; Modified 10.20.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0604Section",ROMX +;--------------------------------------------------------------------- + +L0604_Contents:: + DW L0604_Load + DW L0604_Init + DW L0604_Check + DW L0604_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0604_Load: + DW ((L0604_LoadFinished - L0604_Load2)) ;size +L0604_Load2: + call ParseMap + ret + +L0604_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0604_Map: +INCBIN "Data/Levels/l0604_tower.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0604_Init: + DW ((L0604_InitFinished - L0604_Init2)) ;size +L0604_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$3c] ;rescue from tower + or a + jr nz,.afterRescue + + ;not rescued yet + ld hl,$0604 + call SetJoinMap + call SetRespawnMap + + ;disable south exit + ld de,$4040 + ld hl,mapExitLinks+EXIT_S*2 + ld [hl],e + inc hl + ld [hl],d + +.afterRescue + ret + +L0604_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0604_Check: + DW ((L0604_CheckFinished - L0604_Check2)) ;size +L0604_Check2: + ret + +L0604_CheckFinished: +PRINTT "0604 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0604_LoadFinished - L0604_Load2) +PRINTT " / " +PRINTV (L0604_InitFinished - L0604_Init2) +PRINTT " / " +PRINTV (L0604_CheckFinished - L0604_Check2) +PRINTT "\n" + diff --git a/Source/l0605.asm b/Source/l0605.asm new file mode 100644 index 0000000..7e90ea5 --- /dev/null +++ b/Source/l0605.asm @@ -0,0 +1,84 @@ +; l0605.asm +; Generated 09.14.2000 by mlevel +; Modified 09.14.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0605Section",ROMX +;--------------------------------------------------------------------- + +L0605_Contents:: + DW L0605_Load + DW L0605_Init + DW L0605_Check + DW L0605_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0605_Load: + DW ((L0605_LoadFinished - L0605_Load2)) ;size +L0605_Load2: + call ParseMap + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$3c] ;rescue from tower + or a + jr z,.notRescued + + ;rescued, open gates + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d057 + ld [hl+],a + ld [hl],a + ld hl,$d097 + ld [hl+],a + ld [hl],a + ld hl,$d3c1 + ld [hl+],a + ld [hl],a + ld hl,$d401 + ld [hl+],a + ld [hl],a + +.notRescued + ret + +L0605_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0605_Map: +INCBIN "Data/Levels/l0605_garden.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0605_Init: + DW ((L0605_InitFinished - L0605_Init2)) ;size +L0605_Init2: + ret + +L0605_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0605_Check: + DW ((L0605_CheckFinished - L0605_Check2)) ;size +L0605_Check2: + ret + +L0605_CheckFinished: +PRINTT "0605 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0605_LoadFinished - L0605_Load2) +PRINTT " / " +PRINTV (L0605_InitFinished - L0605_Init2) +PRINTT " / " +PRINTV (L0605_CheckFinished - L0605_Check2) +PRINTT "\n" + diff --git a/Source/l0606.asm b/Source/l0606.asm new file mode 100644 index 0000000..47d55ec --- /dev/null +++ b/Source/l0606.asm @@ -0,0 +1,93 @@ +; l0606.asm moores landing +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 57 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0606Section",ROMX +;--------------------------------------------------------------------- + +L0606_Contents:: + DW L0606_Load + DW L0606_Init + DW L0606_Check + DW L0606_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0606_Load: + DW ((L0606_LoadFinished - L0606_Load2)) ;size +L0606_Load2: + call ParseMap + ret + +L0606_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0606_Map: +INCBIN "Data/Levels/l0606_mooreslanding.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0606_Init: + DW ((L0606_InitFinished - L0606_Init2)) ;size +L0606_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + ret + +L0606_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0606_Check: + DW ((L0606_CheckFinished - L0606_Check2)) ;size +L0606_Check2: + call ((.animateLandingLights-L0606_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0606_Check2)+levelCheckRAM) + call ((.animateLight-L0606_Check2)+levelCheckRAM) + call ((.animateLight-L0606_Check2)+levelCheckRAM) + call ((.animateLight-L0606_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0606_CheckFinished: +PRINTT "0606 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0606_LoadFinished - L0606_Load2) +PRINTT " / " +PRINTV (L0606_InitFinished - L0606_Init2) +PRINTT " / " +PRINTV (L0606_CheckFinished - L0606_Check2) +PRINTT "\n" + diff --git a/Source/l0607.asm b/Source/l0607.asm new file mode 100644 index 0000000..12c12e2 --- /dev/null +++ b/Source/l0607.asm @@ -0,0 +1,61 @@ +; l0607.asm swampy +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0607Section",ROMX +;--------------------------------------------------------------------- + +L0607_Contents:: + DW L0607_Load + DW L0607_Init + DW L0607_Check + DW L0607_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0607_Load: + DW ((L0607_LoadFinished - L0607_Load2)) ;size +L0607_Load2: + call ParseMap + ret + +L0607_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0607_Map: +INCBIN "Data/Levels/l0607_swampthang.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0607_Init: + DW ((L0607_InitFinished - L0607_Init2)) ;size +L0607_Init2: + ld a,ENV_RAIN + call SetEnvEffect + ret + +L0607_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0607_Check: + DW ((L0607_CheckFinished - L0607_Check2)) ;size +L0607_Check2: + ret + +L0607_CheckFinished: +PRINTT "0607 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0607_LoadFinished - L0607_Load2) +PRINTT " / " +PRINTV (L0607_InitFinished - L0607_Init2) +PRINTT " / " +PRINTV (L0607_CheckFinished - L0607_Check2) +PRINTT "\n" + diff --git a/Source/l0608.asm b/Source/l0608.asm new file mode 100644 index 0000000..8d2fad3 --- /dev/null +++ b/Source/l0608.asm @@ -0,0 +1,59 @@ +; l0608.asm +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0608Section",ROMX +;--------------------------------------------------------------------- + +L0608_Contents:: + DW L0608_Load + DW L0608_Init + DW L0608_Check + DW L0608_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0608_Load: + DW ((L0608_LoadFinished - L0608_Load2)) ;size +L0608_Load2: + call ParseMap + ret + +L0608_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0608_Map: +INCBIN "Data/Levels/l0608_moores.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0608_Init: + DW ((L0608_InitFinished - L0608_Init2)) ;size +L0608_Init2: + ret + +L0608_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0608_Check: + DW ((L0608_CheckFinished - L0608_Check2)) ;size +L0608_Check2: + ret + +L0608_CheckFinished: +PRINTT "0608 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0608_LoadFinished - L0608_Load2) +PRINTT " / " +PRINTV (L0608_InitFinished - L0608_Init2) +PRINTT " / " +PRINTV (L0608_CheckFinished - L0608_Check2) +PRINTT "\n" + diff --git a/Source/l0609.asm b/Source/l0609.asm new file mode 100644 index 0000000..c81b98f --- /dev/null +++ b/Source/l0609.asm @@ -0,0 +1,74 @@ +; l0609.asm outback farm +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 4 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0609Section",ROMX +;--------------------------------------------------------------------- + +L0609_Contents:: + DW L0609_Load + DW L0609_Init + DW L0609_Check + DW L0609_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0609_Load: + DW ((L0609_LoadFinished - L0609_Load2)) ;size +L0609_Load2: + call ParseMap + ret + +L0609_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0609_Map: +INCBIN "Data/Levels/l0609_outback.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0609_Init: + DW ((L0609_InitFinished - L0609_Init2)) ;size +L0609_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0609_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0609_Check: + DW ((L0609_CheckFinished - L0609_Check2)) ;size +L0609_Check2: + call ((.animateWater-L0609_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0609_CheckFinished: +PRINTT "0609 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0609_LoadFinished - L0609_Load2) +PRINTT " / " +PRINTV (L0609_InitFinished - L0609_Init2) +PRINTT " / " +PRINTV (L0609_CheckFinished - L0609_Check2) +PRINTT "\n" + diff --git a/Source/l0610.asm b/Source/l0610.asm new file mode 100644 index 0000000..06fee93 --- /dev/null +++ b/Source/l0610.asm @@ -0,0 +1,74 @@ +; l0610.asm outback +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 2 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0610Section",ROMX +;--------------------------------------------------------------------- + +L0610_Contents:: + DW L0610_Load + DW L0610_Init + DW L0610_Check + DW L0610_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0610_Load: + DW ((L0610_LoadFinished - L0610_Load2)) ;size +L0610_Load2: + call ParseMap + ret + +L0610_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0610_Map: +INCBIN "Data/Levels/l0610_outback.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0610_Init: + DW ((L0610_InitFinished - L0610_Init2)) ;size +L0610_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0610_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0610_Check: + DW ((L0610_CheckFinished - L0610_Check2)) ;size +L0610_Check2: + call ((.animateWater-L0610_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0610_CheckFinished: +PRINTT "0610 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0610_LoadFinished - L0610_Load2) +PRINTT " / " +PRINTV (L0610_InitFinished - L0610_Init2) +PRINTT " / " +PRINTV (L0610_CheckFinished - L0610_Check2) +PRINTT "\n" + diff --git a/Source/l0612.asm b/Source/l0612.asm new file mode 100644 index 0000000..958fa8f --- /dev/null +++ b/Source/l0612.asm @@ -0,0 +1,592 @@ +; l0612.asm crouton teleport chamber +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +DICEINDEX EQU 31 +VAR_DICELIGHT EQU 0 +VAR_TENS EQU 1 +VAR_ONES EQU 2 +VAR_COUNT EQU 3 +VAR_VBLANKS EQU 4 + +STATE_NOP EQU 1 +STATE_TALKPLAN EQU 2 +STATE_TALKCONTROLS EQU 3 +STATE_NOCLEARANCE EQU 4 +STATE_COUNTDOWN EQU 5 +STATE_DUKE EQU 6 +STATE_RETURNINIT EQU 7 +STATE_RETURNTALK EQU 8 +STATE_NORMAL EQU 9 + + +;--------------------------------------------------------------------- +SECTION "Level0612Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l0612_plan_gtx: + INCBIN "Data/Dialog/talk/l0612_plan.gtx" + +l0612_clearance_gtx: + INCBIN "Data/Dialog/talk/l0612_clearance.gtx" + +l0612_controls_gtx: + INCBIN "Data/Dialog/talk/l0612_controls.gtx" + +l0612_go_gtx: + INCBIN "Data/Dialog/talk/l0612_go.gtx" + +l0612_duke_gtx: + INCBIN "Data/Dialog/talk/l0612_duke.gtx" + +l0612_return_gtx: + INCBIN "Data/Dialog/talk/l0612_return.gtx" + +L0612_Contents:: + DW L0612_Load + DW L0612_Init + DW L0612_Check + DW L0612_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0612_Load: + DW ((L0612_LoadFinished - L0612_Load2)) ;size +L0612_Load2: + call ParseMap + + ;make sure $ff is a blank sprite tile + PUSHROM + ld a,BANK(BGTiles1024) + call SetActiveROM + ld a,0 + ld c,1 + ld de,$8ff0 + ld hl,BGTiles1024 + call VMemCopy + POPROM + ret + +L0612_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0612_Map: +INCBIN "Data/Levels/l0612_teleport.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0612_Init: + DW ((L0612_InitFinished - L0612_Init2)) ;size +L0612_Init2: + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$cf] ;been to generators? + or a + jr nz,.afterReset ;blown up + + ld a,STATE_NOP + ldio [mapState],a + +.afterReset + STDSETUPDIALOG + + ld hl,$1100 + call SetJoinMap + call SetRespawnMap + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + + ld a,[bgTileMap+DICEINDEX] ;tile index of first light + ld [levelVars+VAR_DICELIGHT],a + + ld a,ENV_COUNTER + ld [envEffectType],a + + ld a,$ff + ld [levelVars+VAR_COUNT],a + xor a + ld [levelVars+VAR_VBLANKS],a + + ;allocate and position two sprites for the timer countdown + ;set them to $ff (blank sprite tile) + call ((.alloc-L0612_Init2)+levelCheckRAM) + ld [levelVars+VAR_TENS],a + call ((.alloc-L0612_Init2)+levelCheckRAM) + ld [levelVars+VAR_ONES],a + inc hl + ld [hl],88 ;different xpos for second + + ;delete hulk, grunt, goblin, and artillery + ld bc,classCroutonGrunt + call DeleteObjectsOfClass + ld bc,classCroutonHulk + call DeleteObjectsOfClass + ld bc,classCroutonArtillery + call DeleteObjectsOfClass + ld bc,classCroutonGoblin + call DeleteObjectsOfClass + + ret + +.alloc + call AllocateSprite + ld l,a + ld h,((spriteOAMBuffer>>8)&$ff) + push hl + ld [hl],16 + inc hl + ld [hl],80 + inc hl + ld [hl],$ff + inc hl + ld [hl],0 + pop hl + ld a,l + ret + +L0612_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0612_Check: + DW ((L0612_CheckFinished - L0612_Check2)) ;size +L0612_Check2: + call ((.animateDiceLights-L0612_Check2)+levelCheckRAM) + call ((.generateCube-L0612_Check2)+levelCheckRAM) + call ((.displayCount-L0612_Check2)+levelCheckRAM) + ld hl,((.vectorToStateTable-L0612_Check2)+levelCheckRAM) + VECTORTOSTATE ((.vectorToStateTable-L0612_Check2)+levelCheckRAM) + ret + +.vectorToStateTable + DW ((.stateNOP-L0612_Check2)+levelCheckRAM) + DW ((.stateNOP-L0612_Check2)+levelCheckRAM) + DW ((.stateTalkPlan-L0612_Check2)+levelCheckRAM) + DW ((.stateTalkControls-L0612_Check2)+levelCheckRAM) + DW ((.stateNoClearance-L0612_Check2)+levelCheckRAM) + DW ((.stateCountdown-L0612_Check2)+levelCheckRAM) + DW ((.stateDuke-L0612_Check2)+levelCheckRAM) + DW ((.stateReturnInit-L0612_Check2)+levelCheckRAM) + DW ((.stateReturnTalk-L0612_Check2)+levelCheckRAM) + DW ((.stateNormal-L0612_Check2)+levelCheckRAM) + +.stateNOP + ld a,STATE_TALKPLAN + ldio [mapState],a + ret + +.stateTalkPlan + call MakeIdle + ld de,((.afterTalkPlanDialog-L0612_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + ld de,l0612_plan_gtx + call ShowDialogAtBottom + +.afterTalkPlanDialog + call ClearDialogSkipForward + call MakeNonIdle + ld a,STATE_TALKCONTROLS + ldio [mapState],a + ret + +.stateTalkControls + ld a,1 + ld hl,((.checkAtControls-L0612_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkAtControls + ld c,a + call GetFirst + call GetCurZone + cp 3 + jr z,.atControls + + xor a + ret + +.atControls + push bc + ld bc,ITEM_ZETACLEAR + call HasInventoryItem + pop bc + jr z,.needClearance + + call SetSpeakerFromHeroIndex + call MakeIdle + ld de,((.afterControlsDialog-L0612_Check2)+levelCheckRAM) + call SetDialogSkip + + ld de,l0612_controls_gtx + call ShowDialogAtBottom + +.afterControlsDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,90 + ld [levelVars+VAR_COUNT],a + ld a,STATE_COUNTDOWN + ldio [mapState],a + ld a,1 + ret + +.needClearance + call MakeIdle + ld de,((.afterClearanceDialog-L0612_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + ld de,l0612_clearance_gtx + call ShowDialogAtBottom + +.afterClearanceDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,STATE_NOCLEARANCE + ldio [mapState],a + ld a,1 + ret + +.stateNoClearance + ret + +.stateCountdown + ld hl,levelVars+VAR_VBLANKS + inc [hl] + ld a,[hl] + cp 30 + ret c + + ld [hl],0 + ld hl,levelVars+VAR_COUNT + dec [hl] + ret nz + + ld a,STATE_DUKE + ldio [mapState],a + ret + +.stateDuke + ld a,1 + ld hl,((.checkAtStation-L0612_Check2)+levelCheckRAM) + jp CheckEachHero + +.checkAtStation + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atStation + + xor a + ret + +.atStation + call MakeIdle + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld de,((.afterGoDialog-L0612_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l0612_go_gtx + call ShowDialogAtBottom + +.afterGoDialog + + ld c,7 +.flicker + ld a,c + rlca + ld b,15 + call SetupFadeFromSaturated + call WaitFade + + ld a,c + rlca + call Delay + + dec c + jr nz,.flicker + + ld a,BANK(jungle_gbm) + ld hl,jungle_gbm + call InitMusic + + xor a + ld [camera_i],a + ld [camera_j],a + + ld de,l0612_duke_gtx + call ShowDialogAtBottom + + ld c,7 +.flicker2 + ld a,c + rlca + ld b,15 + call SetupFadeFromSaturated + call WaitFade + + ld a,c + rlca + call Delay + + dec c + jr nz,.flicker2 + +.afterDukeDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$0912 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + + ld a,STATE_RETURNINIT + ldio [mapState],a + + ld a,EXIT_D + call YankRemotePlayer + + ld a,1 + ld [timeToChangeLevel],a + + ld a,1 + ret + +.stateReturnInit + ld a,STATE_RETURNTALK + ldio [mapState],a + ret + +.stateReturnTalk + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$cf] ;homeworld 4 + or a + jr nz,.talk + + ld a,STATE_RETURNINIT + ldio [mapState],a + ret + +.talk + call MakeIdle + ld de,((.afterReturnDialog-L0612_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerToFirstHero + ld de,l0612_return_gtx + call ShowDialogAtBottom + +.afterReturnDialog + call ClearDialogSkipForward + call MakeNonIdle + ld a,STATE_NORMAL + ldio [mapState],a + ret + +.stateNormal + ret + +.displayCount + ld a,[levelVars+VAR_COUNT] + cp 100 + ret nc ;don't display values >= 100 + + ;tens = count / 10 + ld b,a + ld c,0 +.getDiv + cp 10 + jr c,.gotDiv + sub 10 + inc c + jr .getDiv + +.gotDiv + add 200 + ld hl,spriteOAMBuffer+4+2 + ld [hl],a ;ones digit + ld a,c + add 200 + ld hl,spriteOAMBuffer+2 + ld [hl],a ;tens digit + ret + +.generateCube + ldio a,[mapState] + cp STATE_RETURNINIT + ret nc + + ;make a cube every so often + ldio a,[updateTimer] + and 63 + ret nz + + ;pick one of 12 positions from the table + ;ld a,3 + ;call GetRandomNumMask + ;ld b,a + ;rlca + ;add b + ld a,11 + call GetRandomNumZeroToN + ld hl,((.cubeAppearTable-L0612_Check2)+levelCheckRAM) + ld b,a + call Lookup16 + + ;make sure it's clear + push hl + call ((.isOccupied2x2-L0612_Check2)+levelCheckRAM) + pop hl + jr z,.go + + ld a,b + inc a + cp 12 + jr c,.aokay + xor a +.aokay + ld b,a + ld hl,((.cubeAppearTable-L0612_Check2)+levelCheckRAM) + call Lookup16 + + push hl + call ((.isOccupied2x2-L0612_Check2)+levelCheckRAM) + pop hl + jr z,.go + + ld a,b + inc a + cp 12 + jr c,.aokay2 + xor a +.aokay2 + ld b,a + ld hl,((.cubeAppearTable-L0612_Check2)+levelCheckRAM) + call Lookup16 + + push hl + call ((.isOccupied2x2-L0612_Check2)+levelCheckRAM) + pop hl + ret nz + +.go + ld bc,classTeleportCube + call FindClassIndex + ret z + ld c,a + call CreateInitAndDrawObject + ret + +.isOccupied2x2 + ld a,MAPBANK + ldio [$ff70],a + ld a,[hl+] + or a + ret nz + + ld a,[hl-] + or a + ret nz + + ld a,[mapPitch] + ld e,a + ld d,0 + push de + add hl,de + pop de + ld a,[hl+] + or a + ret nz + + ld a,[hl] + or a + ret + +.animateDiceLights + ;animate dice lights + ld a,[levelVars+VAR_DICELIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+DICEINDEX + call ((.updateTwoLights - L0612_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L0612_Check2) + levelCheckRAM) + ret + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L0612_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + +.cubeAppearTable + DW $d1a3, $d223, $d2a3, $d323, $d3a3, $d423 + DW $d1b1, $d231, $d2b1, $d331, $d3b1, $d431 +;$d1a3 + ;$d223 + ;$d2a3 +;$d323 + ;$d3a3 + ;$d423 +;$d1b1 + ;$d231 + ;$d2b1 +;$d331 + ;$d3b1 + ;$d431 + + +L0612_CheckFinished: +PRINTT "0612 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0612_LoadFinished - L0612_Load2) +PRINTT " / " +PRINTV (L0612_InitFinished - L0612_Init2) +PRINTT " / " +PRINTV (L0612_CheckFinished - L0612_Check2) +PRINTT "\n" + diff --git a/Source/l0700.asm b/Source/l0700.asm new file mode 100644 index 0000000..0e9a11d --- /dev/null +++ b/Source/l0700.asm @@ -0,0 +1,62 @@ +; l0700.asm +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0700Section",ROMX +;--------------------------------------------------------------------- + +L0700_Contents:: + DW L0700_Load + DW L0700_Init + DW L0700_Check + DW L0700_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0700_Load: + DW ((L0700_LoadFinished - L0700_Load2)) ;size +L0700_Load2: + call ParseMap + ret + +L0700_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0700_Map: +INCBIN "Data/Levels/L0700_ice.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0700_Init: + DW ((L0700_InitFinished - L0700_Init2)) ;size +L0700_Init2: + call UseAlternatePalette + ld a,ENV_SNOW + call SetEnvEffect + ret + +L0700_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0700_Check: + DW ((L0700_CheckFinished - L0700_Check2)) ;size +L0700_Check2: + ret + +L0700_CheckFinished: +PRINTT "0700 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0700_LoadFinished - L0700_Load2) +PRINTT " / " +PRINTV (L0700_InitFinished - L0700_Init2) +PRINTT " / " +PRINTV (L0700_CheckFinished - L0700_Check2) +PRINTT "\n" + diff --git a/Source/l0701.asm b/Source/l0701.asm new file mode 100644 index 0000000..8bf1093 --- /dev/null +++ b/Source/l0701.asm @@ -0,0 +1,61 @@ +; l0701.asm kiwi keep +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0701Section",ROMX +;--------------------------------------------------------------------- + +L0701_Contents:: + DW L0701_Load + DW L0701_Init + DW L0701_Check + DW L0701_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0701_Load: + DW ((L0701_LoadFinished - L0701_Load2)) ;size +L0701_Load2: + call ParseMap + ret + +L0701_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0701_Map: +INCBIN "Data/Levels/l0701_kiwikeep.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0701_Init: + DW ((L0701_InitFinished - L0701_Init2)) ;size +L0701_Init2: + ld a,ENV_CLOUDS + call SetEnvEffect + ret + +L0701_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0701_Check: + DW ((L0701_CheckFinished - L0701_Check2)) ;size +L0701_Check2: + ret + +L0701_CheckFinished: +PRINTT "0701 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0701_LoadFinished - L0701_Load2) +PRINTT " / " +PRINTV (L0701_InitFinished - L0701_Init2) +PRINTT " / " +PRINTV (L0701_CheckFinished - L0701_Check2) +PRINTT "\n" + diff --git a/Source/l0702.asm b/Source/l0702.asm new file mode 100644 index 0000000..8dd0ebc --- /dev/null +++ b/Source/l0702.asm @@ -0,0 +1,59 @@ +; l0702.asm +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0702Section",ROMX +;--------------------------------------------------------------------- + +L0702_Contents:: + DW L0702_Load + DW L0702_Init + DW L0702_Check + DW L0702_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0702_Load: + DW ((L0702_LoadFinished - L0702_Load2)) ;size +L0702_Load2: + call ParseMap + ret + +L0702_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0702_Map: +INCBIN "Data/Levels/l0702_caverns.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0702_Init: + DW ((L0702_InitFinished - L0702_Init2)) ;size +L0702_Init2: + ret + +L0702_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0702_Check: + DW ((L0702_CheckFinished - L0702_Check2)) ;size +L0702_Check2: + ret + +L0702_CheckFinished: +PRINTT "0702 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0702_LoadFinished - L0702_Load2) +PRINTT " / " +PRINTV (L0702_InitFinished - L0702_Init2) +PRINTT " / " +PRINTV (L0702_CheckFinished - L0702_Check2) +PRINTT "\n" + diff --git a/Source/l0703.asm b/Source/l0703.asm new file mode 100644 index 0000000..61735aa --- /dev/null +++ b/Source/l0703.asm @@ -0,0 +1,59 @@ +; l0703.asm +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0703Section",ROMX +;--------------------------------------------------------------------- + +L0703_Contents:: + DW L0703_Load + DW L0703_Init + DW L0703_Check + DW L0703_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0703_Load: + DW ((L0703_LoadFinished - L0703_Load2)) ;size +L0703_Load2: + call ParseMap + ret + +L0703_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0703_Map: +INCBIN "Data/Levels/l0703_caverns.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0703_Init: + DW ((L0703_InitFinished - L0703_Init2)) ;size +L0703_Init2: + ret + +L0703_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0703_Check: + DW ((L0703_CheckFinished - L0703_Check2)) ;size +L0703_Check2: + ret + +L0703_CheckFinished: +PRINTT "0703 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0703_LoadFinished - L0703_Load2) +PRINTT " / " +PRINTV (L0703_InitFinished - L0703_Init2) +PRINTT " / " +PRINTV (L0703_CheckFinished - L0703_Check2) +PRINTT "\n" + diff --git a/Source/l0704.asm b/Source/l0704.asm new file mode 100644 index 0000000..fea6096 --- /dev/null +++ b/Source/l0704.asm @@ -0,0 +1,98 @@ +; l0704.asm Canyon Landing +; Generated 09.18.2000 by mlevel +; Modified 09.18.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 65 + +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0704Section",ROMX +;--------------------------------------------------------------------- + +L0704_Contents:: + DW L0704_Load + DW L0704_Init + DW L0704_Check + DW L0704_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0704_Load: + DW ((L0704_LoadFinished - L0704_Load2)) ;size +L0704_Load2: + call ParseMap + ret + +L0704_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0704_Map: +INCBIN "Data/Levels/l0704_canyon.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0704_Init: + DW ((L0704_InitFinished - L0704_Init2)) ;size +L0704_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + ;ld a,BANK(main_in_game_gbm) + ;ld hl,main_in_game_gbm + ;call InitMusic + ret + +L0704_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0704_Check: + DW ((L0704_CheckFinished - L0704_Check2)) ;size +L0704_Check2: + call ((.animateLandingLights-L0704_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0704_Check2)+levelCheckRAM) + call ((.animateLight-L0704_Check2)+levelCheckRAM) + call ((.animateLight-L0704_Check2)+levelCheckRAM) + call ((.animateLight-L0704_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0704_CheckFinished: +PRINTT "0704 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0704_LoadFinished - L0704_Load2) +PRINTT " / " +PRINTV (L0704_InitFinished - L0704_Init2) +PRINTT " / " +PRINTV (L0704_CheckFinished - L0704_Check2) +PRINTT "\n" + diff --git a/Source/l0705.asm b/Source/l0705.asm new file mode 100644 index 0000000..c033830 --- /dev/null +++ b/Source/l0705.asm @@ -0,0 +1,59 @@ +; l0705.asm +; Generated 10.26.2000 by mlevel +; Modified 10.26.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0705Section",ROMX +;--------------------------------------------------------------------- + +L0705_Contents:: + DW L0705_Load + DW L0705_Init + DW L0705_Check + DW L0705_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0705_Load: + DW ((L0705_LoadFinished - L0705_Load2)) ;size +L0705_Load2: + call ParseMap + ret + +L0705_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0705_Map: +INCBIN "Data/Levels/l0705_jungle.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0705_Init: + DW ((L0705_InitFinished - L0705_Init2)) ;size +L0705_Init2: + ret + +L0705_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0705_Check: + DW ((L0705_CheckFinished - L0705_Check2)) ;size +L0705_Check2: + ret + +L0705_CheckFinished: +PRINTT "0705 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0705_LoadFinished - L0705_Load2) +PRINTT " / " +PRINTV (L0705_InitFinished - L0705_Init2) +PRINTT " / " +PRINTV (L0705_CheckFinished - L0705_Check2) +PRINTT "\n" + diff --git a/Source/l0706.asm b/Source/l0706.asm new file mode 100644 index 0000000..3c85f16 --- /dev/null +++ b/Source/l0706.asm @@ -0,0 +1,59 @@ +; l0706.asm +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0706Section",ROMX +;--------------------------------------------------------------------- + +L0706_Contents:: + DW L0706_Load + DW L0706_Init + DW L0706_Check + DW L0706_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0706_Load: + DW ((L0706_LoadFinished - L0706_Load2)) ;size +L0706_Load2: + call ParseMap + ret + +L0706_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0706_Map: +INCBIN "Data/Levels/l0706_swamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0706_Init: + DW ((L0706_InitFinished - L0706_Init2)) ;size +L0706_Init2: + ret + +L0706_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0706_Check: + DW ((L0706_CheckFinished - L0706_Check2)) ;size +L0706_Check2: + ret + +L0706_CheckFinished: +PRINTT "0706 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0706_LoadFinished - L0706_Load2) +PRINTT " / " +PRINTV (L0706_InitFinished - L0706_Init2) +PRINTT " / " +PRINTV (L0706_CheckFinished - L0706_Check2) +PRINTT "\n" + diff --git a/Source/l0707.asm b/Source/l0707.asm new file mode 100644 index 0000000..c337ed5 --- /dev/null +++ b/Source/l0707.asm @@ -0,0 +1,61 @@ +; l0707.asm +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0707Section",ROMX +;--------------------------------------------------------------------- + +L0707_Contents:: + DW L0707_Load + DW L0707_Init + DW L0707_Check + DW L0707_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0707_Load: + DW ((L0707_LoadFinished - L0707_Load2)) ;size +L0707_Load2: + call ParseMap + ret + +L0707_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0707_Map: +INCBIN "Data/Levels/l0707_barrows.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0707_Init: + DW ((L0707_InitFinished - L0707_Init2)) ;size +L0707_Init2: + ld a,ENV_RAIN + call SetEnvEffect + ret + +L0707_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0707_Check: + DW ((L0707_CheckFinished - L0707_Check2)) ;size +L0707_Check2: + ret + +L0707_CheckFinished: +PRINTT "0707 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0707_LoadFinished - L0707_Load2) +PRINTT " / " +PRINTV (L0707_InitFinished - L0707_Init2) +PRINTT " / " +PRINTV (L0707_CheckFinished - L0707_Check2) +PRINTT "\n" + diff --git a/Source/l0708.asm b/Source/l0708.asm new file mode 100644 index 0000000..4bfb162 --- /dev/null +++ b/Source/l0708.asm @@ -0,0 +1,59 @@ +; l0708.asm +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0708Section",ROMX +;--------------------------------------------------------------------- + +L0708_Contents:: + DW L0708_Load + DW L0708_Init + DW L0708_Check + DW L0708_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0708_Load: + DW ((L0708_LoadFinished - L0708_Load2)) ;size +L0708_Load2: + call ParseMap + ret + +L0708_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0708_Map: +INCBIN "Data/Levels/l0708_swamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0708_Init: + DW ((L0708_InitFinished - L0708_Init2)) ;size +L0708_Init2: + ret + +L0708_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0708_Check: + DW ((L0708_CheckFinished - L0708_Check2)) ;size +L0708_Check2: + ret + +L0708_CheckFinished: +PRINTT "0708 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0708_LoadFinished - L0708_Load2) +PRINTT " / " +PRINTV (L0708_InitFinished - L0708_Init2) +PRINTT " / " +PRINTV (L0708_CheckFinished - L0708_Check2) +PRINTT "\n" + diff --git a/Source/l0709.asm b/Source/l0709.asm new file mode 100644 index 0000000..1a29a87 --- /dev/null +++ b/Source/l0709.asm @@ -0,0 +1,81 @@ +; l0709.asm scardie +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 2 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0709Section",ROMX +;--------------------------------------------------------------------- + +L0709_Contents:: + DW L0709_Load + DW L0709_Init + DW L0709_Check + DW L0709_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0709_Load: + DW ((L0709_LoadFinished - L0709_Load2)) ;size +L0709_Load2: + call ParseMap + ret + +L0709_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0709_Map: +INCBIN "Data/Levels/l0709_outback.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0709_Init: + DW ((L0709_InitFinished - L0709_Init2)) ;size +L0709_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + ld a,ENV_DIRT + call SetEnvEffect + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0709_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0709_Check: + DW ((L0709_CheckFinished - L0709_Check2)) ;size +L0709_Check2: + call ((.animateWater-L0709_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0709_CheckFinished: +PRINTT "0709 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0709_LoadFinished - L0709_Load2) +PRINTT " / " +PRINTV (L0709_InitFinished - L0709_Init2) +PRINTT " / " +PRINTV (L0709_CheckFinished - L0709_Check2) +PRINTT "\n" + diff --git a/Source/l0710.asm b/Source/l0710.asm new file mode 100644 index 0000000..c14fc12 --- /dev/null +++ b/Source/l0710.asm @@ -0,0 +1,78 @@ +; l0710.asm outback croc keeper +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 3 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0710Section",ROMX +;--------------------------------------------------------------------- + +L0710_Contents:: + DW L0710_Load + DW L0710_Init + DW L0710_Check + DW L0710_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0710_Load: + DW ((L0710_LoadFinished - L0710_Load2)) ;size +L0710_Load2: + call ParseMap + ret + +L0710_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0710_Map: +INCBIN "Data/Levels/l0710_outback.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0710_Init: + DW ((L0710_InitFinished - L0710_Init2)) ;size +L0710_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0710_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0710_Check: + DW ((L0710_CheckFinished - L0710_Check2)) ;size +L0710_Check2: + call ((.animateWater-L0710_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0710_CheckFinished: +PRINTT "0710 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0710_LoadFinished - L0710_Load2) +PRINTT " / " +PRINTV (L0710_InitFinished - L0710_Init2) +PRINTT " / " +PRINTV (L0710_CheckFinished - L0710_Check2) +PRINTT "\n" + diff --git a/Source/l0711.asm b/Source/l0711.asm new file mode 100644 index 0000000..94919ed --- /dev/null +++ b/Source/l0711.asm @@ -0,0 +1,104 @@ +; l0711.asm Space Station Apocalypse Exterior +; Generated 04.25.2001 by mlevel +; Modified 04.25.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +import classBAPlayer +import classBSPlayer +import classHaikuPlayer +import classBAPlayerSpace +import classBSPlayerSpace +import classHaikuPlayerSpace + +;--------------------------------------------------------------------- +SECTION "Level0711Section",ROMX +;--------------------------------------------------------------------- + +L0711_Contents:: + DW L0711_Load + DW L0711_Init + DW L0711_Check + DW L0711_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0711_Load: + DW ((L0711_LoadFinished - L0711_Load2)) ;size +L0711_Load2: + ld a,[hero0_enterLevelFacing] + cp EXIT_U + jr nz,.checkHero1 + + ld a,50 + ld [hero0_enterLevelLocation],a + ld a,23 + ld [hero0_enterLevelLocation+1],a + +.checkHero1 + ld a,[hero1_enterLevelFacing] + cp EXIT_U + jr nz,.afterChangeEnterLoc + + ld a,50 + ld [hero1_enterLevelLocation],a + ld a,23 + ld [hero1_enterLevelLocation+1],a + +.afterChangeEnterLoc + call ParseMap + ret + +L0711_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0711_Map: +INCBIN "Data/Levels/l0711_spacestation.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0711_Init: + DW ((L0711_InitFinished - L0711_Init2)) ;size +L0711_Init2: + ld a,BANK(spaceish_gbm) + ld hl,spaceish_gbm + call InitMusic + ret + +L0711_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0711_Check: + DW ((L0711_CheckFinished - L0711_Check2)) ;size +L0711_Check2: + call ((.changePlayersToSpace-L0711_Check2)+levelCheckRAM) + ret + +.changePlayersToSpace + ld bc,classBAPlayer + ld de,classBAPlayerSpace + call ChangeClass + + ld bc,classBSPlayer + ld de,classBSPlayerSpace + call ChangeClass + + ld bc,classHaikuPlayer + ld de,classHaikuPlayerSpace + call ChangeClass + ret + +L0711_CheckFinished: +PRINTT "0711 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0711_LoadFinished - L0711_Load2) +PRINTT " / " +PRINTV (L0711_InitFinished - L0711_Init2) +PRINTT " / " +PRINTV (L0711_CheckFinished - L0711_Check2) +PRINTT "\n" + diff --git a/Source/l0712.asm b/Source/l0712.asm new file mode 100644 index 0000000..543ccda --- /dev/null +++ b/Source/l0712.asm @@ -0,0 +1,97 @@ +; l0712.asm farm landing +; Generated 11.29.2000 by mlevel +; Modified 11.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 46 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0712Section",ROMX +;--------------------------------------------------------------------- + +L0712_Contents:: + DW L0712_Load + DW L0712_Init + DW L0712_Check + DW L0712_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0712_Load: + DW ((L0712_LoadFinished - L0712_Load2)) ;size +L0712_Load2: + call ParseMap + ret + +L0712_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0712_Map: +INCBIN "Data/Levels/l0712_farmlanding.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0712_Init: + DW ((L0712_InitFinished - L0712_Init2)) ;size +L0712_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + ld a,BANK(cowboy_gbm) + ld hl,cowboy_gbm + call InitMusic + ret + +L0712_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0712_Check: + DW ((L0712_CheckFinished - L0712_Check2)) ;size +L0712_Check2: + call ((.animateLandingLights-L0712_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0712_Check2)+levelCheckRAM) + call ((.animateLight-L0712_Check2)+levelCheckRAM) + call ((.animateLight-L0712_Check2)+levelCheckRAM) + call ((.animateLight-L0712_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0712_CheckFinished: +PRINTT "0712 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0712_LoadFinished - L0712_Load2) +PRINTT " / " +PRINTV (L0712_InitFinished - L0712_Init2) +PRINTT " / " +PRINTV (L0712_CheckFinished - L0712_Check2) +PRINTT "\n" + diff --git a/Source/l0800.asm b/Source/l0800.asm new file mode 100644 index 0000000..76933ae --- /dev/null +++ b/Source/l0800.asm @@ -0,0 +1,95 @@ +; l0800.asm ice bridge +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX1 EQU 6 +WATERINDEX2 EQU 16 +VAR_WATER1 EQU 0 +VAR_WATER2 EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level0800Section",ROMX +;--------------------------------------------------------------------- + +L0800_Contents:: + DW L0800_Load + DW L0800_Init + DW L0800_Check + DW L0800_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0800_Load: + DW ((L0800_LoadFinished - L0800_Load2)) ;size +L0800_Load2: + call ParseMap + ret + +L0800_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0800_Map: +INCBIN "Data/Levels/l0800_ice.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0800_Init: + DW ((L0800_InitFinished - L0800_Init2)) ;size +L0800_Init2: + call UseAlternatePalette + ld a,[bgTileMap + WATERINDEX1] + ld [levelVars + VAR_WATER1],a + ld a,[bgTileMap + WATERINDEX2] + ld [levelVars + VAR_WATER2],a + ld a,ENV_SNOW + call SetEnvEffect + + ld a,BANK(frosty_gbm) + ld hl,frosty_gbm + call InitMusic + ret + +L0800_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0800_Check: + DW ((L0800_CheckFinished - L0800_Check2)) ;size +L0800_Check2: + call ((.animateWater1-L0800_Check2)+levelCheckRAM) + call ((.animateWater2-L0800_Check2)+levelCheckRAM) + ret + +.animateWater1 + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER1 + add [hl] + ld [bgTileMap + WATERINDEX1],a + ret + +.animateWater2 + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER2 + add [hl] + ld [bgTileMap + WATERINDEX2],a + ret + +L0800_CheckFinished: +PRINTT "0800 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0800_LoadFinished - L0800_Load2) +PRINTT " / " +PRINTV (L0800_InitFinished - L0800_Init2) +PRINTT " / " +PRINTV (L0800_CheckFinished - L0800_Check2) +PRINTT "\n" + diff --git a/Source/l0801.asm b/Source/l0801.asm new file mode 100644 index 0000000..38d4fcf --- /dev/null +++ b/Source/l0801.asm @@ -0,0 +1,59 @@ +; l0801.asm +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0801Section",ROMX +;--------------------------------------------------------------------- + +L0801_Contents:: + DW L0801_Load + DW L0801_Init + DW L0801_Check + DW L0801_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0801_Load: + DW ((L0801_LoadFinished - L0801_Load2)) ;size +L0801_Load2: + call ParseMap + ret + +L0801_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0801_Map: +INCBIN "Data/Levels/l0801_escape.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0801_Init: + DW ((L0801_InitFinished - L0801_Init2)) ;size +L0801_Init2: + ret + +L0801_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0801_Check: + DW ((L0801_CheckFinished - L0801_Check2)) ;size +L0801_Check2: + ret + +L0801_CheckFinished: +PRINTT "0801 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0801_LoadFinished - L0801_Load2) +PRINTT " / " +PRINTV (L0801_InitFinished - L0801_Init2) +PRINTT " / " +PRINTV (L0801_CheckFinished - L0801_Check2) +PRINTT "\n" + diff --git a/Source/l0802.asm b/Source/l0802.asm new file mode 100644 index 0000000..b6b54dc --- /dev/null +++ b/Source/l0802.asm @@ -0,0 +1,65 @@ +; l0802.asm windy passage +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0802Section",ROMX +;--------------------------------------------------------------------- + +L0802_Contents:: + DW L0802_Load + DW L0802_Init + DW L0802_Check + DW L0802_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0802_Load: + DW ((L0802_LoadFinished - L0802_Load2)) ;size +L0802_Load2: + call ParseMap + ret + +L0802_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0802_Map: +INCBIN "Data/Levels/l0802_windypass.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0802_Init: + DW ((L0802_InitFinished - L0802_Init2)) ;size +L0802_Init2: + call UseAlternatePalette + ld a,ENV_WINDYSNOW + call SetEnvEffect + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0802_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0802_Check: + DW ((L0802_CheckFinished - L0802_Check2)) ;size +L0802_Check2: + ret + +L0802_CheckFinished: +PRINTT "0802 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0802_LoadFinished - L0802_Load2) +PRINTT " / " +PRINTV (L0802_InitFinished - L0802_Init2) +PRINTT " / " +PRINTV (L0802_CheckFinished - L0802_Check2) +PRINTT "\n" + diff --git a/Source/l0803.asm b/Source/l0803.asm new file mode 100644 index 0000000..7a442d6 --- /dev/null +++ b/Source/l0803.asm @@ -0,0 +1,74 @@ +; l0803.asm genie +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 24 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0803Section",ROMX +;--------------------------------------------------------------------- + +L0803_Contents:: + DW L0803_Load + DW L0803_Init + DW L0803_Check + DW L0803_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0803_Load: + DW ((L0803_LoadFinished - L0803_Load2)) ;size +L0803_Load2: + call ParseMap + ret + +L0803_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0803_Map: +INCBIN "Data/Levels/l0803_djinn.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0803_Init: + DW ((L0803_InitFinished - L0803_Init2)) ;size +L0803_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0803_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0803_Check: + DW ((L0803_CheckFinished - L0803_Check2)) ;size +L0803_Check2: + call ((.animateWater-L0803_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0803_CheckFinished: +PRINTT "0803 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0803_LoadFinished - L0803_Load2) +PRINTT " / " +PRINTV (L0803_InitFinished - L0803_Init2) +PRINTT " / " +PRINTV (L0803_CheckFinished - L0803_Check2) +PRINTT "\n" + diff --git a/Source/l0804.asm b/Source/l0804.asm new file mode 100644 index 0000000..57153c6 --- /dev/null +++ b/Source/l0804.asm @@ -0,0 +1,75 @@ +; l0804.asm grand canyon +; Generated 09.18.2000 by mlevel +; Modified 09.18.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +VAR_WATER EQU 0 + + +;--------------------------------------------------------------------- +SECTION "Level0804Section",ROMX +;--------------------------------------------------------------------- + +L0804_Contents:: + DW L0804_Load + DW L0804_Init + DW L0804_Check + DW L0804_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0804_Load: + DW ((L0804_LoadFinished - L0804_Load2)) ;size +L0804_Load2: + call ParseMap + ret + +L0804_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0804_Map: +INCBIN "Data/Levels/l0804_canyon.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0804_Init: + DW ((L0804_InitFinished - L0804_Init2)) ;size +L0804_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ret + +L0804_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0804_Check: + DW ((L0804_CheckFinished - L0804_Check2)) ;size +L0804_Check2: + call ((.animateWater-L0804_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L0804_CheckFinished: +PRINTT "0804 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0804_LoadFinished - L0804_Load2) +PRINTT " / " +PRINTV (L0804_InitFinished - L0804_Init2) +PRINTT " / " +PRINTV (L0804_CheckFinished - L0804_Check2) +PRINTT "\n" + diff --git a/Source/l0805.asm b/Source/l0805.asm new file mode 100644 index 0000000..85e6f35 --- /dev/null +++ b/Source/l0805.asm @@ -0,0 +1,59 @@ +; l0805.asm +; Generated 10.27.2000 by mlevel +; Modified 10.27.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0805Section",ROMX +;--------------------------------------------------------------------- + +L0805_Contents:: + DW L0805_Load + DW L0805_Init + DW L0805_Check + DW L0805_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0805_Load: + DW ((L0805_LoadFinished - L0805_Load2)) ;size +L0805_Load2: + call ParseMap + ret + +L0805_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0805_Map: +INCBIN "Data/Levels/L0805_jungle.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0805_Init: + DW ((L0805_InitFinished - L0805_Init2)) ;size +L0805_Init2: + ret + +L0805_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0805_Check: + DW ((L0805_CheckFinished - L0805_Check2)) ;size +L0805_Check2: + ret + +L0805_CheckFinished: +PRINTT "0805 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0805_LoadFinished - L0805_Load2) +PRINTT " / " +PRINTV (L0805_InitFinished - L0805_Init2) +PRINTT " / " +PRINTV (L0805_CheckFinished - L0805_Check2) +PRINTT "\n" + diff --git a/Source/l0806.asm b/Source/l0806.asm new file mode 100644 index 0000000..71b3d97 --- /dev/null +++ b/Source/l0806.asm @@ -0,0 +1,62 @@ +; l0806.asm +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0806Section",ROMX +;--------------------------------------------------------------------- + +L0806_Contents:: + DW L0806_Load + DW L0806_Init + DW L0806_Check + DW L0806_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0806_Load: + DW ((L0806_LoadFinished - L0806_Load2)) ;size +L0806_Load2: + call ParseMap + ret + +L0806_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0806_Map: +INCBIN "Data/Levels/l0806_moores.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0806_Init: + DW ((L0806_InitFinished - L0806_Init2)) ;size +L0806_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0806_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0806_Check: + DW ((L0806_CheckFinished - L0806_Check2)) ;size +L0806_Check2: + ret + +L0806_CheckFinished: +PRINTT "0806 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0806_LoadFinished - L0806_Load2) +PRINTT " / " +PRINTV (L0806_InitFinished - L0806_Init2) +PRINTT " / " +PRINTV (L0806_CheckFinished - L0806_Check2) +PRINTT "\n" + diff --git a/Source/l0807.asm b/Source/l0807.asm new file mode 100644 index 0000000..d00e552 --- /dev/null +++ b/Source/l0807.asm @@ -0,0 +1,62 @@ +; l0807.asm +; Generated 11.03.2000 by mlevel +; Modified 11.03.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0807Section",ROMX +;--------------------------------------------------------------------- + +L0807_Contents:: + DW L0807_Load + DW L0807_Init + DW L0807_Check + DW L0807_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0807_Load: + DW ((L0807_LoadFinished - L0807_Load2)) ;size +L0807_Load2: + call ParseMap + ret + +L0807_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0807_Map: +INCBIN "Data/Levels/l0807_swamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0807_Init: + DW ((L0807_InitFinished - L0807_Init2)) ;size +L0807_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0807_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0807_Check: + DW ((L0807_CheckFinished - L0807_Check2)) ;size +L0807_Check2: + ret + +L0807_CheckFinished: +PRINTT "0807 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0807_LoadFinished - L0807_Load2) +PRINTT " / " +PRINTV (L0807_InitFinished - L0807_Init2) +PRINTT " / " +PRINTV (L0807_CheckFinished - L0807_Check2) +PRINTT "\n" + diff --git a/Source/l0808.asm b/Source/l0808.asm new file mode 100644 index 0000000..45d184c --- /dev/null +++ b/Source/l0808.asm @@ -0,0 +1,101 @@ +; l0808.asm crouton war camp +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +HFENCE_INDEX EQU 129 +VFENCE_INDEX EQU 133 +VAR_HFENCE EQU 0 +VAR_VFENCE EQU 1 + + +;--------------------------------------------------------------------- +SECTION "Level0808Section",ROMX +;--------------------------------------------------------------------- + +L0808_Contents:: + DW L0808_Load + DW L0808_Init + DW L0808_Check + DW L0808_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0808_Load: + DW ((L0808_LoadFinished - L0808_Load2)) ;size +L0808_Load2: + call ParseMap + ret + +L0808_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0808_Map: +INCBIN "Data/Levels/l0808_warcamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0808_Init: + DW ((L0808_InitFinished - L0808_Init2)) ;size +L0808_Init2: + ld a,[bgTileMap+HFENCE_INDEX] + ld [levelVars + VAR_HFENCE],a + ld a,[bgTileMap+VFENCE_INDEX] + ld [levelVars + VAR_VFENCE],a + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + + ret + +L0808_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0808_Check: + DW ((L0808_CheckFinished - L0808_Check2)) ;size +L0808_Check2: + call ((.animateFence-L0808_Check2)+levelCheckRAM) + ret + +.animateFence + ldio a,[updateTimer] + rrca + and 3 + ld b,a + ld hl,bgTileMap+HFENCE_INDEX + ld a,[levelVars+VAR_HFENCE] + ld d,a + call ((.animateFourFrames-L0808_Check2)+levelCheckRAM) + ld a,[levelVars+VAR_VFENCE] + ld d,a + jp ((.animateFourFrames-L0808_Check2)+levelCheckRAM) + +.animateFourFrames + ld c,4 + +.animateFourFrames_loop + ld a,b + add c + and 3 + add d + ld [hl+],a + dec c + jr nz,.animateFourFrames_loop + ret + +L0808_CheckFinished: +PRINTT "0808 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0808_LoadFinished - L0808_Load2) +PRINTT " / " +PRINTV (L0808_InitFinished - L0808_Init2) +PRINTT " / " +PRINTV (L0808_CheckFinished - L0808_Check2) +PRINTT "\n" + diff --git a/Source/l0809.asm b/Source/l0809.asm new file mode 100644 index 0000000..098a375 --- /dev/null +++ b/Source/l0809.asm @@ -0,0 +1,65 @@ +; l0809.asm grenade vs goblin charge +; Generated 11.01.2000 by mlevel +; Modified 11.01.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0809Section",ROMX +;--------------------------------------------------------------------- + +L0809_Contents:: + DW L0809_Load + DW L0809_Init + DW L0809_Check + DW L0809_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0809_Load: + DW ((L0809_LoadFinished - L0809_Load2)) ;size +L0809_Load2: + call ParseMap + ret + +L0809_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0809_Map: +INCBIN "Data/Levels/l0809_warzone.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0809_Init: + DW ((L0809_InitFinished - L0809_Init2)) ;size +L0809_Init2: + ld a,ENV_DIRT + call SetEnvEffect + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + ret + +L0809_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0809_Check: + DW ((L0809_CheckFinished - L0809_Check2)) ;size +L0809_Check2: + ret + +L0809_CheckFinished: +PRINTT "0809 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0809_LoadFinished - L0809_Load2) +PRINTT " / " +PRINTV (L0809_InitFinished - L0809_Init2) +PRINTT " / " +PRINTV (L0809_CheckFinished - L0809_Check2) +PRINTT "\n" + diff --git a/Source/l0810.asm b/Source/l0810.asm new file mode 100644 index 0000000..26b08c0 --- /dev/null +++ b/Source/l0810.asm @@ -0,0 +1,98 @@ +; l0810.asm graves landing +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 40 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0810Section",ROMX +;--------------------------------------------------------------------- + +L0810_Contents:: + DW L0810_Load + DW L0810_Init + DW L0810_Check + DW L0810_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0810_Load: + DW ((L0810_LoadFinished - L0810_Load2)) ;size +L0810_Load2: + call ParseMap + ret + +L0810_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0810_Map: +INCBIN "Data/Levels/l0810_graveslanding.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0810_Init: + DW ((L0810_InitFinished - L0810_Init2)) ;size +L0810_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + + LONGCALLNOARGS AddAppomattoxIfPresent + ret + +L0810_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0810_Check: + DW ((L0810_CheckFinished - L0810_Check2)) ;size +L0810_Check2: + call ((.animateLandingLights-L0810_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0810_Check2)+levelCheckRAM) + call ((.animateLight-L0810_Check2)+levelCheckRAM) + call ((.animateLight-L0810_Check2)+levelCheckRAM) + call ((.animateLight-L0810_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0810_CheckFinished: +PRINTT "0810 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0810_LoadFinished - L0810_Load2) +PRINTT " / " +PRINTV (L0810_InitFinished - L0810_Init2) +PRINTT " / " +PRINTV (L0810_CheckFinished - L0810_Check2) +PRINTT "\n" + diff --git a/Source/l0811.asm b/Source/l0811.asm new file mode 100644 index 0000000..d2b817c --- /dev/null +++ b/Source/l0811.asm @@ -0,0 +1,174 @@ +; l0811.asm ssa nw goblin module +; Generated 04.26.2001 by mlevel +; Modified 04.26.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_DEFUSED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0811Section",ROMX +;--------------------------------------------------------------------- + +L0811_Contents:: + DW L0811_Load + DW L0811_Init + DW L0811_Check + DW L0811_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0811_Load: + DW ((L0811_LoadFinished - L0811_Load2)) ;size +L0811_Load2: + call ParseMap + ret + +L0811_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0811_Map: +INCBIN "Data/Levels/l0811_ssa_nw.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0811_Init: + DW ((L0811_InitFinished - L0811_Init2)) ;size +L0811_Init2: + ld a,BANK(l0012_defused_gtx) + ld [dialogBank],a + call SetPressBDialog + + ldio a,[mapState] + cp STATE_DEFUSED + jr nz,.afterRemoveBomb + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d042 + ld [hl+],a + ld [hl],a + ld hl,$d062 + ld [hl+],a + ld [hl],a + +.afterRemoveBomb + ret + +L0811_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0811_Check: + DW ((L0811_CheckFinished - L0811_Check2)) ;size +L0811_Check2: + call ((.checkAtBomb-L0811_Check2)+levelCheckRAM) + ret + +.checkAtBomb + ldio a,[mapState] + cp STATE_DEFUSED + ret z + + ld hl,((.checkHeroAtBomb-L0811_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtBomb + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atBomb + + xor a + ret + +.atBomb + ld a,STATE_DEFUSED + ldio [mapState],a + + call UpdateState + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d042 + ld [hl+],a + ld [hl],a + ld hl,$d062 + ld [hl+],a + ld [hl],a + + ;check all defused + ld d,0 + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$b8] + cp 2 + jr nz,.check2 + inc d +.check2 + ld a,[levelState+$b9] + cp 2 + jr nz,.check3 + inc d +.check3 + ld a,[levelState+$ba] + cp 2 + jr nz,.check4 + inc d +.check4 + ld a,[levelState+$bb] + cp 2 + jr nz,.checkTotal + inc d +.checkTotal + ;if 3 bombs were defused before this one then that's all + ld a,d + cp 3 + jr nz,.bombsRemain + + ld hl,l0012_alldefused_gtx + jr .dialog + +.bombsRemain + ld hl,l0012_defused_gtx + +.dialog + call MakeIdle + ld de,((.afterDialog-L0811_Check2)+levelCheckRAM) + call SetDialogSkip + + ld d,h + ld e,l + + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ret + + +L0811_CheckFinished: +PRINTT "0811 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0811_LoadFinished - L0811_Load2) +PRINTT " / " +PRINTV (L0811_InitFinished - L0811_Init2) +PRINTT " / " +PRINTV (L0811_CheckFinished - L0811_Check2) +PRINTT "\n" + diff --git a/Source/l0812.asm b/Source/l0812.asm new file mode 100644 index 0000000..f9afd4d --- /dev/null +++ b/Source/l0812.asm @@ -0,0 +1,75 @@ +; l0812.asm demo warp zone +; Generated 12.01.2000 by mlevel +; Modified 12.01.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +FIREINDEX EQU 88 +VAR_FIRE EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0812Section",ROMX +;--------------------------------------------------------------------- + +L0812_Contents:: + DW L0812_Load + DW L0812_Init + DW L0812_Check + DW L0812_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0812_Load: + DW ((L0812_LoadFinished - L0812_Load2)) ;size +L0812_Load2: + call ParseMap + ret + +L0812_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0812_Map: +INCBIN "Data/Levels/l0812_warp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0812_Init: + DW ((L0812_InitFinished - L0812_Init2)) ;size +L0812_Init2: + ld a,[bgTileMap + FIREINDEX] + ld [levelVars + VAR_FIRE],a + ret + +L0812_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0812_Check: + DW ((L0812_CheckFinished - L0812_Check2)) ;size +L0812_Check2: + call ((.animateFire-L0812_Check2)+levelCheckRAM) + ret + +.animateFire + ldio a,[updateTimer] + rrca + rrca + and %11 + ld hl,levelVars + VAR_FIRE + add [hl] + ld [bgTileMap + FIREINDEX],a + ret + +L0812_CheckFinished: +PRINTT "0812 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0812_LoadFinished - L0812_Load2) +PRINTT " / " +PRINTV (L0812_InitFinished - L0812_Init2) +PRINTT " / " +PRINTV (L0812_CheckFinished - L0812_Check2) +PRINTT "\n" + diff --git a/Source/l0900.asm b/Source/l0900.asm new file mode 100644 index 0000000..4d137ff --- /dev/null +++ b/Source/l0900.asm @@ -0,0 +1,71 @@ +; l0900.asm Crouton Guard Post +; Generated 01.03.1980 by mlevel +; Modified 01.03.1980 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0900Section",ROMX +;--------------------------------------------------------------------- + +L0900_Contents:: + DW L0900_Load + DW L0900_Init + DW L0900_Check + DW L0900_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0900_Load: + DW ((L0900_LoadFinished - L0900_Load2)) ;size +L0900_Load2: + call ParseMap + ret + +L0900_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0900_Map: +INCBIN "Data/Levels/l0900_guardpost.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0900_Init: + DW ((L0900_InitFinished - L0900_Init2)) ;size +L0900_Init2: + call UseAlternatePalette + ld a,ENV_SNOW + call SetEnvEffect + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld bc,ITEM_CODE0900 + call RemoveClearanceIfTaken + ret + +L0900_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0900_Check: + DW ((L0900_CheckFinished - L0900_Check2)) ;size +L0900_Check2: + ret + +L0900_CheckFinished: +PRINTT "0900 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0900_LoadFinished - L0900_Load2) +PRINTT " / " +PRINTV (L0900_InitFinished - L0900_Init2) +PRINTT " / " +PRINTV (L0900_CheckFinished - L0900_Check2) +PRINTT "\n" + diff --git a/Source/l0901.asm b/Source/l0901.asm new file mode 100644 index 0000000..7fb217f --- /dev/null +++ b/Source/l0901.asm @@ -0,0 +1,95 @@ +; l0901.asm +; Generated 01.03.1980 by mlevel +; Modified 01.03.1980 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +HFENCE_INDEX EQU 35 +VFENCE_INDEX EQU 39 +VAR_HFENCE EQU 0 +VAR_VFENCE EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level0901Section",ROMX +;--------------------------------------------------------------------- + +L0901_Contents:: + DW L0901_Load + DW L0901_Init + DW L0901_Check + DW L0901_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0901_Load: + DW ((L0901_LoadFinished - L0901_Load2)) ;size +L0901_Load2: + call ParseMap + ret + +L0901_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0901_Map: +INCBIN "Data/Levels/l0901_slavecamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0901_Init: + DW ((L0901_InitFinished - L0901_Init2)) ;size +L0901_Init2: + ld a,[bgTileMap+HFENCE_INDEX] + ld [levelVars + VAR_HFENCE],a + ld a,[bgTileMap+VFENCE_INDEX] + ld [levelVars + VAR_VFENCE],a + ret + +L0901_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0901_Check: + DW ((L0901_CheckFinished - L0901_Check2)) ;size +L0901_Check2: + call ((.animateFence-L0901_Check2)+levelCheckRAM) + ret + +.animateFence + ldio a,[updateTimer] + rrca + and 3 + ld b,a + ld hl,bgTileMap+HFENCE_INDEX + ld a,[levelVars+VAR_HFENCE] + ld d,a + call ((.animateFourFrames-L0901_Check2)+levelCheckRAM) + ld a,[levelVars+VAR_VFENCE] + ld d,a + jp ((.animateFourFrames-L0901_Check2)+levelCheckRAM) + +.animateFourFrames + ld c,4 + +.animateFourFrames_loop + ld a,b + add c + and 3 + add d + ld [hl+],a + dec c + jr nz,.animateFourFrames_loop + ret + +L0901_CheckFinished: +PRINTT "0901 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0901_LoadFinished - L0901_Load2) +PRINTT " / " +PRINTV (L0901_InitFinished - L0901_Init2) +PRINTT " / " +PRINTV (L0901_CheckFinished - L0901_Check2) +PRINTT "\n" + diff --git a/Source/l0902.asm b/Source/l0902.asm new file mode 100644 index 0000000..90fa2a9 --- /dev/null +++ b/Source/l0902.asm @@ -0,0 +1,99 @@ +; l0902.asm Ice Plain Landing +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 70 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0902Section",ROMX +;--------------------------------------------------------------------- + +L0902_Contents:: + DW L0902_Load + DW L0902_Init + DW L0902_Check + DW L0902_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0902_Load: + DW ((L0902_LoadFinished - L0902_Load2)) ;size +L0902_Load2: + call ParseMap + ret + +L0902_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0902_Map: +INCBIN "Data/Levels/l0902_iceplainland.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0902_Init: + DW ((L0902_InitFinished - L0902_Init2)) ;size +L0902_Init2: + call UseAlternatePalette + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + ld a,ENV_SNOW + call SetEnvEffect + ld a,BANK(frosty_gbm) + ld hl,frosty_gbm + call InitMusic + ret + +L0902_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0902_Check: + DW ((L0902_CheckFinished - L0902_Check2)) ;size +L0902_Check2: + call ((.animateLandingLights-L0902_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0902_Check2)+levelCheckRAM) + call ((.animateLight-L0902_Check2)+levelCheckRAM) + call ((.animateLight-L0902_Check2)+levelCheckRAM) + call ((.animateLight-L0902_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0902_CheckFinished: +PRINTT "0902 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0902_LoadFinished - L0902_Load2) +PRINTT " / " +PRINTV (L0902_InitFinished - L0902_Init2) +PRINTT " / " +PRINTV (L0902_CheckFinished - L0902_Check2) +PRINTT "\n" + diff --git a/Source/l0903.asm b/Source/l0903.asm new file mode 100644 index 0000000..0b3fed7 --- /dev/null +++ b/Source/l0903.asm @@ -0,0 +1,59 @@ +; l0903.asm +; Generated 01.03.1980 by mlevel +; Modified 01.03.1980 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0903Section",ROMX +;--------------------------------------------------------------------- + +L0903_Contents:: + DW L0903_Load + DW L0903_Init + DW L0903_Check + DW L0903_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0903_Load: + DW ((L0903_LoadFinished - L0903_Load2)) ;size +L0903_Load2: + call ParseMap + ret + +L0903_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0903_Map: +INCBIN "Data/Levels/l0903_cornville.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0903_Init: + DW ((L0903_InitFinished - L0903_Init2)) ;size +L0903_Init2: + ret + +L0903_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0903_Check: + DW ((L0903_CheckFinished - L0903_Check2)) ;size +L0903_Check2: + ret + +L0903_CheckFinished: +PRINTT "0903 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0903_LoadFinished - L0903_Load2) +PRINTT " / " +PRINTV (L0903_InitFinished - L0903_Init2) +PRINTT " / " +PRINTV (L0903_CheckFinished - L0903_Check2) +PRINTT "\n" + diff --git a/Source/l0904.asm b/Source/l0904.asm new file mode 100644 index 0000000..23e0a58 --- /dev/null +++ b/Source/l0904.asm @@ -0,0 +1,59 @@ +; l0904.asm +; Generated 09.18.2000 by mlevel +; Modified 09.18.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0904Section",ROMX +;--------------------------------------------------------------------- + +L0904_Contents:: + DW L0904_Load + DW L0904_Init + DW L0904_Check + DW L0904_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0904_Load: + DW ((L0904_LoadFinished - L0904_Load2)) ;size +L0904_Load2: + call ParseMap + ret + +L0904_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0904_Map: +INCBIN "Data/Levels/l0904_canyon.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0904_Init: + DW ((L0904_InitFinished - L0904_Init2)) ;size +L0904_Init2: + ret + +L0904_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0904_Check: + DW ((L0904_CheckFinished - L0904_Check2)) ;size +L0904_Check2: + ret + +L0904_CheckFinished: +PRINTT "0904 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0904_LoadFinished - L0904_Load2) +PRINTT " / " +PRINTV (L0904_InitFinished - L0904_Init2) +PRINTT " / " +PRINTV (L0904_CheckFinished - L0904_Check2) +PRINTT "\n" + diff --git a/Source/l0905.asm b/Source/l0905.asm new file mode 100644 index 0000000..d5306f4 --- /dev/null +++ b/Source/l0905.asm @@ -0,0 +1,93 @@ +; l0905.asm monkey landing +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 41 +VAR_LIGHT EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level0905Section",ROMX +;--------------------------------------------------------------------- + +L0905_Contents:: + DW L0905_Load + DW L0905_Init + DW L0905_Check + DW L0905_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0905_Load: + DW ((L0905_LoadFinished - L0905_Load2)) ;size +L0905_Load2: + call ParseMap + ret + +L0905_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0905_Map: +INCBIN "Data/Levels/l0905_junglelanding.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0905_Init: + DW ((L0905_InitFinished - L0905_Init2)) ;size +L0905_Init2: + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + ret + +L0905_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0905_Check: + DW ((L0905_CheckFinished - L0905_Check2)) ;size +L0905_Check2: + call ((.animateLandingLights-L0905_Check2)+levelCheckRAM) + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L0905_Check2)+levelCheckRAM) + call ((.animateLight-L0905_Check2)+levelCheckRAM) + call ((.animateLight-L0905_Check2)+levelCheckRAM) + call ((.animateLight-L0905_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L0905_CheckFinished: +PRINTT "0905 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0905_LoadFinished - L0905_Load2) +PRINTT " / " +PRINTV (L0905_InitFinished - L0905_Init2) +PRINTT " / " +PRINTV (L0905_CheckFinished - L0905_Check2) +PRINTT "\n" + diff --git a/Source/l0906.asm b/Source/l0906.asm new file mode 100644 index 0000000..cb85056 --- /dev/null +++ b/Source/l0906.asm @@ -0,0 +1,62 @@ +; l0906.asm +; Generated 10.29.2000 by mlevel +; Modified 10.29.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0906Section",ROMX +;--------------------------------------------------------------------- + +L0906_Contents:: + DW L0906_Load + DW L0906_Init + DW L0906_Check + DW L0906_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0906_Load: + DW ((L0906_LoadFinished - L0906_Load2)) ;size +L0906_Load2: + call ParseMap + ret + +L0906_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0906_Map: +INCBIN "Data/Levels/l0906_stone_wisp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0906_Init: + DW ((L0906_InitFinished - L0906_Init2)) ;size +L0906_Init2: + ld a,BANK(mysterious_gbm) + ld hl,mysterious_gbm + call InitMusic + ret + +L0906_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0906_Check: + DW ((L0906_CheckFinished - L0906_Check2)) ;size +L0906_Check2: + ret + +L0906_CheckFinished: +PRINTT "0906 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0906_LoadFinished - L0906_Load2) +PRINTT " / " +PRINTV (L0906_InitFinished - L0906_Init2) +PRINTT " / " +PRINTV (L0906_CheckFinished - L0906_Check2) +PRINTT "\n" + diff --git a/Source/l0907.asm b/Source/l0907.asm new file mode 100644 index 0000000..3c4bd00 --- /dev/null +++ b/Source/l0907.asm @@ -0,0 +1,62 @@ +; l0907.asm bullseye village +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0907Section",ROMX +;--------------------------------------------------------------------- + +L0907_Contents:: + DW L0907_Load + DW L0907_Init + DW L0907_Check + DW L0907_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0907_Load: + DW ((L0907_LoadFinished - L0907_Load2)) ;size +L0907_Load2: + call ParseMap + ret + +L0907_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0907_Map: +INCBIN "Data/Levels/l0907_bullseye.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0907_Init: + DW ((L0907_InitFinished - L0907_Init2)) ;size +L0907_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L0907_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0907_Check: + DW ((L0907_CheckFinished - L0907_Check2)) ;size +L0907_Check2: + ret + +L0907_CheckFinished: +PRINTT "0907 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0907_LoadFinished - L0907_Load2) +PRINTT " / " +PRINTV (L0907_InitFinished - L0907_Init2) +PRINTT " / " +PRINTV (L0907_CheckFinished - L0907_Check2) +PRINTT "\n" + diff --git a/Source/l0908.asm b/Source/l0908.asm new file mode 100644 index 0000000..bc5603d --- /dev/null +++ b/Source/l0908.asm @@ -0,0 +1,62 @@ +; l0908.asm +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0908Section",ROMX +;--------------------------------------------------------------------- + +L0908_Contents:: + DW L0908_Load + DW L0908_Init + DW L0908_Check + DW L0908_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0908_Load: + DW ((L0908_LoadFinished - L0908_Load2)) ;size +L0908_Load2: + call ParseMap + ret + +L0908_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0908_Map: +INCBIN "Data/Levels/l0908_warzone.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0908_Init: + DW ((L0908_InitFinished - L0908_Init2)) ;size +L0908_Init2: + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + ret + +L0908_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0908_Check: + DW ((L0908_CheckFinished - L0908_Check2)) ;size +L0908_Check2: + ret + +L0908_CheckFinished: +PRINTT "0908 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0908_LoadFinished - L0908_Load2) +PRINTT " / " +PRINTV (L0908_InitFinished - L0908_Init2) +PRINTT " / " +PRINTV (L0908_CheckFinished - L0908_Check2) +PRINTT "\n" + diff --git a/Source/l0909.asm b/Source/l0909.asm new file mode 100644 index 0000000..e0796c1 --- /dev/null +++ b/Source/l0909.asm @@ -0,0 +1,59 @@ +; l0909.asm +; Generated 11.01.2000 by mlevel +; Modified 11.01.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level0909Section",ROMX +;--------------------------------------------------------------------- + +L0909_Contents:: + DW L0909_Load + DW L0909_Init + DW L0909_Check + DW L0909_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0909_Load: + DW ((L0909_LoadFinished - L0909_Load2)) ;size +L0909_Load2: + call ParseMap + ret + +L0909_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0909_Map: +INCBIN "Data/Levels/l0909_warzone.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0909_Init: + DW ((L0909_InitFinished - L0909_Init2)) ;size +L0909_Init2: + ret + +L0909_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0909_Check: + DW ((L0909_CheckFinished - L0909_Check2)) ;size +L0909_Check2: + ret + +L0909_CheckFinished: +PRINTT "0909 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0909_LoadFinished - L0909_Load2) +PRINTT " / " +PRINTV (L0909_InitFinished - L0909_Init2) +PRINTT " / " +PRINTV (L0909_CheckFinished - L0909_Check2) +PRINTT "\n" + diff --git a/Source/l0910.asm b/Source/l0910.asm new file mode 100644 index 0000000..8e4182a --- /dev/null +++ b/Source/l0910.asm @@ -0,0 +1,78 @@ +; l0910.asm +; Generated 11.05.2000 by mlevel +; Modified 11.05.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level0910Section",ROMX +;--------------------------------------------------------------------- + +L0910_Contents:: + DW L0910_Load + DW L0910_Init + DW L0910_Check + DW L0910_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0910_Load: + DW ((L0910_LoadFinished - L0910_Load2)) ;size +L0910_Load2: + call ParseMap + ret + +L0910_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0910_Map: +INCBIN "Data/Levels/l0910_warzone.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0910_Init: + DW ((L0910_InitFinished - L0910_Init2)) ;size +L0910_Init2: + ;make gun turrets friendly + ld bc,classTurret + call FindClassIndex + ld c,a + call GetFirst + + ld b,5 +.setNext + call ((.setGroup-L0910_Init2)+levelCheckRAM) + dec b + jr nz,.setNext + + ret + +.setGroup + ld a,GROUP_HERO + call SetGroup + call GetNextObject + ret + +L0910_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0910_Check: + DW ((L0910_CheckFinished - L0910_Check2)) ;size +L0910_Check2: + ret + +L0910_CheckFinished: +PRINTT "0910 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0910_LoadFinished - L0910_Load2) +PRINTT " / " +PRINTV (L0910_InitFinished - L0910_Init2) +PRINTT " / " +PRINTV (L0910_CheckFinished - L0910_Check2) +PRINTT "\n" + diff --git a/Source/l0911.asm b/Source/l0911.asm new file mode 100644 index 0000000..7a102f7 --- /dev/null +++ b/Source/l0911.asm @@ -0,0 +1,172 @@ +; l0911.asm apocalypse NE goblin module +; Generated 04.26.2001 by mlevel +; Modified 04.26.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_DEFUSED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0911Section",ROMX +;--------------------------------------------------------------------- + +L0911_Contents:: + DW L0911_Load + DW L0911_Init + DW L0911_Check + DW L0911_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0911_Load: + DW ((L0911_LoadFinished - L0911_Load2)) ;size +L0911_Load2: + call ParseMap + ret + +L0911_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0911_Map: +INCBIN "Data/Levels/l0911_ssa_ne.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0911_Init: + DW ((L0911_InitFinished - L0911_Init2)) ;size +L0911_Init2: + ld a,BANK(l0012_defused_gtx) + ld [dialogBank],a + call SetPressBDialog + + ldio a,[mapState] + cp STATE_DEFUSED + jr nz,.afterRemoveBomb + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d091 + ld [hl+],a + ld [hl],a + ld hl,$d0b1 + ld [hl+],a + ld [hl],a +.afterRemoveBomb + ret + +L0911_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0911_Check: + DW ((L0911_CheckFinished - L0911_Check2)) ;size +L0911_Check2: + call ((.checkAtBomb-L0911_Check2)+levelCheckRAM) + ret + +.checkAtBomb + ldio a,[mapState] + cp STATE_DEFUSED + ret z + + ld hl,((.checkHeroAtBomb-L0911_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtBomb + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atBomb + + xor a + ret + +.atBomb + ld a,STATE_DEFUSED + ldio [mapState],a + + call UpdateState + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d091 + ld [hl+],a + ld [hl],a + ld hl,$d0b1 + ld [hl+],a + ld [hl],a + + ;check all defused + ld d,0 + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$b8] + cp 2 + jr nz,.check2 + inc d +.check2 + ld a,[levelState+$b9] + cp 2 + jr nz,.check3 + inc d +.check3 + ld a,[levelState+$ba] + cp 2 + jr nz,.check4 + inc d +.check4 + ld a,[levelState+$bb] + cp 2 + jr nz,.checkTotal + inc d +.checkTotal + ;if 3 bombs were defused before this one then that's all + ld a,d + cp 3 + jr nz,.bombsRemain + + ld hl,l0012_alldefused_gtx + jr .dialog + +.bombsRemain + ld hl,l0012_defused_gtx + +.dialog + call MakeIdle + ld de,((.afterDialog-L0911_Check2)+levelCheckRAM) + call SetDialogSkip + + ld d,h + ld e,l + + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ret + +L0911_CheckFinished: +PRINTT "0911 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0911_LoadFinished - L0911_Load2) +PRINTT " / " +PRINTV (L0911_InitFinished - L0911_Init2) +PRINTT " / " +PRINTV (L0911_CheckFinished - L0911_Check2) +PRINTT "\n" + diff --git a/Source/l0912.asm b/Source/l0912.asm new file mode 100644 index 0000000..a5d020f --- /dev/null +++ b/Source/l0912.asm @@ -0,0 +1,371 @@ +; l0912.asm monkey homeworld +; Generated 04.09.2001 by mlevel +; Modified 04.09.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +CROUTON_INDEX EQU 95 +ORANGE_INDEX EQU 98 + +VAR_SAWSIGN EQU 0 +VAR_TALKED EQU 1 +VAR_TALKEDTELEPORT EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level0912Section",ROMX +;--------------------------------------------------------------------- +dialog: +l0912_sign_gtx: + INCBIN "Data/Dialog/talk/l0912_sign.gtx" + +l0912_welcome_gtx: + INCBIN "Data/Dialog/talk/l0912_welcome.gtx" + +l0912_hero_revolt_gtx: + INCBIN "Data/Dialog/talk/l0912_hero_revolt.gtx" + +l0912_justit_gtx: + INCBIN "Data/Dialog/talk/l0912_justit.gtx" + +l0912_hero_losing_gtx: + INCBIN "Data/Dialog/talk/l0912_hero_losing.gtx" + +l0912_killpatsy_gtx: + INCBIN "Data/Dialog/talk/l0912_killpatsy.gtx" + +l0912_hero_brokenteleport_gtx: + INCBIN "Data/Dialog/talk/l0912_hero_brokenteleport.gtx" + +l0912_hero_startteleport_nopassword_gtx: + INCBIN "Data/Dialog/talk/l0912_hero_startteleport_nopassword.gtx" + +l0912_needpassword_gtx: + INCBIN "Data/Dialog/talk/l0912_needpassword.gtx" + +l0912_hero_startteleport_password_gtx: + INCBIN "Data/Dialog/talk/l0912_hero_startteleport_password.gtx" + +l0912_ba_givepassword_gtx: + INCBIN "Data/Dialog/talk/l0912_ba_givepassword.gtx" + +L0912_Contents:: + DW L0912_Load + DW L0912_Init + DW L0912_Check + DW L0912_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L0912_Load: + DW ((L0912_LoadFinished - L0912_Load2)) ;size +L0912_Load2: + call ParseMap + ret + +L0912_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L0912_Map: +INCBIN "Data/Levels/l0912_monkeyworld.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L0912_Init: + DW ((L0912_InitFinished - L0912_Init2)) ;size +L0912_Init2: + ld hl,$0912 + call SetJoinMap + call SetRespawnMap + + STDSETUPDIALOG + + ld a,BANK(jungle_gbm) + ld hl,jungle_gbm + call InitMusic + + xor a + ld [levelVars+VAR_SAWSIGN],a + ld [levelVars+VAR_TALKED],a + ld [levelVars+VAR_TALKEDTELEPORT],a + + ld bc,classGeneric + ld de,classTalker + call ChangeClass + + ld a,ORANGE_INDEX + ld [dialogBalloonClassIndex],a + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$cb] ;shot orange guy? + cp 2 + jr nz,.done + + ;revolt averted + ;monkeys & croutons friends + ld b,GROUP_MONSTERD + ld c,GROUP_MONSTERA + ld a,1 + call SetFOF + + ;monkeys & heroes friends + ld c,GROUP_HERO + ld a,1 + call SetFOF + + ld bc,classMonkey + ld de,classGeneric + call ChangeClass + + ;orange guy doesn't speak + ld a,1 + call DisableDialogBalloons + +.done + ret + +L0912_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L0912_Check: + DW ((L0912_CheckFinished - L0912_Check2)) ;size +L0912_Check2: + call ((.checkSign-L0912_Check2)+levelCheckRAM) + call ((.checkDialog-L0912_Check2)+levelCheckRAM) + call ((.checkTeleport-L0912_Check2)+levelCheckRAM) + ret + +.checkTeleport + ld a,[levelVars+VAR_TALKEDTELEPORT] + or a + ret nz + + ld hl,((.checkHeroAtTeleport-L0912_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtTeleport + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atTeleport + + xor a + ret + +.atTeleport + ld a,1 + ld [levelVars+VAR_TALKEDTELEPORT],a + call MakeIdle + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$cb] ;shot orange guy? + cp 2 + jp nz,((.brokenTeleport-L0912_Check2)+levelCheckRAM) + + ;fixed teleport. Separate for BA + ld a,HERO_BA_FLAG + call ClassIndexIsHeroType + jr nz,.baTeleport + + ;has password? + ld a,[levelState+$ca] ;read book in monkey library? + cp 2 + jr z,.hasPassword + + ;push bc + ;ld bc,ITEM_MONKEYPASSWD + ;call HasInventoryItem + ;pop bc + ;jr nz,.hasPassword + + ;no password + ld de,((.afterNoPasswordDialog-L0912_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l0912_hero_startteleport_nopassword_gtx + call ShowDialogAtBottom + call ClearDialog + + push bc + ld c,CROUTON_INDEX + ld de,l0912_needpassword_gtx + call ShowDialogAtTop + pop bc + +.afterNoPasswordDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ret + +.hasPassword + ld de,((.afterHasPasswordDialog-L0912_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l0912_hero_startteleport_password_gtx + call ShowDialogAtBottom + +.afterHasPasswordDialog + jr .activateTeleport + +.baTeleport + ld de,((.afterBATeleportDialog-L0912_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l0912_hero_startteleport_nopassword_gtx + call ShowDialogAtBottom + + push bc + ld c,CROUTON_INDEX + ld de,l0912_needpassword_gtx + call ShowDialogAtBottom + pop bc + + call SetSpeakerFromHeroIndex + ld de,l0912_ba_givepassword_gtx + call ShowDialogAtBottom +.afterBATeleportDialog + +.activateTeleport + call ClearDialog + call MakeNonIdle + + ;ld a,15 + ;call SetupFadeFromWhite + + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$1212 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + + ld a,1 + ld [timeToChangeLevel],a + + ld a,1 + ret + +.brokenTeleport + ld de,((.afterTeleportDialog-L0912_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l0912_hero_brokenteleport_gtx + call ShowDialogAtBottom + +.afterTeleportDialog + call ClearDialog + call MakeNonIdle + + ld a,1 + ret + +.checkSign + ld a,[levelVars+VAR_SAWSIGN] + or a + ret nz + + ld hl,((.checkHeroAtSign-L0912_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtSign + ld c,a + call GetFirst + call GetCurZone + cp 3 + jr z,.atSign + + xor a + ret + +.atSign + ld a,1 + ld [levelVars+VAR_SAWSIGN],a + call MakeIdle + + ld de,((.afterSignDialog-L0912_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l0912_sign_gtx + call ShowDialogAtBottom + +.afterSignDialog + call ClearDialog + call MakeNonIdle + + ld a,1 + ret + +.checkDialog + ld hl,levelVars+VAR_TALKED + ld a,[hl] + or a + ret nz + +.dialogOkay + ld a,[dialogNPC_speakerIndex] + or a + ret z + + ld [hl],1 ;talked + call MakeIdle + + ld de,((.afterDialog-L0912_Check2)+levelCheckRAM) + call SetDialogSkip + + ld de,l0912_welcome_gtx + call ShowDialogNPC + + ld de,l0912_hero_revolt_gtx + call ShowDialogHero + + ld de,l0912_justit_gtx + call ShowDialogNPC + + ld de,l0912_hero_losing_gtx + call ShowDialogHero + + ld de,l0912_killpatsy_gtx + call ShowDialogNPC + +.afterDialog + call ClearDialog + + call MakeNonIdle + + xor a + ld [dialogNPC_speakerIndex],a + ret + + +L0912_CheckFinished: +PRINTT "0912 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L0912_LoadFinished - L0912_Load2) +PRINTT " / " +PRINTV (L0912_InitFinished - L0912_Init2) +PRINTT " / " +PRINTV (L0912_CheckFinished - L0912_Check2) +PRINTT "\n" + diff --git a/Source/l1000.asm b/Source/l1000.asm new file mode 100644 index 0000000..05464c0 --- /dev/null +++ b/Source/l1000.asm @@ -0,0 +1,447 @@ +; l1000.asm crouton base camp landing +; Generated 01.02.1998 by mlevel +; Modified 01.02.1998 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 79 +DICEINDEX EQU 87 +HFENCE_INDEX EQU 97 +VFENCE_INDEX EQU 101 +GYRO_INDEX EQU 109 + +VAR_HFENCE EQU 0 +VAR_VFENCE EQU 1 +VAR_LIGHT EQU 2 +VAR_DICELIGHT EQU 3 +VAR_EXPLODEDGATE EQU 4 ;used in class.asm +VAR_TALKED EQU 5 +VAR_SPEAKER EQU 6 + +STATE_GATECLOSED EQU 1 +STATE_WAITGYRO EQU 2 +STATE_NORMAL EQU 3 + + +;--------------------------------------------------------------------- +SECTION "Level1000Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l1000_needbomb_gtx: + INCBIN "Data/Dialog/talk/l1000_needbomb.gtx" + +l1000_freeze_gtx: + INCBIN "Data/Dialog/talk/l1000_freeze.gtx" + +l1000_toolate_gtx: + INCBIN "Data/Dialog/talk/l1000_toolate.gtx" + +l1000_follow_gtx: + INCBIN "Data/Dialog/talk/l1000_follow.gtx" + +L1000_Contents:: + DW L1000_Load + DW L1000_Init + DW L1000_Check + DW L1000_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1000_Load: + DW ((L1000_LoadFinished - L1000_Load2)) ;size +L1000_Load2: + call ParseMap + ret + +L1000_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1000_Map: +INCBIN "Data/Levels/l1000_basecamp.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1000_Init: + DW ((L1000_InitFinished - L1000_Init2)) ;size +L1000_Init2: + ld a,[bgTileMap+HFENCE_INDEX] + ld [levelVars + VAR_HFENCE],a + ld a,[bgTileMap+VFENCE_INDEX] + ld [levelVars + VAR_VFENCE],a + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + ld a,[bgTileMap+DICEINDEX] ;tile index of first light + ld [levelVars+VAR_DICELIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + + STDSETUPDIALOG + + xor a + ld [levelVars+VAR_TALKED],a + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + xor a + ld [levelVars+VAR_EXPLODEDGATE],a + + call State0To1 + + ldio a,[mapState] + cp STATE_WAITGYRO + call nc,((.removeGate-L1000_Init2)+levelCheckRAM) + ldio a,[mapState] + cp STATE_NORMAL + call z,((.removeGyro-L1000_Init2)+levelCheckRAM) + ret + +.removeGate + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d24e + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld hl,$d26e + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld hl,$d28e + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld [hl+],a + ret + +.removeGyro + ld a,MAPBANK + ldio [$ff70],a + xor a + ;remove space ship + ld hl,$d04f + ld [hl+],a + ld [hl+],a + ld hl,$d06f + ld [hl+],a + ld [hl+],a + + ;remove Gyro + ld bc,classGeneralGyro + call DeleteObjectsOfClass + ret + +L1000_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1000_Check: + DW ((L1000_CheckFinished - L1000_Check2)) ;size +L1000_Check2: + call ((.animateFence-L1000_Check2)+levelCheckRAM) + call ((.animateLandingLights-L1000_Check2)+levelCheckRAM) + call ((.animateDiceLights-L1000_Check2)+levelCheckRAM) + call ((.checkDialog-L1000_Check2)+levelCheckRAM) + call ((.checkConfrontGyro-L1000_Check2)+levelCheckRAM) + + ldio a,[mapState] + cp STATE_GATECLOSED + jr nz,.done + + call ((.checkOpenGate-L1000_Check2)+levelCheckRAM) + +.done + ret + +.checkConfrontGyro + ldio a,[mapState] + cp STATE_WAITGYRO ;exploded gate? + ret nz + + ld hl,((.checkHeroConfront-L1000_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroConfront + ld c,a + ld [levelVars+VAR_SPEAKER],a + call GetFirst + call GetCurZone + cp 5 + jr z,.inConfrontZone + + xor a + ret + +.inConfrontZone + call MakeIdle + + ld de,((.afterConfrontDialog-L1000_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l1000_freeze_gtx + call ShowDialogAtBottom + + call ClearDialog + ld de,l1000_toolate_gtx + ld c,GYRO_INDEX + call ShowDialogAtTop + + call ClearDialog + ld a,15 + call Delay + + ld bc,classGeneralGyro + call DeleteObjectsOfClass + + ld a,15 + call Delay + + ld a,30 + ldio [jiggleDuration],a + + ld a,15 + call Delay + + ;clear ship + ld a,MAPBANK + ldio [$ff70],a + + xor a + ld hl,$d04f + ld [hl+],a + ld [hl+],a + ld hl,$d06f + ld [hl+],a + ld [hl+],a + + ld a,15 + call Delay + + ld a,[levelVars+VAR_SPEAKER] + ld c,a + ld de,l1000_follow_gtx + call ShowDialogAtBottom + +.afterConfrontDialog + ld bc,classGeneralGyro + call DeleteObjectsOfClass + + ;clear ship + ld a,MAPBANK + ldio [$ff70],a + + xor a + ld hl,$d04f + ld [hl+],a + ld [hl+],a + ld hl,$d06f + ld [hl+],a + ld [hl+],a + + call ClearDialogSkipForward + call MakeNonIdle + + ld hl,$1104 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ld a,STATE_NORMAL + ldio [mapState],a + + ld a,1 + ret + +.checkDialog + ld a,[levelVars+VAR_TALKED] + or a + ret nz + + ldio a,[mapState] + cp STATE_WAITGYRO ;exploded gate? + ret nc + + ld hl,((.checkHeroInZone-L1000_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroInZone + ld c,a + call GetFirst + call GetCurZone + cp 4 + jr z,.inZone + + xor a + ret + +.inZone + call MakeIdle + + ld de,((.afterDialog-L1000_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l1000_needbomb_gtx + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ld [levelVars+VAR_TALKED],a + + ld a,1 + ret + +.checkOpenGate + ld a,[levelVars+VAR_EXPLODEDGATE] + or a + ret z + + ld bc,$0403 + ld de,$1407 + ld hl,$d24e + call CreateBigExplosion + ld hl,bigExplosionSound + call PlaySound + + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d24e + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld hl,$d26e + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld hl,$d28e + ld [hl+],a + ld [hl+],a + ld [hl+],a + ld [hl+],a + + ld a,STATE_WAITGYRO + ldio [mapState],a + ret + +.animateFence + ldio a,[updateTimer] + rrca + and 3 + ld b,a + ld hl,bgTileMap+HFENCE_INDEX + ld a,[levelVars+VAR_HFENCE] + ld d,a + call ((.animateFourFrames-L1000_Check2)+levelCheckRAM) + ld a,[levelVars+VAR_VFENCE] + ld d,a + jp ((.animateFourFrames-L1000_Check2)+levelCheckRAM) + +.animateFourFrames + ld c,4 + +.animateFourFrames_loop + ld a,b + add c + and 3 + add d + ld [hl+],a + dec c + jr nz,.animateFourFrames_loop + ret + + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L1000_Check2)+levelCheckRAM) + call ((.animateLight-L1000_Check2)+levelCheckRAM) + call ((.animateLight-L1000_Check2)+levelCheckRAM) + call ((.animateLight-L1000_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +.animateDiceLights + ;animate dice lights + ld a,[levelVars+VAR_DICELIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+DICEINDEX + call ((.updateTwoLights - L1000_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L1000_Check2) + levelCheckRAM) + ret + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L1000_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + +L1000_CheckFinished: +PRINTT "1000 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1000_LoadFinished - L1000_Load2) +PRINTT " / " +PRINTV (L1000_InitFinished - L1000_Init2) +PRINTT " / " +PRINTV (L1000_CheckFinished - L1000_Check2) +PRINTT "\n" + diff --git a/Source/l1001.asm b/Source/l1001.asm new file mode 100644 index 0000000..9da5eb3 --- /dev/null +++ b/Source/l1001.asm @@ -0,0 +1,65 @@ +; l1001.asm +; Generated 11.13.2000 by mlevel +; Modified 11.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1001Section",ROMX +;--------------------------------------------------------------------- + +L1001_Contents:: + DW L1001_Load + DW L1001_Init + DW L1001_Check + DW L1001_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1001_Load: + DW ((L1001_LoadFinished - L1001_Load2)) ;size +L1001_Load2: + call ParseMap + ret + +L1001_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1001_Map: +INCBIN "Data/Levels/l1001_iceplain.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1001_Init: + DW ((L1001_InitFinished - L1001_Init2)) ;size +L1001_Init2: + call UseAlternatePalette + ld a,ENV_SNOW + call SetEnvEffect + ld a,BANK(frosty_gbm) + ld hl,frosty_gbm + call InitMusic + ret + +L1001_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1001_Check: + DW ((L1001_CheckFinished - L1001_Check2)) ;size +L1001_Check2: + ret + +L1001_CheckFinished: +PRINTT "1001 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1001_LoadFinished - L1001_Load2) +PRINTT " / " +PRINTV (L1001_InitFinished - L1001_Init2) +PRINTT " / " +PRINTV (L1001_CheckFinished - L1001_Check2) +PRINTT "\n" + diff --git a/Source/l1002.asm b/Source/l1002.asm new file mode 100644 index 0000000..4a3434e --- /dev/null +++ b/Source/l1002.asm @@ -0,0 +1,70 @@ +; l1002.asm +; Generated 01.02.1998 by mlevel +; Modified 01.02.1998 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level1002Section",ROMX +;--------------------------------------------------------------------- + +L1002_Contents:: + DW L1002_Load + DW L1002_Init + DW L1002_Check + DW L1002_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1002_Load: + DW ((L1002_LoadFinished - L1002_Load2)) ;size +L1002_Load2: + call ParseMap + ret + +L1002_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1002_Map: +INCBIN "Data/Levels/l1002_guardpost.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1002_Init: + DW ((L1002_InitFinished - L1002_Init2)) ;size +L1002_Init2: + call UseAlternatePalette + ld a,ENV_SNOW + call SetEnvEffect + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld bc,ITEM_CODE1002 + call RemoveClearanceIfTaken + ret + +L1002_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1002_Check: + DW ((L1002_CheckFinished - L1002_Check2)) ;size +L1002_Check2: + ret + +L1002_CheckFinished: +PRINTT "1002 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1002_LoadFinished - L1002_Load2) +PRINTT " / " +PRINTV (L1002_InitFinished - L1002_Init2) +PRINTT " / " +PRINTV (L1002_CheckFinished - L1002_Check2) +PRINTT "\n" + diff --git a/Source/l1003.asm b/Source/l1003.asm new file mode 100644 index 0000000..a5ac2ed --- /dev/null +++ b/Source/l1003.asm @@ -0,0 +1,108 @@ +; l1003.asm beach +; Generated 01.03.1980 by mlevel +; Modified 01.03.1980 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 42 +VAR_WATER EQU 0 +LIGHTINDEX EQU 64 +VAR_LIGHT EQU 1 + +;--------------------------------------------------------------------- +SECTION "Level1003Section",ROMX +;--------------------------------------------------------------------- + +L1003_Contents:: + DW L1003_Load + DW L1003_Init + DW L1003_Check + DW L1003_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1003_Load: + DW ((L1003_LoadFinished - L1003_Load2)) ;size +L1003_Load2: + call ParseMap + ret + +L1003_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1003_Map: +INCBIN "Data/Levels/l1003_beach.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1003_Init: + DW ((L1003_InitFinished - L1003_Init2)) ;size +L1003_Init2: + call UseAlternatePalette + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + LONGCALLNOARGS AddAppomattoxIfPresent + ret + +L1003_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1003_Check: + DW ((L1003_CheckFinished - L1003_Check2)) ;size +L1003_Check2: + call ((.animateWater-L1003_Check2)+levelCheckRAM) + call ((.animateLandingLights-L1003_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L1003_Check2)+levelCheckRAM) + call ((.animateLight-L1003_Check2)+levelCheckRAM) + call ((.animateLight-L1003_Check2)+levelCheckRAM) + call ((.animateLight-L1003_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + +L1003_CheckFinished: +PRINTT "1003 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1003_LoadFinished - L1003_Load2) +PRINTT " / " +PRINTV (L1003_InitFinished - L1003_Init2) +PRINTT " / " +PRINTV (L1003_CheckFinished - L1003_Check2) +PRINTT "\n" + diff --git a/Source/l1004.asm b/Source/l1004.asm new file mode 100644 index 0000000..a51641e --- /dev/null +++ b/Source/l1004.asm @@ -0,0 +1,59 @@ +; l1004.asm +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1004Section",ROMX +;--------------------------------------------------------------------- + +L1004_Contents:: + DW L1004_Load + DW L1004_Init + DW L1004_Check + DW L1004_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1004_Load: + DW ((L1004_LoadFinished - L1004_Load2)) ;size +L1004_Load2: + call ParseMap + ret + +L1004_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1004_Map: +INCBIN "Data/Levels/L1004_pumpkins.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1004_Init: + DW ((L1004_InitFinished - L1004_Init2)) ;size +L1004_Init2: + ret + +L1004_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1004_Check: + DW ((L1004_CheckFinished - L1004_Check2)) ;size +L1004_Check2: + ret + +L1004_CheckFinished: +PRINTT "1004 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1004_LoadFinished - L1004_Load2) +PRINTT " / " +PRINTV (L1004_InitFinished - L1004_Init2) +PRINTT " / " +PRINTV (L1004_CheckFinished - L1004_Check2) +PRINTT "\n" + diff --git a/Source/l1005.asm b/Source/l1005.asm new file mode 100644 index 0000000..840e2ed --- /dev/null +++ b/Source/l1005.asm @@ -0,0 +1,59 @@ +; l1005.asm +; Generated 09.06.2000 by mlevel +; Modified 09.06.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1005Section",ROMX +;--------------------------------------------------------------------- + +L1005_Contents:: + DW L1005_Load + DW L1005_Init + DW L1005_Check + DW L1005_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1005_Load: + DW ((L1005_LoadFinished - L1005_Load2)) ;size +L1005_Load2: + call ParseMap + ret + +L1005_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1005_Map: +INCBIN "Data/Levels/L1005_autumn.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1005_Init: + DW ((L1005_InitFinished - L1005_Init2)) ;size +L1005_Init2: + ret + +L1005_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1005_Check: + DW ((L1005_CheckFinished - L1005_Check2)) ;size +L1005_Check2: + ret + +L1005_CheckFinished: +PRINTT "1005 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1005_LoadFinished - L1005_Load2) +PRINTT " / " +PRINTV (L1005_InitFinished - L1005_Init2) +PRINTT " / " +PRINTV (L1005_CheckFinished - L1005_Check2) +PRINTT "\n" + diff --git a/Source/l1006.asm b/Source/l1006.asm new file mode 100644 index 0000000..397cf09 --- /dev/null +++ b/Source/l1006.asm @@ -0,0 +1,67 @@ +; l1006.asm crouton outpost +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level1006Section",ROMX +;--------------------------------------------------------------------- + +L1006_Contents:: + DW L1006_Load + DW L1006_Init + DW L1006_Check + DW L1006_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1006_Load: + DW ((L1006_LoadFinished - L1006_Load2)) ;size +L1006_Load2: + call ParseMap + ret + +L1006_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1006_Map: +INCBIN "Data/Levels/l1006_outpost.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1006_Init: + DW ((L1006_InitFinished - L1006_Init2)) ;size +L1006_Init2: + ld bc,ITEM_CODE1006 + call RemoveClearanceIfTaken + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L1006_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1006_Check: + DW ((L1006_CheckFinished - L1006_Check2)) ;size +L1006_Check2: + ret + +L1006_CheckFinished: +PRINTT "1006 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1006_LoadFinished - L1006_Load2) +PRINTT " / " +PRINTV (L1006_InitFinished - L1006_Init2) +PRINTT " / " +PRINTV (L1006_CheckFinished - L1006_Check2) +PRINTT "\n" + diff --git a/Source/l1007.asm b/Source/l1007.asm new file mode 100644 index 0000000..a38c5aa --- /dev/null +++ b/Source/l1007.asm @@ -0,0 +1,80 @@ +; l1007.asm liars heads +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level1007Section",ROMX +;--------------------------------------------------------------------- + +L1007_Contents:: + DW L1007_Load + DW L1007_Init + DW L1007_Check + DW L1007_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1007_Load: + DW ((L1007_LoadFinished - L1007_Load2)) ;size +L1007_Load2: + call ParseMap + ret + +L1007_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1007_Map: +INCBIN "Data/Levels/l1007_stoneheads.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1007_Init: + DW ((L1007_InitFinished - L1007_Init2)) ;size +L1007_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + ld a,ENV_RAIN + call SetEnvEffect + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + ret + +L1007_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1007_Check: + DW ((L1007_CheckFinished - L1007_Check2)) ;size +L1007_Check2: + call ((.animateWater-L1007_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L1007_CheckFinished: +PRINTT "1007 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1007_LoadFinished - L1007_Load2) +PRINTT " / " +PRINTV (L1007_InitFinished - L1007_Init2) +PRINTT " / " +PRINTV (L1007_CheckFinished - L1007_Check2) +PRINTT "\n" + diff --git a/Source/l1008.asm b/Source/l1008.asm new file mode 100644 index 0000000..c32cc78 --- /dev/null +++ b/Source/l1008.asm @@ -0,0 +1,78 @@ +; l1008.asm east graves +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +WATERINDEX EQU 1 +VAR_WATER EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level1008Section",ROMX +;--------------------------------------------------------------------- + +L1008_Contents:: + DW L1008_Load + DW L1008_Init + DW L1008_Check + DW L1008_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1008_Load: + DW ((L1008_LoadFinished - L1008_Load2)) ;size +L1008_Load2: + call ParseMap + ret + +L1008_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1008_Map: +INCBIN "Data/Levels/l1008_graves.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1008_Init: + DW ((L1008_InitFinished - L1008_Init2)) ;size +L1008_Init2: + ld a,[bgTileMap + WATERINDEX] + ld [levelVars + VAR_WATER],a + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + ret + +L1008_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1008_Check: + DW ((L1008_CheckFinished - L1008_Check2)) ;size +L1008_Check2: + call ((.animateWater-L1008_Check2)+levelCheckRAM) + ret + +.animateWater + ldio a,[updateTimer] + swap a + and %11 + ld hl,levelVars + VAR_WATER + add [hl] + ld [bgTileMap + WATERINDEX],a + ret + +L1008_CheckFinished: +PRINTT "1008 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1008_LoadFinished - L1008_Load2) +PRINTT " / " +PRINTV (L1008_InitFinished - L1008_Init2) +PRINTT " / " +PRINTV (L1008_CheckFinished - L1008_Check2) +PRINTT "\n" + diff --git a/Source/l1009.asm b/Source/l1009.asm new file mode 100644 index 0000000..2e7791b --- /dev/null +++ b/Source/l1009.asm @@ -0,0 +1,59 @@ +; l1009.asm +; Generated 10.30.2000 by mlevel +; Modified 10.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1009Section",ROMX +;--------------------------------------------------------------------- + +L1009_Contents:: + DW L1009_Load + DW L1009_Init + DW L1009_Check + DW L1009_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1009_Load: + DW ((L1009_LoadFinished - L1009_Load2)) ;size +L1009_Load2: + call ParseMap + ret + +L1009_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1009_Map: +INCBIN "Data/Levels/l1009_warzone.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1009_Init: + DW ((L1009_InitFinished - L1009_Init2)) ;size +L1009_Init2: + ret + +L1009_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1009_Check: + DW ((L1009_CheckFinished - L1009_Check2)) ;size +L1009_Check2: + ret + +L1009_CheckFinished: +PRINTT "1009 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1009_LoadFinished - L1009_Load2) +PRINTT " / " +PRINTV (L1009_InitFinished - L1009_Init2) +PRINTT " / " +PRINTV (L1009_CheckFinished - L1009_Check2) +PRINTT "\n" + diff --git a/Source/l1010.asm b/Source/l1010.asm new file mode 100644 index 0000000..3b7ba79 --- /dev/null +++ b/Source/l1010.asm @@ -0,0 +1,222 @@ +; l1010.asm king grenade +; Generated 11.08.2000 by mlevel +; Modified 11.08.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +DICEINDEX EQU 62 +KING_INDEX EQU 68 + +VAR_TALKED EQU 0 +VAR_DICELIGHT EQU 3 + +;--------------------------------------------------------------------- +SECTION "Level1010Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l1010_amking_gtx: + INCBIN "Data/Dialog/talk/l1010_amking.gtx" + +l1010_cannotleave_gtx: + INCBIN "Data/Dialog/talk/l1010_cannotleave.gtx" + +l1010_readytogo_gtx: + INCBIN "Data/Dialog/talk/l1010_readytogo.gtx" + +L1010_Contents:: + DW L1010_Load + DW L1010_Init + DW L1010_Check + DW L1010_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1010_Load: + DW ((L1010_LoadFinished - L1010_Load2)) ;size +L1010_Load2: + call ParseMap + ret + +L1010_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1010_Map: +INCBIN "Data/Levels/l1010_kinggrenade.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1010_Init: + DW ((L1010_InitFinished - L1010_Init2)) ;size +L1010_Init2: + ;make gun turret friendly + ld bc,classTurret + call FindClassIndex + ld c,a + call GetFirst + ld a,GROUP_HERO + call SetGroup + call GetNextObject + ld a,GROUP_HERO + call SetGroup + + ld a,[bgTileMap+DICEINDEX] ;tile index of first light + ld [levelVars+VAR_DICELIGHT],a + + STDSETUPDIALOG + + ld hl,$1100 + call SetJoinMap + call SetRespawnMap + + ;already have King Grenade? + xor a + ld [levelVars+VAR_TALKED],a + + ld a,[heroesAvailable] + and HERO_GRENADE_FLAG + jr z,.afterRemoveGrenade + + ld a,1 + ld [levelVars+VAR_TALKED],a + + ld bc,classGeneric + call DeleteObjectsOfClass + +.afterRemoveGrenade + ret + +L1010_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1010_Check: + DW ((L1010_CheckFinished - L1010_Check2)) ;size +L1010_Check2: + call ((.animateDiceLights-L1010_Check2)+levelCheckRAM) + call ((.checkDialog-L1010_Check2)+levelCheckRAM) + ret + +.checkDialog + ld a,[levelVars+VAR_TALKED] + or a + ret nz + + ld hl,((.checkHeroInZone-L1010_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroInZone + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.inZone + + xor a + ret + +.inZone + call MakeIdle + + ld de,((.afterDialog-L1010_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l1010_amking_gtx + ld c,KING_INDEX + call ShowDialogAtTop + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$cf] ;been to generators? + or a + jr nz,.blownUp + + ld de,l1010_cannotleave_gtx + call ShowDialogAtTop + jr .afterDialog + +.blownUp + ld de,l1010_readytogo_gtx + call ShowDialogAtTop + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ld [levelVars+VAR_TALKED],a + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$cf] ;been to generators? + or a + jr z,.done + + ld hl,heroesAvailable + ld a,[hl] + or HERO_GRENADE_FLAG + ld [hl],a + + xor a + call LinkTransmitMemoryLocation + + ld bc,classGeneric + call DeleteObjectsOfClass + +.done + ld a,1 + ret + +.animateDiceLights + ;animate dice lights + ld a,[levelVars+VAR_DICELIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+DICEINDEX + call ((.updateTwoLights - L1010_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L1010_Check2) + levelCheckRAM) + ret + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L1010_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + +L1010_CheckFinished: +PRINTT "1010 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1010_LoadFinished - L1010_Load2) +PRINTT " / " +PRINTV (L1010_InitFinished - L1010_Init2) +PRINTT " / " +PRINTV (L1010_CheckFinished - L1010_Check2) +PRINTT "\n" + diff --git a/Source/l1011.asm b/Source/l1011.asm new file mode 100644 index 0000000..acd6bde --- /dev/null +++ b/Source/l1011.asm @@ -0,0 +1,173 @@ +; l1011.asm +; Generated 04.26.2001 by mlevel +; Modified 04.26.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_DEFUSED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level1011Section",ROMX +;--------------------------------------------------------------------- + +L1011_Contents:: + DW L1011_Load + DW L1011_Init + DW L1011_Check + DW L1011_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1011_Load: + DW ((L1011_LoadFinished - L1011_Load2)) ;size +L1011_Load2: + call ParseMap + ret + +L1011_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1011_Map: +INCBIN "Data/Levels/l1011_ssa_sw.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1011_Init: + DW ((L1011_InitFinished - L1011_Init2)) ;size +L1011_Init2: + ld a,BANK(l0012_defused_gtx) + ld [dialogBank],a + call SetPressBDialog + + ldio a,[mapState] + cp STATE_DEFUSED + jr nz,.afterRemoveBomb + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d062 + ld [hl+],a + ld [hl],a + ld hl,$d082 + ld [hl+],a + ld [hl],a + +.afterRemoveBomb + ret + +L1011_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1011_Check: + DW ((L1011_CheckFinished - L1011_Check2)) ;size +L1011_Check2: + call ((.checkAtBomb-L1011_Check2)+levelCheckRAM) + ret + +.checkAtBomb + ldio a,[mapState] + cp STATE_DEFUSED + ret z + + ld hl,((.checkHeroAtBomb-L1011_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtBomb + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atBomb + + xor a + ret + +.atBomb + ld a,STATE_DEFUSED + ldio [mapState],a + + call UpdateState + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d062 + ld [hl+],a + ld [hl],a + ld hl,$d082 + ld [hl+],a + ld [hl],a + + ;check all defused + ld d,0 + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$b8] + cp 2 + jr nz,.check2 + inc d +.check2 + ld a,[levelState+$b9] + cp 2 + jr nz,.check3 + inc d +.check3 + ld a,[levelState+$ba] + cp 2 + jr nz,.check4 + inc d +.check4 + ld a,[levelState+$bb] + cp 2 + jr nz,.checkTotal + inc d +.checkTotal + ;if 3 bombs were defused before this one then that's all + ld a,d + cp 3 + jr nz,.bombsRemain + + ld hl,l0012_alldefused_gtx + jr .dialog + +.bombsRemain + ld hl,l0012_defused_gtx + +.dialog + call MakeIdle + ld de,((.afterDialog-L1011_Check2)+levelCheckRAM) + call SetDialogSkip + + ld d,h + ld e,l + + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ret + +L1011_CheckFinished: +PRINTT "1011 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1011_LoadFinished - L1011_Load2) +PRINTT " / " +PRINTV (L1011_InitFinished - L1011_Init2) +PRINTT " / " +PRINTV (L1011_CheckFinished - L1011_Check2) +PRINTT "\n" + diff --git a/Source/l1012.asm b/Source/l1012.asm new file mode 100644 index 0000000..1c66449 --- /dev/null +++ b/Source/l1012.asm @@ -0,0 +1,107 @@ +; l1012.asm library +; Generated 04.10.2001 by mlevel +; Modified 04.10.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_NORMAL EQU 1 +STATE_READBOOK EQU 2 + +;--------------------------------------------------------------------- +SECTION "Level1012Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l1012_hero_readbook_gtx: + INCBIN "Data/Dialog/talk/l1012_hero_readbook.gtx" + +L1012_Contents:: + DW L1012_Load + DW L1012_Init + DW L1012_Check + DW L1012_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1012_Load: + DW ((L1012_LoadFinished - L1012_Load2)) ;size +L1012_Load2: + call ParseMap + ret + +L1012_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1012_Map: +INCBIN "Data/Levels/l1012_library.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1012_Init: + DW ((L1012_InitFinished - L1012_Init2)) ;size +L1012_Init2: + STDSETUPDIALOG + ret + +L1012_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1012_Check: + DW ((L1012_CheckFinished - L1012_Check2)) ;size +L1012_Check2: + call ((.checkAtBook-L1012_Check2)+levelCheckRAM) + ret + +.checkAtBook + ldio a,[mapState] + cp STATE_READBOOK + ret z + + ld hl,((.checkHeroAtBook-L1012_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtBook + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atBook + + xor a + ret + +.atBook + call MakeIdle + ld de,((.afterDialog-L1012_Check2)+levelCheckRAM) + call SetDialogSkip + + call SetSpeakerFromHeroIndex + ld de,l1012_hero_readbook_gtx + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + ld a,STATE_READBOOK + ldio [mapState],a + + ld a,1 + ret + + +L1012_CheckFinished: +PRINTT "1012 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1012_LoadFinished - L1012_Load2) +PRINTT " / " +PRINTV (L1012_InitFinished - L1012_Init2) +PRINTT " / " +PRINTV (L1012_CheckFinished - L1012_Check2) +PRINTT "\n" + diff --git a/Source/l1100.asm b/Source/l1100.asm new file mode 100644 index 0000000..bea06e5 --- /dev/null +++ b/Source/l1100.asm @@ -0,0 +1,670 @@ +;level1100 character select +;Abe Pralle 4.3.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/gfx.inc" +INCLUDE "Source/start.inc" + +EXITAPPOMATTOX EQU $1300 +;EXITAPPOMATTOX EQU $0812 +;EXITAPPOMATTOX EQU $0107 + + +;--------------------------------------------------------------------- +SECTION "L1100Gfx1",ROMX +;--------------------------------------------------------------------- +select_grenade_sp: + INCBIN "../fgbpix/charselect/select_grenade.sp" + +select_grenade_name_bg: + INCBIN "../fgbpix/charselect/kgname.bg" + +;--------------------------------------------------------------------- +SECTION "L1100Section",ROMX +;--------------------------------------------------------------------- + +select_hero_bg: + INCBIN "../fgbpix/charselect/charselecthills.bg" + +select_ba_sp: + INCBIN "charselect/select_ba.sp" + +select_ba_name_bg: + INCBIN "../fgbpix/charselect/select_ba_name.bg" + +select_bs_sp: + INCBIN "charselect/select_bs.sp" + +select_bs_name_bg: + INCBIN "../fgbpix/charselect/select_bs_name.bg" + +select_haiku_sp: + INCBIN "charselect/select_haiku.sp" + +select_haiku_name_bg: + INCBIN "../fgbpix/charselect/select_haiku_name.bg" + +L1100_Contents:: + DW L1100_Load + DW L1100_Init + DW L1100_Check + DW L1100_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1100_Load: + DW ((L1100_LoadFinished - L1100_Load)-2) ;size +L1100_Load2: + ld hl,$1100 + call SetJoinMap + ld hl,EXITAPPOMATTOX + call SetRespawnMap + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + +;ld a,[heroesAvailable] +;or HERO_GRENADE_FLAG +;ld [heroesAvailable],a + xor a + ld [scrollSprites],a + + ld a,$44 + ldio [scrollSpeed],a + + ld a,BANK(select_hero_bg) + ld hl,select_hero_bg + call LoadCinemaBG + + xor a + ld [gamePalette+2],a + ld [gamePalette+3],a + + ;if my hero type is the same as both hero types (e.g. the other + ;hero's types) then pick an alternate hero (probably just + ;joined game) + LDHL_CURHERODATA HERODATA_TYPE + ld b,[hl] + ld a,[hero0_type] + cp b + jr nz,.myTypeOkay + ld a,[amLinkMaster] + bit 7,a + jr nz,.myTypeOkay ;no link + ld a,[hero1_type] + cp b + jr nz,.myTypeOkay + + ;change my type + cp 1 + jr z,.changeTypeTo2 + ld a,1 + jr .pickedANewType +.changeTypeTo2 + ld a,2 +.pickedANewType + ld [hl],a +.myTypeOkay + ;mark my hero as used + ld b,[hl] + ld a,[heroesUsed] + or b + ld [heroesUsed],a + call UpdateRemoteHeroesUsed + + call ((.loadCurHeroSprite-L1100_Load2)+levelCheckRAM) + ld d,160 + call ScrollSpritesRight + + ld hl,((CharSelectOnHBlank-L1100_Load2)+levelCheckRAM) + call InstallHBlankHandler + ld a,1 + call SetupFadeFromStandard + ld a,120 + ld [camera_i],a + + ld d,160 + call ScrollSpritesLeft + call ((.scrollInFromRight-L1100_Load2)+levelCheckRAM) + +.waitInputLoop + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,[myJoy] + bit JOY_RIGHT_BIT,a + jr z,.checkLeft + + call ((.nextHeroRight-L1100_Load2)+levelCheckRAM) + jp ((.waitContinue-L1100_Load2)+levelCheckRAM) + +.checkLeft + bit JOY_LEFT_BIT,a + jr z,.checkExit + + call ((.nextHeroLeft-L1100_Load2)+levelCheckRAM) + jr .waitContinue + +.checkExit + bit JOY_A_BIT,a + jr nz,.exit + bit JOY_START_BIT,a + jr z,.waitContinue + +.exit + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + cp HERO_BA_FLAG + jr nz,.exitCheckBS + ld de,BA_CINDEX + jr .exitGotHeroClass +.exitCheckBS + cp HERO_BS_FLAG + jr nz,.exitCheckHaiku + ld de,BS_CINDEX + jr .exitGotHeroClass +.exitCheckHaiku + cp HERO_HAIKU_FLAG + jr nz,.exitCheckGrenade + ld de,HAIKU_CINDEX + jr .exitGotHeroClass +.exitCheckGrenade + ld de,KGRENADE_CINDEX +.exitGotHeroClass + LDHL_CURHERODATA HERODATA_CLASS + ld a,e + ld [hl+],a + ld a,d + ld [hl+],a + LDHL_CURHERODATA HERODATA_HEALTH + xor a + ld [hl],a + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,EXIT_D + ld [hl],a + ld hl,EXITAPPOMATTOX + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + call ClearDialog + ld hl,OnHBlank + call InstallHBlankHandler + ld a,1 + call SetupFadeToStandard + ld a,1 + call Delay + call ResetSprites + ret + +.waitContinue + ld a,1 + call Delay + jp ((.waitInputLoop-L1100_Load2)+levelCheckRAM) + ret + +;----Support Routines------------------------------------------------- +.nextHeroRight + ;wait until I can lock heroesUsed + call LockRemoteHeroesUsed + jr nz,.heroesLockedRight + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + jr .nextHeroRight + +.heroesLockedRight + ;if no link set all to unused (fix used hero on broken link) + ld a,[amLinkMaster] + bit 7,a + jr z,.unlockMyHeroRight ;has link + + ;mark all as unused + xor a + ld [heroesUsed],a + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + jr .pickNewRotateRight + +.unlockMyHeroRight + ;mark cur hero as unused + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + push af + xor $ff + ld hl,heroesUsed + and [hl] + ld [hl],a + pop af + +.pickNewRotateRight + ;pick new by rotating right until matches available + ld b,a + ld a,[heroesUsed] + xor $ff + ld c,a + ld a,[heroesAvailable] + and c + ld c,a +.nextHeroLeftLoop + rrc b + ld a,c + or b + cp c + jr nz,.nextHeroLeftLoop + + LDHL_CURHERODATA HERODATA_TYPE + ld [hl],b ;found new hero + ld a,[heroesUsed] + or b + ld [heroesUsed],a + call UpdateRemoteHeroesUsed + call ((.scrollOutToLeft-L1100_Load2)+levelCheckRAM) + call ((.loadCurHeroSprite-L1100_Load2)+levelCheckRAM) + call ((.scrollInFromRight-L1100_Load2)+levelCheckRAM) + ret + +.nextHeroLeft + ;wait until I can lock heroesUsed + call LockRemoteHeroesUsed + jr nz,.heroesLockedLeft + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + jr .nextHeroLeft + +.heroesLockedLeft + ;if no link set all to unused (fix used hero on broken link) + ld a,[amLinkMaster] + bit 7,a + jr z,.unlockMyHeroLeft ;has link + + ;mark all as unused + xor a + ld [heroesUsed],a + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + jr .pickNewRotateLeft + +.unlockMyHeroLeft + ;mark cur hero as unused + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + push af + xor $ff + ld hl,heroesUsed + and [hl] + ld [hl],a + pop af + +.pickNewRotateLeft + ;pick new by rotating left until matches available + ld b,a + ld a,[heroesUsed] + xor $ff + ld c,a + ld a,[heroesAvailable] + and c + ld c,a +.nextHeroRightLoop + rlc b + ld a,c + or b + cp c + jr nz,.nextHeroRightLoop + + LDHL_CURHERODATA HERODATA_TYPE + ld [hl],b ;found new hero + ld a,[heroesUsed] + or b + ld [heroesUsed],a + call UpdateRemoteHeroesUsed + call ((.scrollOutToRight-L1100_Load2)+levelCheckRAM) + call ((.loadCurHeroSprite-L1100_Load2)+levelCheckRAM) + call ((.scrollInFromLeft-L1100_Load2)+levelCheckRAM) + ret + +.scrollInFromRight + ;scroll sprites out of view to the right + ld d,160 + call ScrollSpritesRight + ld a,[specialFX] + and FX_FADE + jr nz,.afterInstallPaletteRight + call InstallGamePalette +.afterInstallPaletteRight + call GfxShowStandardTextBox + + ;scroll sprites into view + ld c,24 +.scrollInFromRightLoop + ld d,5 + call ScrollSpritesLeft + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + dec c + jr nz,.scrollInFromRightLoop + ret + +.scrollInFromLeft + ;scroll sprites out of view to the left + ld d,80 + call ScrollSpritesLeft + ld a,[specialFX] + and FX_FADE + jr nz,.afterInstallPaletteLeft + call InstallGamePalette +.afterInstallPaletteLeft + call GfxShowStandardTextBox + + ;scroll sprites into view from left + ld c,24 +.scrollInFromLeftLoop + ld d,5 + call ScrollSpritesRight + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + dec c + jr nz,.scrollInFromLeftLoop + ret + +.scrollOutToRight + call ClearDialog + ld c,20 +.scrollOutToRightLoop + ld d,6 + call ScrollSpritesRight + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + dec c + jr nz,.scrollOutToRightLoop + call ResetSprites + ret + +.scrollOutToLeft + call ClearDialog + ld c,20 +.scrollOutToLeftLoop + ld d,6 + call ScrollSpritesLeft + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + dec c + jr nz,.scrollOutToLeftLoop + call ResetSprites + ret + +.scrollBG + ld a,[mapLeft] + cp 44 + ret nz + xor a + ld [mapLeft],a + ret + +.loadCurHeroSprite + xor a + ldio [backBufferReady],a + + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + cp HERO_BA_FLAG + jr nz,.loadBS + ld a,BANK(select_ba_name_bg) + ld hl,select_ba_name_bg + call LoadCinemaTextBox + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + ld a,BANK(select_ba_sp) + ld hl,select_ba_sp + call LoadCinemaSprite + ret + +.loadBS + cp HERO_BS_FLAG + jr nz,.loadHaiku + + ld a,BANK(select_bs_name_bg) + ld hl,select_bs_name_bg + call LoadCinemaTextBox + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + ld a,BANK(select_bs_sp) + ld hl,select_bs_sp + call LoadCinemaSprite + ret + +.loadHaiku + cp HERO_HAIKU_FLAG + jr nz,.loadGrenade + + ld a,BANK(select_haiku_name_bg) + ld hl,select_haiku_name_bg + call LoadCinemaTextBox + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + ld a,BANK(select_haiku_sp) + ld hl,select_haiku_sp + call LoadCinemaSprite + ret + +.loadGrenade + ld a,BANK(select_grenade_name_bg) + ld hl,select_grenade_name_bg + call LoadCinemaTextBox + call ((.scrollBG-L1100_Load2)+levelCheckRAM) + ld a,1 + call Delay + ld a,BANK(select_grenade_sp) + ld hl,select_grenade_sp + call LoadCinemaSprite + ret + +CharSelectOnHBlank: + push af + push bc + push hl + + ;rainbow sky + ld c,$69 + ldio a,[$ff44] +.checkRainbowSky + cp 70 + jr nc,.resetSkyTop + + inc a + rlca ;times two (index to word array) + add (((.rainbowSky-L1100_Load2)+levelCheckRAM)&$ff) + ld l,a + ld a,((((.rainbowSky-L1100_Load2)+levelCheckRAM)>>8)&$ff) + adc 0 + ld h,a + ld a,%10000010 + ldio [$ff68],a + ld a,[hl+] + ld [c],a + ld a,[hl+] + ld [c],a + jr .checkDialogOnOff + +.resetSkyTop + ld a,%10000010 + ld [$ff68],a + xor a + ld [c],a + ld [c],a + +.checkDialogOnOff + ldio a,[$ff41] ;get stat register + bit 2,a ;equal to lyc? + jr z,.done + +.continue + ld hl,hblankFlag + bit 0,[hl] ;turning window on or off? + jr nz,.turnOffWindow + + ;turn on window + bit 1,[hl] ;allowed to? + jr nz,.turnOn + jr .done +.turnOn + set 0,[hl] + ldio a,[hblankWinOff] + ld [$ff45],a ;reset lyc to win off pos + ld hl,$ff40 ;turn window on + set 5,[hl] + + ;set background palette 0, color zero to black + ld c,$68 + ld a,%10000000 ;specification + ld [c],a + xor a + inc c + ld [c],a + ld [c],a + jr .done + +.turnOffWindow + res 0,[hl] + ldio a,[hblankWinOn] + ld [$ff45],a ;reset lyc to win on pos + ld hl,$ff40 ;turn window off + res 5,[hl] + + ;restore background palette 0, color zero + ld a,%10000000 ;specification + ld c,$68 + ld hl,mapColor + ld [c],a ;ff68 + ld a,[hl+] ;[mapColor] + inc c + ld [c],a ;ff69 + ld a,[hl] ;[mapColor+1] + ld [c],a ;ff69 + +.done + pop hl + pop bc + pop af + reti + +.rainbowSky + COLOR 0,0,0 + COLOR 0,0,8 + COLOR 0,0,17 + COLOR 0,0,25 + COLOR 0,0,34 + COLOR 0,0,42 + COLOR 0,0,51 + COLOR 0,0,59 + COLOR 0,0,68 + COLOR 0,0,76 + COLOR 0,0,85 + COLOR 0,0,93 + COLOR 0,0,102 + COLOR 0,0,110 + COLOR 0,0,119 + COLOR 0,0,127 + COLOR 0,0,136 + COLOR 0,0,144 + COLOR 0,0,153 + COLOR 0,0,161 + COLOR 0,0,170 + COLOR 0,0,178 + COLOR 0,0,187 + COLOR 0,0,195 + COLOR 0,0,204 + COLOR 0,0,212 + COLOR 0,0,221 + COLOR 0,0,229 + COLOR 0,0,238 + COLOR 0,0,246 + COLOR 0,0,255 + + COLOR 0,0,255 + COLOR 4,6,255 + COLOR 8,12,255 + COLOR 12,19,255 + COLOR 17,25,255 + COLOR 21,32,255 + COLOR 25,38,255 + COLOR 29,44,255 + COLOR 34,51,255 + COLOR 38,57,255 + COLOR 42,64,255 + COLOR 46,70,255 + COLOR 51,76,255 + COLOR 55,83,255 + COLOR 59,89,255 + COLOR 64,96,255 + COLOR 68,102,255 + COLOR 72,108,255 + COLOR 76,115,255 + COLOR 81,121,255 + COLOR 85,128,255 + COLOR 89,134,255 + COLOR 93,140,255 + COLOR 98,147,255 + COLOR 102,153,255 + COLOR 106,160,255 + COLOR 110,166,255 + COLOR 115,172,255 + COLOR 119,179,255 + COLOR 123,185,255 + COLOR 128,192,255 + + COLOR 128,192,255 + COLOR 139,197,255 + COLOR 151,203,255 + COLOR 162,209,255 + COLOR 174,214,255 + COLOR 185,220,255 + COLOR 197,226,255 + COLOR 208,232,255 + COLOR 220,237,255 + COLOR 231,243,255 + COLOR 243,249,255 + COLOR 255,255,255 + +L1100_LoadFinished: + +PRINTT " 1100 Level Load Size: " +PRINTV (L1100_LoadFinished - L1100_Load2) +PRINTT "/$500 bytes\n" + + +L1100_Map: + +;gtx_app_closed_gate_bs5: INCBIN "Data/Dialog/Landing/app_closed_gate_bs5.gtx" + +L1100_Init: + DW ((L1100_InitFinished - L1100_Init)-2) ;size +L1100_Init2: + ret + +L1100_InitFinished: + + +L1100_Check: + DW ((L1100_CheckFinished - L1100_Check) - 2) ;size +L1100_Check2: +L1100_CheckOffset EQU (levelCheckADDR - L1100_Check2) + ret + +L1100_CheckFinished: + +PRINTT " 1100 Level Load Size: " +PRINTV (L1100_LoadFinished - L1100_Load2) +PRINTT "/$500 bytes\n" + diff --git a/Source/l1101.asm b/Source/l1101.asm new file mode 100644 index 0000000..96c76c8 --- /dev/null +++ b/Source/l1101.asm @@ -0,0 +1,648 @@ +;level1101.asm main menu +;Abe Pralle 3.4.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/start.inc" + + +INTCLK EQU $83 +EXTCLK EQU $82 + +;JOINMAP EQU $1102 +;JOINMAP EQU $1100 +JOINDIR EQU EXIT_D + +;JOINMAP EQU $0015 +;JOINDIR EQU EXIT_W + +;--------------------------------------------------------------------- +SECTION "LevelsSection1101_data2",ROMX +;--------------------------------------------------------------------- +bullet_sp: + INCBIN "../fgbpix/menu/menucursor.sp" + + +;--------------------------------------------------------------------- +SECTION "LevelsSection1101",ROMX +;--------------------------------------------------------------------- + +L1101_Contents:: + DW L1101_Load + DW L1101_Init + DW L1101_Check + DW L1101_Map + +mainmenu_bg: + INCBIN "../fgbpix/menu/fgbmenu.bg" + + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1101_Load: + DW ((L1101_LoadFinished - L1101_Load2)) ;size +L1101_Load2: + ;reset all 256 mapState entries to zero + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld hl,levelState + xor a +.resetStates + ld [hl+],a + cp l + jr nz,.resetStates + + ;reveal river tiles on computer map + ld a,1 + ld [levelState+0*16+1],a + ld [levelState+1*16+1],a + ld [levelState+2*16+1],a + ld [levelState+2*16+2],a + ld [levelState+3*16+2],a + ld [levelState+3*16+2],a + ld [levelState+4*16+2],a + ld [levelState+5*16+2],a + ld [levelState+6*16+2],a + ld [levelState+7*16+2],a + ld [levelState+8*16+2],a + ld [levelState+9*16+2],a + ld [levelState+10*16+2],a + ld [levelState+7*16+1],a + + ;set heroes' health to zero so that it's reset first time + ;and puffball count to zero + xor a + ld [hero0_health],a + ld [hero1_health],a + ld [hero0_puffCount],a + ld [hero1_puffCount],a + + ld a,BANK(mainmenu_bg) + ld hl,mainmenu_bg + call LoadCinemaBG + + ld a,BANK(bullet_sp) + ld hl,bullet_sp + call LoadCinemaSprite + + ld hl,(bullet_y + (levelCheckRAM-L1101_Load2)) + xor a + ld [hl+],a ;bullet_y + ld [hl+],a ;cur_choice + ld a,1 + ld [hl+],a ;hasSavedGame + xor a + ld [hl+],a ;hasLinkMaster + + + ld a,[amLinkMaster] + bit 7,a + jr nz,.afterTerminateLink + +.sendTerminate + ld a,LTERMINATE + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.sendTerminate + + ld a,$ff + ld [amLinkMaster],a + +.afterTerminateLink + ;setup attempt to link as slave + ld a,$aa + ldio [$ff01],a ;exchange data + ld a,EXTCLK + ldio [$ff02],a ;ready for xchg, use remote clock + + ;ld d,4 + ;call ScrollSpritesRight + call (.drawMenu + (levelCheckRAM-L1101_Load2)) + call RedrawMap + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + +.mainloop + call UpdateObjects + call (.drawMenu + (levelCheckRAM-L1101_Load2)) + call RedrawMap + + ld a,[amLinkMaster] + cp $ff ;do I care about attempting link as a slave? + jr nz,.afterUpdateLinkStatus + + ldio a,[$ff02] + and $80 + jr nz,.afterUpdateLinkStatus ;no change + + ld a,[$ff01] ;got something useful? + cp $55 + jr z,.become_slave + +.resetLinkAttempt + ld a,$aa + ldio [$ff01],a + ld a,EXTCLK + ldio [$ff02],a + jr .afterUpdateLinkStatus ;no change + +.become_slave + ;We transferred a byte! I just became somebody's bitch. + xor a + ld [amLinkMaster],a ;I'm a slave + ld a,1 + ld [(hasLinkMaster + (levelCheckRAM-L1101_Load2))],a + ld a,2 ;force bullet to "join game" + ld [(cur_choice + (levelCheckRAM-L1101_Load2))],a + + ;disabled load game + xor a + ld [(hasSavedGame + (levelCheckRAM-L1101_Load2))],a + + ;kill some time + ld a,$80 +.killTime + push af + pop af + dec a + jr nz,.killTime + +.afterUpdateLinkStatus + ld hl,(cur_choice + (levelCheckRAM-L1101_Load2)) + ld a,[myJoy] + and JOY_DOWN + jr z,.checkJoyUp + + ld a,[hl] + or a + jr nz,.checkDownWasLoad + +.checkDownWasNewGame + ;down, cursor was on "new game" + inc [hl] + ld a,[(hasSavedGame + (levelCheckRAM-L1101_Load2))] + or a + jr z,.downWasLoad + jr .checkJoyDone + +.checkDownWasLoad + cp 1 + jr nz,.checkDownWasJoin + +.downWasLoad + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr nz,.downOkayToJoin + + ld [hl],0 ;set bullet to new game + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr z,.checkJoyDone + jr .checkDownWasNewGame + +.downOkayToJoin + inc [hl] + jr .checkJoyDone + +.checkDownWasJoin + xor a + ld [hl],a + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr z,.checkJoyDone + jr .checkDownWasNewGame + +.checkJoyUp + ld a,[myJoy] + and JOY_UP + jr z,.checkJoyButtons + + ld a,[hl] + or a + jr nz,.checkUpWasLoad + + ld [hl],2 + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr z,.upWasJoin + +.checkUpWasLoad + cp 1 + jr nz,.upWasJoin + jr .upWasLoad + +.upWasNewGame + jr .checkJoyDone + +.upWasLoad + dec [hl] ;set to new game + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr z,.checkJoyDone + ld [hl],2 + jr .checkJoyDone + +.upWasJoin + dec [hl] + ld a,[(hasSavedGame + (levelCheckRAM-L1101_Load2))] + or a + jr z,.upWasLoad + +.checkJoyDone + call (.drawMenu + (levelCheckRAM-L1101_Load2)) + ld a,JOY_DOWN | JOY_UP + push hl + ld hl,myJoy + call WaitInputZero + pop hl + +.checkJoyButtons + ld a,[myJoy] + and %11110000 + jr nz,.haveButtons + jp (.mainloop + (levelCheckRAM-L1101_Load2)) + +.haveButtons + ;if starting a new game w/no link, make me the master + ld a,[amLinkMaster] + cp $ff + jr nz,.afterMakeMaster + or a + jr z,.afterMakeMaster + ld a,$fe ;no link/master + ld [amLinkMaster],a + +.afterMakeMaster + ld a,%11111111 + push hl + ld hl,myJoy + call WaitInputZero + pop hl + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld a,[(cur_choice + (levelCheckRAM-L1101_Load2))] + cp 2 + jp z,((.joinGame-L1101_Load2)+levelCheckRAM) + + cp 1 + jr z,.loadGame + + ;begin a new game + LONGCALLNOARGS RandomizeFlightCodes + + ;save game + ;call ((.saveGame-L1101_Load2)+levelCheckRAM) + + ld hl,MENUTOMAP + jp ((.setNextLevel-L1101_Load2)+levelCheckRAM) + +.loadGame + ld a,$0a ;enable save ram access + ld [0],a + + ;if number of flight codes is zero, must not be a saved game here + ld a,[$a000+9+16+256] + or a + jr z,.afterLoadGame + + ld hl,$a000 ;start of ram area $a000-$bfff + ld de,gameState + ld bc,9 + xor a + call ((.loadData-L1101_Load2)+levelCheckRAM) + + ld de,inventory + ld bc,16 + xor a + call ((.loadData-L1101_Load2)+levelCheckRAM) + + ld de,levelState + ld bc,256 + ld a,LEVELSTATEBANK + call ((.loadData-L1101_Load2)+levelCheckRAM) + + ld de,flightCode + ld bc,256 + ld a,FLIGHTCODEBANK + call ((.loadData-L1101_Load2)+levelCheckRAM) + +.afterLoadGame + xor a + ld [heroesUsed],a + + xor a + ld [0],a ;disable save ram to prevent false writes on powerdown + + ld a,LEVELSTATEBANK ;analyze level states to see if we're somewhere special + ldio [$ff70],a + ld hl,$1100 ;level # of char select + ld a,[levelState+$2f] ;distress + or a + ;after distress cinema, start at char select + jp nz,((.setNextLevel-L1101_Load2)+levelCheckRAM) + + ld hl,$1102 ;intro missions + jp ((.setNextLevel-L1101_Load2)+levelCheckRAM) + +.loadData + ;copies "bc" # of bytes from [hl] to [de] in bank "a" + ldio [$ff70],a +.loadLoop + ld a,[hl+] + ld [de],a + inc de + dec bc + xor a + cp b + jr nz,.loadLoop + cp c + jr nz,.loadLoop + ret + +.saveGame + ld a,$0a ;enable save ram access + ld [0],a + + ld hl,$a000 ;start of save area $a000-$bfff + ld de,gameState + ld bc,9 + xor a + call ((.saveData-L1101_Load2)+levelCheckRAM) + + ld de,inventory + ld bc,16 + xor a + call ((.saveData-L1101_Load2)+levelCheckRAM) + + ld de,levelState + ld bc,256 + ld a,LEVELSTATEBANK + call ((.saveData-L1101_Load2)+levelCheckRAM) + + ld de,flightCode + ld bc,256 + ld a,FLIGHTCODEBANK + call ((.saveData-L1101_Load2)+levelCheckRAM) + + xor a + ld [0],a ;disable save ram to prevent false writes on powerdown + ret + +.saveData + ;copies "bc" # of bytes from [de] to [hl] in bank "a" + ldio [$ff70],a +.saveLoop + ld a,[de] + inc de + ld [hl+],a + dec bc + xor a + cp b + jr nz,.saveLoop + cp c + jr nz,.saveLoop + ret + + + +.joinGame +;----LINK TEST BEGIN-------------------------------------------------- +IF 0 + ld a,LLINKTEST + call ExchangeByte + ld a,1 + ld bc,$1000 + ld hl,$d000 + di + + ld a,4 +.transfer32k + push af + ld a,1 + call ReceiveData + + ld a,1 + call TransmitData + pop af + dec a + jr nz,.transfer32k + +;di +;.infi5 jr .infi5 +rst $00 +ENDC + +;----LINK TEST END---------------------------------------------------- + ;get the current game state + ld a,LGETGAMESTATE + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.joinGame + + ld hl,.bailOutAddress + xor a + call SetLinkBailOutAddress + + ld hl,gameState + ld bc,5 + xor a + call ReceiveData + + ld hl,levelState + ld bc,256 + ld a,LEVELSTATEBANK + call ReceiveData + + ;inventory + ld hl,inventory + ld bc,16 + xor a + call ReceiveData + + ;flight codes + ld hl,flightCode + ld bc,256 + ld a,FLIGHTCODEBANK + call ReceiveData + + ld hl,hero0_data + ld bc,HERODATASIZE*2 + xor a + call ReceiveData + + ld a,(hero1_data & $ff) + ld [curHeroAddressL],a + + ld a,[appomattoxMapIndex] + call ReceiveByte + + ;get map to join + call ReceiveByte + ld [joinMap],a + ld l,a + call ReceiveByte + ld [joinMap+1],a + ld h,a + +.setNextLevel + ld a,h + ld [curLevelIndex+1],a + ld a,l + ld [curLevelIndex],a + ld a,JOINDIR + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld a,1 + ld [timeToChangeLevel],a + + ret + +.bailOutAddress + rst $00 + +.drawMenu + push bc + push de + push hl + + xor a + ldio [backBufferReady],a + + ld hl,(bullet_y + (levelCheckRAM-L1101_Load2)) + ld a,[hl+] ;bullet_y + ld d,a + call ScrollSpritesUp ;reset bullet to top of screen + + ;scroll the bullet down to the correct position + ld hl,(cur_choice + (levelCheckRAM-L1101_Load2)) + ld a,[hl-] ;get cur choice + ld b,a ;a = a * 3 + rlca + add b + add 4 ;topmost is four tiles down + rlca ;times 8 pixels per tile + rlca + rlca + ld [hl+],a ;save new bullet_y + ld d,a + call ScrollSpritesDown + + ;-----draw 'New Game' text------------------------------------ + ld a,[(cur_choice + (levelCheckRAM-L1101_Load2))] + ld hl,$1400 ;origin tile 20,0 + or a + jr z,.highlightNewGame + + ;check for disabled + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr z,.newGameHighlightDone + + ;disable + ld l,6 + jr .newGameHighlightDone + +.highlightNewGame + ;highlighted + ld l,3 ;origin 20,3 + +.newGameHighlightDone + ld de,$0405 ;dest tile 3,5 + ld bc,$0d03 ;dest w,h 13x3 + call CinemaBlitRect + + ;-----draw 'Load Game' text----------------------------------- + ld hl,$1409 ;origin tile 20,9 + ld a,[(cur_choice + (levelCheckRAM-L1101_Load2))] + cp 1 + jr nz,.checkLoadDisabled + + ;highlighted + ld l,12 ;origin 20,12 + jr .loadGameHighlightDone + +.checkLoadDisabled + ld a,[(hasSavedGame + (levelCheckRAM-L1101_Load2))] + or a + jr nz,.loadGameHighlightDone + + ;disabled + ld l,15 ;origin 20,15 + +.loadGameHighlightDone + ld de,$0408 ;dest tile 4,8 + ld bc,$0d03 ;dest w,h 13x3 + call CinemaBlitRect + + ;-----draw 'Join Game' text----------------------------------- + ld hl,$2100 ;origin tile 33,0 + ld a,[(cur_choice + (levelCheckRAM-L1101_Load2))] + cp 2 + jr nz,.checkJoinDisabled + + ;highlighted + ld l,3 ;origin 33,3 + jr .joinGameHighlightDone + +.checkJoinDisabled + ld a,[(hasLinkMaster + (levelCheckRAM-L1101_Load2))] + or a + jr nz,.joinGameHighlightDone + + ;disabled + ld l,6 ;origin 33,6 + +.joinGameHighlightDone + ld de,$040b ;dest tile 4,11 + ld bc,$0d03 ;dest w,h 13x3 + call CinemaBlitRect + + pop hl + pop de + pop bc + ret + +L1101_LoadFinished: + +;some local vars +bullet_y: DS 1 +cur_choice: DS 1 +hasSavedGame: DS 1 +hasLinkMaster: DS 1 + +L1101_Map: +;--------------------------------------------------------------------- +L1101_Init: +;--------------------------------------------------------------------- + DW ((L1101_InitFinished - L1101_Init2)) ;size +L1101_Init2: + + ret + +L1101_InitFinished: + + +;--------------------------------------------------------------------- +L1101_Check: +;--------------------------------------------------------------------- + DW ((L1101_CheckFinished - L1101_Check) - 2) ;size +L1101_Check2: + ret +L1101_CheckFinished: + + +PRINTT " 1101 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1101_LoadFinished - L1101_Load2) +PRINTT " / " +PRINTV (L1101_InitFinished - L1101_Init2) +PRINTT " / " +PRINTV (L1101_CheckFinished - L1101_Check2) +PRINTT "\n" + diff --git a/Source/l1102.asm b/Source/l1102.asm new file mode 100644 index 0000000..c29b450 --- /dev/null +++ b/Source/l1102.asm @@ -0,0 +1,934 @@ +; l1102.asm main intro cinema +; Generated 07.26.2000 by mlevel +; Modified 07.26.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +MUSICTEST EQU 0 + +NEXTLEVEL EQU $0313 +;NEXTLEVEL EQU $0013 +NEXTLEVELDIR EQU EXIT_D + +;--------------------------------------------------------------------- +SECTION "Level1102Section2",ROMX +;--------------------------------------------------------------------- +flour_bg:: + INCBIN "../fgbpix/mainchardialog/flour_triumph.bg" +skippy_bg:: + INCBIN "../fgbpix/mainchardialog/skippy_triumph.bg" + +dialog: +flour1_gtx: + INCBIN "Data/Dialog/main_intro/flour1.gtx" + +flour2_gtx: + INCBIN "Data/Dialog/main_intro/flour2.gtx" + +flour3_gtx: + INCBIN "Data/Dialog/main_intro/flour3.gtx" + +flour4_gtx: + INCBIN "Data/Dialog/main_intro/flour4.gtx" + +flour5_gtx: + INCBIN "Data/Dialog/main_intro/flour5.gtx" + +flour6_gtx: + INCBIN "Data/Dialog/main_intro/flour6.gtx" + +flour7_gtx: + INCBIN "Data/Dialog/main_intro/flour7.gtx" + +skippy1_gtx: + INCBIN "Data/Dialog/main_intro/skippy1.gtx" + +skippy2_gtx: + INCBIN "Data/Dialog/main_intro/skippy2.gtx" + +skippy3_gtx: + INCBIN "Data/Dialog/main_intro/skippy3.gtx" + +triumph_small_sp: + INCBIN "../fgbpix/main_intro/triumph_small.sp" + +bcs_vestigial_bg: + INCBIN "../fgbpix/main_intro/bcs_vestigial.bg" + +narrator_warroom_bg: + INCBIN "../fgbpix/main_intro/narrator_warroom.bg" + +nar_crewquarters_bg: + INCBIN "../fgbpix/main_intro/nar_crewquarters.bg" + +;--------------------------------------------------------------------- +SECTION "Level1102Section",ROMX +;--------------------------------------------------------------------- + +L1102_Contents:: + DW L1102_Load + DW L1102_Init + DW L1102_Check + DW L1102_Map + +moon_bg:: + INCBIN "../fgbpix/main_intro/moon.bg" +group_in_triumph_bg: + INCBIN "../fgbpix/main_intro/group_in_triumph.bg" +space_bg1_bg: + INCBIN "../fgbpix/main_intro/space_bg1.bg" +moontact_bg:: + INCBIN "../fgbpix/main_intro/moontact.bg" +tactmap_bg: + INCBIN "../fgbpix/main_intro/tactmap.bg" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1102_Load: + DW ((L1102_LoadFinished - L1102_Load2)) ;size +L1102_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + +IF MUSICTEST==0 + ld a,BANK(intro_cinema_gbm) + ld hl,intro_cinema_gbm + call InitMusic +ENDC + + ld a,BANK(moon_bg) + ld hl,moon_bg + call LoadCinemaBG + + +IF MUSICTEST +ld a,16 +call SetupFadeFromStandard +call WaitFade +.repeat + ld a,BANK(jungle_gbm) + ld hl,jungle_gbm + call InitMusic + +.getJoy0_5 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy0_5 + +.releaseJoy0_5 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy0_5 + + ld a,BANK(mysterious_gbm) + ld hl,mysterious_gbm + call InitMusic + +.getJoy0_55 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy0_55 + +.releaseJoy0_55 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy0_55 + + ld a,BANK(spaceish_gbm) + ld hl,spaceish_gbm + call InitMusic + +.getJoy0_6 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy0_6 + +.releaseJoy0_6 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy0_6 + + ld a,BANK(alarm_gbm) + ld hl,alarm_gbm + call InitMusic + +.getJoy0_7 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy0_7 + +.releaseJoy0_7 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy0_7 + + ld a,BANK(frosty_gbm) + ld hl,frosty_gbm + call InitMusic + +.getJoy0_8 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy0_8 + +.releaseJoy0_8 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy0_8 + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + +.getJoy0_9 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy0_9 + +.releaseJoy0_9 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy0_9 + + ld a,BANK(wedding_gbm) + ld hl,wedding_gbm + call InitMusic + +.getJoy1 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy1 + +.releaseJoy1 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy1 + + ld a,BANK(intro_cinema_gbm) + ld hl,intro_cinema_gbm + call InitMusic + +.getJoy2 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy2 + +.releaseJoy2 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy2 + + ld a,BANK(bs_gbm) + ld hl,bs_gbm + call InitMusic + +.getJoy3 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy3 + +.releaseJoy3 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy3 + + ld a,BANK(lady_flower_gbm) + ld hl,lady_flower_gbm + call InitMusic + +.getJoy4 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy4 + +.releaseJoy4 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy4 + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + +.getJoy5 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy5 + +.releaseJoy5 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy5 + + ld a,BANK(haiku_gbm) + ld hl,haiku_gbm + call InitMusic + +.getJoy6 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy6 + +.releaseJoy6 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy6 + + ld a,BANK(moon_base_ba_gbm) + ld hl,moon_base_ba_gbm + call InitMusic + +.getJoy7 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy7 + +.releaseJoy7 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy7 + + ld a,BANK(moon_base_haiku_gbm) + ld hl,moon_base_haiku_gbm + call InitMusic + +;.getJoy8 + ;ld a,1 + ;call Delay + ;ld a,[myJoy] + ;and %10000 + ;jr z,.getJoy8 + +;.releaseJoy8 + ;ld a,1 + ;call Delay + ;ld a,[myJoy] + ;or a + ;jr nz,.releaseJoy8 + + ;ld a,BANK(shroom_gbm) + ;ld hl,shroom_gbm + ;call InitMusic + +.getJoy9 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy9 + +.releaseJoy9 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy9 + + ld a,BANK(cowboy_gbm) + ld hl,cowboy_gbm + call InitMusic + +.getJoy10 + ld a,1 + call Delay + ld a,[myJoy] + and %10000 + jr z,.getJoy10 + +.releaseJoy10 + ld a,1 + call Delay + ld a,[myJoy] + or a + jr nz,.releaseJoy10 + + jp ((.repeat-L1102_Load2)+levelCheckRAM) + +ENDC + + ld a,BANK(triumph_small_sp) + ld hl,triumph_small_sp + call LoadCinemaSprite + + ld d,52 + call ScrollSpritesLeft + + ld d,144 + call ScrollSpritesDown + + ld a,BANK(bcs_vestigial_bg) + ld hl,bcs_vestigial_bg + call LoadCinemaTextBox + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + ld de,((.endCinema - L1102_Load2) + levelCheckRAM) + call SetDialogSkip + ld de,((.showGroup - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,30 + call Delay + + ;scroll the view, waiting until left edge is at tile 6 before + ;raising the ship sprites to make it visible + ld a,$41 + ldio [scrollSpeed],a + ld a,30 + ld [camera_i],a + + ld c,120 + ld b,1 ;flag that we need to show ship +.waitScroll + ld a,1 + call Delay + + ld a,[mapLeft] + cp 6 + jr nz,.afterShowShip + ld a,b + or a + jr z,.afterShowShip + + ld b,0 + ld d,104 + call ScrollSpritesUp + call GfxShowStandardTextBox + +.afterShowShip + dec c + jr nz,.waitScroll + +.showGroup + call ClearDialog + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + call ResetSprites + + ld de,((.flourDialog1 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(narrator_warroom_bg) + ld hl,narrator_warroom_bg + call LoadCinemaTextBox + call GfxShowStandardTextBox + call ((.showGroupInTriumph - L1102_Load2) + levelCheckRAM) + +.flourDialog1 + ld a,1 + call SetupFadeToBlack + call WaitFade + + call ClearDialog + call ((.loadFlour - L1102_Load2) + levelCheckRAM) + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld de,((.flourDialog2 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(flour1_gtx) + ld c,0 + ld de,flour1_gtx + call ShowDialogAtBottomNoWait + + ld b,5 ;5*50 delay + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.flourDialog2 + call ClearDialog + ld a,BANK(flour2_gtx) + ld c,0 + ld de,flour2_gtx + call ShowDialogAtBottomNoWait + + ld de,((.tactMap1 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld b,2 ;3*50 delay + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.tactMap1 + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + + call ClearDialog + + ;----tactical map of our position----------------------------- + call ((.loadTactMap - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + + ld de,((.flour3 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,40 + call ((.animateMap - L1102_Load2) + levelCheckRAM) + +.flour3 + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + call ((.loadFlour - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + + ld de,((.tactMap2 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(flour3_gtx) + ld c,0 + ld de,flour3_gtx + call ShowDialogAtBottomNoWait + + ld b,5 ;5*50 delay + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.tactMap2 + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + call ClearDialog + call ((.loadTactMap - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + + ld de,((.showGroup2 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + ld a,60 + call ((.animateMap - L1102_Load2) + levelCheckRAM) + +.showGroup2 + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + ld de,((.flour4 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + call ((.showGroupInTriumph - L1102_Load2) + levelCheckRAM) + +.flour4 + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + call ((.loadFlour - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + ld de,((.moontact - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(flour4_gtx) + ld c,0 + ld de,flour4_gtx + call ShowDialogAtBottomNoWait + + ld b,6 ;6*50 delay + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.moontact + call ClearDialog + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + ld a,BANK(moontact_bg) + ld hl,moontact_bg + call LoadCinemaBG + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + ld de,((.skippy1 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + ld a,40 + call ((.animateMap - L1102_Load2) + levelCheckRAM) +.skippy1 + call ((.fadeToBlack - L1102_Load2) + levelCheckRAM) + call ((.loadSkippy - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + + ld a,BANK(skippy1_gtx) + ld c,0 + ld de,skippy1_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour5 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld b,4 + call ((.animateSkippy - L1102_Load2) + levelCheckRAM) + +.flour5 + call ClearDialog + call ((.fadeToBlack1 - L1102_Load2) + levelCheckRAM) + call ((.loadFlour - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L1102_Load2) + levelCheckRAM) + ld de,((.skippy2 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(flour5_gtx) + ld c,0 + ld de,flour5_gtx + call ShowDialogAtBottomNoWait + + ld b,3 ;6*50 delay + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.skippy2 + call ClearDialog + call ((.fadeToBlack1 - L1102_Load2) + levelCheckRAM) + call ((.loadSkippy - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L1102_Load2) + levelCheckRAM) + + ld a,BANK(skippy2_gtx) + ld c,0 + ld de,skippy2_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour6 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld b,3 + call ((.animateSkippy - L1102_Load2) + levelCheckRAM) + +.flour6 + call ClearDialog + call ((.fadeToBlack1 - L1102_Load2) + levelCheckRAM) + call ((.loadFlour - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L1102_Load2) + levelCheckRAM) + ld de,((.skippy3 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(flour6_gtx) + ld c,0 + ld de,flour6_gtx + call ShowDialogAtBottomNoWait + + ld b,5 ;5*50 delay + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.skippy3 + call ClearDialog + call ((.fadeToBlack1 - L1102_Load2) + levelCheckRAM) + call ((.loadSkippy - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L1102_Load2) + levelCheckRAM) + + ld a,BANK(skippy3_gtx) + ld c,0 + ld de,skippy3_gtx + call ShowDialogAtBottomNoWait + + ld de,((.flour7 - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld b,5 + call ((.animateSkippy - L1102_Load2) + levelCheckRAM) + +.flour7 + call ClearDialog + call ((.fadeToBlack1 - L1102_Load2) + levelCheckRAM) + call ((.loadFlour - L1102_Load2) + levelCheckRAM) + call ((.fadeFromBlack1 - L1102_Load2) + levelCheckRAM) + ld de,((.endCinema - L1102_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(flour7_gtx) + ld c,0 + ld de,flour7_gtx + call ShowDialogAtBottomNoWait + + ld b,2 + call ((.animateFlour - L1102_Load2) + levelCheckRAM) + +.endCinema + call ClearDialog + ld a,BANK(nar_crewquarters_bg) + ld hl,nar_crewquarters_bg + call LoadCinemaTextBox + + ld hl,2054 ;BA + ld a,l + ld [hero0_class],a + ld a,h + ld [hero0_class+1],a + ld a,HERO_BA_FLAG + ld [hero0_type],a + ld hl,$0409 + ld a,l + ld [hero0_enterLevelLocation],a + ld a,h + ld [hero0_enterLevelLocation+1],a + + ld hl,RA_CINDEX + ld a,l + ld [hero1_class],a + ld a,h + ld [hero1_class+1],a + ld a,HERO_BS_FLAG + ld [hero1_type],a + + ld hl,NEXTLEVEL + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,NEXTLEVELDIR + ld [hero0_enterLevelFacing],a + ld a,1 + ld [timeToChangeLevel],a + + ld a,16 + call SetupFadeToStandard + call WaitFade + + ret + +.loadFlour + ld a,BANK(flour_bg) + ld hl,flour_bg + call LoadCinemaBG + ret + +.loadSkippy + ld a,BANK(skippy_bg) + ld hl,skippy_bg + call LoadCinemaBG + ret + +.loadTactMap + ld a,BANK(tactmap_bg) + ld hl,tactmap_bg + call LoadCinemaBG + ret + +.fadeToBlack + ld a,16 + call SetupFadeToBlack + call WaitFade + ret + +.fadeFromBlack + ld a,16 + call SetupFadeFromBlack + call WaitFade + ret + +.fadeToBlack1 + ld a,16 + call SetupFadeToBlack + call WaitFade + ret + +.fadeFromBlack1 + ld a,16 + call SetupFadeFromBlack + call WaitFade + ret + +.showGroupInTriumph + ld a,BANK(group_in_triumph_bg) + ld hl,group_in_triumph_bg + call LoadCinemaBG + + call ((.fadeFromBlack - L1102_Load2) + levelCheckRAM) + + ld a,90 + call Delay + + ret + +.animateFlour + ;b already set up with # of loops +.flourEyes + ld c,10 + +.flourTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 1 + ld a,4 + jr nz,.animate + ld a,1 + +.animate + ;animate mouth + ld bc,$0502 + ld de,$0906 + ld hl,$1400 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.flourTalk + + ;animate eyes + push bc + ld a,3 + ld bc,$0603 + ld de,$0903 + ld hl,$1900 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.flourEyes + + ;open eyes at end + ld a,1 + ld bc,$0603 + ld de,$0903 + ld hl,$1900 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + ret + +.animateSkippy +.skippyEyes + ld c,10 + +.skippyTalk + push bc + ld a,5 + call Delay + + ld a,b + cp 3 + ld a,3 + jr nc,.animateSkippyMouth + ld a,1 + +.animateSkippyMouth + ;animate mouth + ld bc,$0402 + ld de,$0609 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec c + jr nz,.skippyTalk + + ;animate eyes + push bc + ld a,5 + ld bc,$0403 + ld de,$0606 + ld hl,$1402 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec b + jr nz,.skippyEyes + + ;open eyes at end + ld a,1 + ld bc,$0403 + ld de,$0606 + ld hl,$1402 + call CinemaSpotAnimationRandomVerticalFrames + ld a,10 + call Delay + + ret + +.animateMap + ld h,a + ld l,0 + ld de,0 + + ld c,6 + +.animateMapLoop + push bc + ld a,10 + call Delay + ld bc,$1412 + call CinemaBlitRect + push hl + ld hl,((.mapSound - L1102_Load2) + levelCheckRAM) + call PlaySound + pop hl + ld a,10 + call Delay + push hl + ld hl,$1400 + call CinemaBlitRect + pop hl + pop bc + dec c + jr nz,.animateMapLoop + ret + +.mapSound + DB 1,$00,$b8,$f0,$80,$c6 + + +L1102_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1102_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1102_Init: + DW ((L1102_InitFinished - L1102_Init2)) ;size +L1102_Init2: + ret + +L1102_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1102_Check: + DW ((L1102_CheckFinished - L1102_Check2)) ;size +L1102_Check2: + ret + +L1102_CheckFinished: +PRINTT "1102 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1102_LoadFinished - L1102_Load2) +PRINTT " / " +PRINTV (L1102_InitFinished - L1102_Init2) +PRINTT " / " +PRINTV (L1102_CheckFinished - L1102_Check2) +PRINTT "\n" + diff --git a/Source/l1103.asm b/Source/l1103.asm new file mode 100644 index 0000000..7ad1fb2 --- /dev/null +++ b/Source/l1103.asm @@ -0,0 +1,782 @@ +; l1103.asm wedding / gyro pops from tree +; Generated 08.03.2000 by mlevel +; Modified 08.03.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;from l0505 +VAR_HERO EQU 11 + + + +;--------------------------------------------------------------------- +SECTION "Level1103Gfx1",ROMX +;--------------------------------------------------------------------- +gyro_tree_bg: + INCBIN "../fgbpix/wedding/gyro_tree.bg" + +gyro_costume_sp: + INCBIN "../fgbpix/wedding/gyro_costume.sp" + +gang_watches_wedding_bg: + INCBIN "../fgbpix/wedding/gang_watches_wedding.bg" + +;--------------------------------------------------------------------- +SECTION "Level1103Gfx2",ROMX +;--------------------------------------------------------------------- +preacher_bg: + INCBIN "../fgbpix/wedding/preacher.bg" + +wedding_panoramic_bg: + INCBIN "../fgbpix/wedding/wedding_panoramic.bg" + +flour_at_wedding_bg: + INCBIN "../fgbpix/wedding/flour_at_wedding.bg" + +;--------------------------------------------------------------------- +SECTION "Level1103Gfx3",ROMX +;--------------------------------------------------------------------- +flower_at_wedding_bg: + INCBIN "../fgbpix/wedding/flower_at_wedding.bg" + +gang_watches_front_bg:: + INCBIN "../fgbpix/wedding/gang_watches_front.bg" + +gyro_big_bg: + INCBIN "../fgbpix/wedding/gyro_big.bg" + +;--------------------------------------------------------------------- +SECTION "Level1103Dialog",ROMX +;--------------------------------------------------------------------- + +dialog: +preacher_blah_gtx: + INCBIN "Data/Dialog/wedding/preacher_blah.gtx" + +preacher_reasons_gtx: + INCBIN "Data/Dialog/wedding/preacher_reasons.gtx" + +hero_reasons_gtx: + INCBIN "Data/Dialog/wedding/hero_reasons.gtx" + +captain_thanks_gtx: + INCBIN "Data/Dialog/wedding/captain_thanks.gtx" + +captain_cake_gtx: + INCBIN "Data/Dialog/wedding/captain_cake.gtx" + +lady_byallmeans_gtx: + INCBIN "Data/Dialog/wedding/lady_byallmeans.gtx" + +lady_radio_gtx: + INCBIN "Data/Dialog/wedding/lady_radio.gtx" + +preacher_takebegonia_gtx: + INCBIN "Data/Dialog/wedding/preacher_takebegonia.gtx" + +gyro_bs_gtx: + INCBIN "Data/Dialog/wedding/gyro_bs.gtx" + +preacher_takesack_gtx: + INCBIN "Data/Dialog/wedding/preacher_takesack.gtx" + +gyro_ba_gtx: + INCBIN "Data/Dialog/wedding/gyro_ba.gtx" + +preacher_pronounce_gtx: + INCBIN "Data/Dialog/wedding/preacher_pronounce.gtx" + +gyro_haiku_gtx: + INCBIN "Data/Dialog/wedding/gyro_haiku.gtx" + +preacher_married_gtx: + INCBIN "Data/Dialog/wedding/preacher_married.gtx" + +gyro_notsofast_gtx: + INCBIN "Data/Dialog/wedding/gyro_notsofast.gtx" + +captain_why_gtx: + INCBIN "Data/Dialog/wedding/captain_why.gtx" + +gyro_reveals_gtx: + INCBIN "Data/Dialog/wedding/gyro_reveals.gtx" + +captain_thankyou_gtx: + INCBIN "Data/Dialog/wedding/captain_thankyou.gtx" + +gyro_notyummy_gtx: + INCBIN "Data/Dialog/wedding/gyro_notyummy.gtx" + +gyro_recall_gtx: + INCBIN "Data/Dialog/wedding/gyro_recall.gtx" + +gyro_surrender_gtx: + INCBIN "Data/Dialog/wedding/gyro_surrender.gtx" + +gyro_difficult_gtx: + INCBIN "Data/Dialog/wedding/gyro_difficult.gtx" + +captain_okay_gtx: + INCBIN "Data/Dialog/wedding/captain_okay.gtx" + +lady_dontbesilly_gtx: + INCBIN "Data/Dialog/wedding/lady_dontbesilly.gtx" + + +;--------------------------------------------------------------------- +SECTION "Level1103Section",ROMX +;--------------------------------------------------------------------- + +L1103_Contents:: + DW L1103_Load + DW L1103_Init + DW L1103_Check + DW L1103_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1103_Load: + DW ((L1103_LoadFinished - L1103_Load2)) ;size +L1103_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(wedding_panoramic_bg) + ld hl,wedding_panoramic_bg + call LoadCinemaBG + + ld a,EXIT_D + ld hl,$1103 + call YankRemotePlayer + + ;set state of 0505 in case I was yanked from elsewhere + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,2 ;STATE_AFTERWEDDING + ld [levelState+$55],a + + xor a + ld [hero0_health],a + ld [hero1_health],a + + ld a,15 + call SetupFadeFromStandard + call WaitFade + + ld de,((.endCinema-L1103_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.preacher_blah-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + + ld a,BANK(wedding_panoramic_bg) + + ld a,80 + call Delay + +.preacher_blah + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + + ld a,BANK(preacher_bg) + ld hl,preacher_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld de,((.preacher_reasons-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM preacher_blah_gtx + + ld d,3 + LONGCALLNOARGS AnimatePreacher + +.preacher_reasons + ld c,0 + DIALOGBOTTOM preacher_reasons_gtx + + ld de,((.hero_reasons-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimatePreacher + +.hero_reasons + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + ld de,((.captainThanks-L1103_Load2)+levelCheckRAM) + call SetDialogForward + ld a,[levelVars+VAR_HERO] + ld [dialogSpeakerIndex],a + cp HERO_BS_FLAG + jr z,.hero_bs + + cp HERO_HAIKU_FLAG + jr z,.hero_haiku + +.hero_ba + ld a,BANK(ba_bg) + ld hl,ba_bg + call LoadCinemaBG + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM hero_reasons_gtx + ld d,4 + LONGCALLNOARGS AnimateBA + jr .captainThanks + +.hero_bs + ld a,BANK(bs_bg) + ld hl,bs_bg + call LoadCinemaBG + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM hero_reasons_gtx + ld d,4 + LONGCALLNOARGS AnimateBS + jr .captainThanks + +.hero_haiku + ld a,BANK(haiku_bg) + ld hl,haiku_bg + call LoadCinemaBG + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM hero_reasons_gtx + LONGCALLNOARGS AnimateHaiku + +.captainThanks + call ((.loadCaptain-L1103_Load2)+levelCheckRAM) + + ld de,((.captainCake-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_thanks_gtx + ld d,4 + LONGCALLNOARGS AnimateCaptainAtWedding + +.captainCake + ld c,0 + DIALOGBOTTOM captain_cake_gtx + ld de,((.lady_byallmeans-L1103_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateCaptainAtWedding + +.lady_byallmeans + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + + ld a,BANK(flower_at_wedding_bg) + ld hl,flower_at_wedding_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM lady_byallmeans_gtx + + ld de,((.lady_radio-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateLadyAtWedding + +.lady_radio + ld c,0 + DIALOGBOTTOM lady_radio_gtx + ld de,((.minutesLater-L1103_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateLadyAtWedding + +.minutesLater + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + + ld a,BANK(gang_watches_front_bg) + ld hl,gang_watches_front_bg + call LoadCinemaBG + + ld de,((.preacherTakeBegonia-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld a,90 + call Delay + +.preacherTakeBegonia + ld hl,$0704 + call ((.loadGang-L1103_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM preacher_takebegonia_gtx + + ld de,((.gyro_bs-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,150 + call Delay + +.gyro_bs + call ((.gyroPopOut-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM gyro_bs_gtx + + ld de,((.takeCaptain-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,11 + call ((.animateGyroSprite-L1103_Load2)+levelCheckRAM) + +.takeCaptain + ld hl,$1400 + call ((.loadGang-L1103_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM preacher_takesack_gtx + + ld de,((.gyro_ba-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,150 + call Delay + +.gyro_ba + call ((.gyroPopOut-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM gyro_ba_gtx + + ld de,((.pronounce-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,11 + call ((.animateGyroSprite-L1103_Load2)+levelCheckRAM) + +.pronounce + ld hl,$1406 + call ((.loadGang-L1103_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM preacher_pronounce_gtx + + ld de,((.gyro_haiku-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,150 + call Delay + +.gyro_haiku + call ((.gyroPopOut-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM gyro_haiku_gtx + + ld de,((.married-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,11 + call ((.animateGyroSprite-L1103_Load2)+levelCheckRAM) + +.married + ld hl,$140c + call ((.loadGang-L1103_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM preacher_married_gtx + + ld de,((.notSoFast-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,150 + call Delay + +.notSoFast + call ((.setupGyroSpritesInOpen-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM gyro_notsofast_gtx + + ld de,((.captainWhyNot-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,5 + call ((.animateGyroSprite-L1103_Load2)+levelCheckRAM) + +.captainWhyNot + call ((.loadCaptain-L1103_Load2)+levelCheckRAM) + + ld de,((.because-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_why_gtx + ld d,2 + LONGCALLNOARGS AnimateCaptainAtWedding + +.because + call ((.setupGyroSpritesInOpen-L1103_Load2)+levelCheckRAM) + ld a,30 + call Delay + + call ((.shedCostume-L1103_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM gyro_reveals_gtx + + ld de,((.captainThankYou-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,11 + call ((.animateGyroSprite-L1103_Load2)+levelCheckRAM) + +.captainThankYou + call ((.loadCaptain-L1103_Load2)+levelCheckRAM) + + ld de,((.notYummy-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_thankyou_gtx + ld d,3 + LONGCALLNOARGS AnimateCaptainAtWedding + +.notYummy + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + + ld a,BANK(gyro_big_bg) + ld hl,gyro_big_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM gyro_notyummy_gtx + + ld de,((.recall-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateGyroAtWedding + +.recall + ld c,0 + DIALOGBOTTOM gyro_recall_gtx + + ld de,((.surrender-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateGyroAtWedding + +.surrender + ld c,0 + DIALOGBOTTOM gyro_surrender_gtx + + ld de,((.difficult-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateGyroAtWedding + +.difficult + ld c,0 + DIALOGBOTTOM gyro_difficult_gtx + + ld de,((.captainOkay-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateGyroAtWedding + +.captainOkay + call ((.loadCaptain-L1103_Load2)+levelCheckRAM) + + ld de,((.ladyDontBeSilly-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_okay_gtx + ld d,3 + LONGCALLNOARGS AnimateCaptainAtWedding + +.ladyDontBeSilly + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + + ld a,BANK(flower_at_wedding_bg) + ld hl,flower_at_wedding_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM lady_dontbesilly_gtx + + ld de,((.endCinema-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateLadyAtWedding + +.endCinema + + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + + ld hl,2400 ;captain flour + ld a,l + ld [hero0_class],a + ld a,h + ld [hero0_class+1],a + ld a,HERO_FLOUR_FLAG + ld [hero0_type],a + + ld hl,2398 ;haiku + ld a,l + ld [hero1_class],a + ld a,h + ld [hero1_class+1],a + ld a,HERO_FLOWER_FLAG + ld [hero1_type],a + + ld a,EXIT_S + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$0604 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.shedCostume + ld b,30 +.shedCostumeLoop + ;move sprites 12-29 3 pixels right and 1 down + ld c,18 + ld de,3 + ld hl,spriteOAMBuffer+12*4 +.shedCostumeSpriteLoop + inc [hl] + inc hl + inc [hl] + inc [hl] + inc [hl] + add hl,de + dec c + jr nz,.shedCostumeSpriteLoop + + ld a,1 + call Delay + dec b + jr nz,.shedCostumeLoop + ret + +.loadCaptain + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + call ResetSprites + + ld a,BANK(flour_at_wedding_bg) + ld hl,flour_at_wedding_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + ret + +.setupGyroSpritesInOpen + call ((.prepGyroSprites-L1103_Load2)+levelCheckRAM) + ld d,$4c + call ScrollSpritesRight + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + ret + +.animateGyroSprite + ;ld c,11 +.animateGyroSpriteLoop + ld b,8 + call ((.shiftSpritePatterns-L1103_Load2)+levelCheckRAM) + ld a,5 + call Delay + ld b,-8 + call ((.shiftSpritePatterns-L1103_Load2)+levelCheckRAM) + ld a,5 + call Delay + dec c + jr nz,.animateGyroSpriteLoop + + ld a,50 + call Delay + ret + +.shiftSpritePatterns + push bc + ld hl,spriteOAMBuffer+4*4+2 + ld de,4 + ld c,4 +.shiftSpriteLoop + ld a,[hl] + add b + ld [hl],a + add hl,de + dec c + jr nz,.shiftSpriteLoop + pop bc + ret + +.loadGang + push hl + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ClearDialog + call ResetSprites + + ld a,BANK(gang_watches_wedding_bg) + ld hl,gang_watches_wedding_bg + call LoadCinemaBG + pop hl + + ld bc,$0d06 + ld de,$0704 + call CinemaBlitRect + ret + +.gyroPopOut + call ((.prepGyroSprites-L1103_Load2)+levelCheckRAM) + + call ((.quickFromBlack-L1103_Load2)+levelCheckRAM) + + ld de,((.poppedOut-L1103_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,30 + call Delay + + ld c,48 +.popOutLoop + ld d,1 + call ScrollSpritesRight + ld a,2 + call Delay + dec c + jr nz,.popOutLoop + +.poppedOut + ld de,0 + call SetDialogForward + + ld a,[spriteOAMBuffer+1] ;1st sprite xpos should be $4c + cpl + add $4d + ld d,a + call ScrollSpritesRight + + ret + +.prepGyroSprites + call ((.quickToBlack-L1103_Load2)+levelCheckRAM) + call ResetSprites + ld a,BANK(gyro_tree_bg) + ld hl,gyro_tree_bg + call LoadCinemaBG + + ld a,BANK(gyro_costume_sp) + ld hl,gyro_costume_sp + call LoadCinemaSprite + + ;kill sprites 8-11 (alternate mouth) + ld hl,spriteOAMBuffer + 4 * 8 + xor a + ld de,3 + ld c,4 +.kill8to11 + ld [hl+],a ;sprite 8 y pos to zero + add hl,de + dec c + jr nz,.kill8to11 + + ;move sprites 12-29 40 pixels up and 8 pixels left + ld c,18 +.scootCostume + ld a,[hl] + sub 40 + ld [hl+],a + ld a,[hl] + sub 8 + ld [hl],a + add hl,de + dec c + jr nz,.scootCostume + + ld d,20 + call ScrollSpritesRight + ld d,40 + call ScrollSpritesDown + + ;set the priority of all sprites to appear behind BG + ld hl,spriteOAMBuffer + 3 + ld de,3 + ld c,40 +.setPriorityLoop + ld a,[hl] + or %10000000 + ld [hl+],a + add hl,de + dec c + jr nz,.setPriorityLoop + + ret + + +.quickToBlack + call BlackoutPalette + call ClearDialog + jp ResetSprites + +.quickFromBlack + ld a,1 + jp SetupFadeFromBlack + +L1103_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1103_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1103_Init: + DW ((L1103_InitFinished - L1103_Init2)) ;size +L1103_Init2: + ret + +L1103_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1103_Check: + DW ((L1103_CheckFinished - L1103_Check2)) ;size +L1103_Check2: + ret + +L1103_CheckFinished: +PRINTT "1103 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1103_LoadFinished - L1103_Load2) +PRINTT " / " +PRINTV (L1103_InitFinished - L1103_Init2) +PRINTT " / " +PRINTV (L1103_CheckFinished - L1103_Check2) +PRINTT "\n" + diff --git a/Source/l1104.asm b/Source/l1104.asm new file mode 100644 index 0000000..3fb52c8 --- /dev/null +++ b/Source/l1104.asm @@ -0,0 +1,528 @@ +; l1104.asm To Space Station Apocalypse +; Generated 04.22.2001 by mlevel +; Modified 04.22.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_TAKEOFFPOS EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level1104Gfx1",ROMX +;--------------------------------------------------------------------- +appx_takeoff_bg: + INCBIN "../fgbpix/ending/appx_takeoff.bg" + +station_tactical_bg:: + INCBIN "../fgbpix/ending/station_tactical.bg" + +;--------------------------------------------------------------------- +SECTION "Level1104Gfx2",ROMX +;--------------------------------------------------------------------- +small_station_approach_bg: + INCBIN "../fgbpix/ending/small_station_approach.bg" + +big_station_approach_bg: + INCBIN "../fgbpix/ending/big_station_approach.bg" + +;--------------------------------------------------------------------- +SECTION "Level1104Gfx3",ROMX +;--------------------------------------------------------------------- +appx_takeoff_sprites_sp: + INCBIN "../fgbpix/ending/appx_takeoff_sprites.sp" + +station_tactical_sprites_sp: + INCBIN "../fgbpix/ending/station_tactical_sprites.sp" + +small_station_sprites_sp: + INCBIN "../fgbpix/ending/small_station_sprites.sp" + +big_station_sprites_sp: + INCBIN "../fgbpix/ending/big_station_sprites.sp" + + +;--------------------------------------------------------------------- +SECTION "Level1104Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l1104_whereisgyro_gtx: + INCBIN "Data/Dialog/apocalypse/l1104_whereisgyro.gtx" + +l1104_station_gtx: + INCBIN "Data/Dialog/apocalypse/l1104_station.gtx" + +l1104_apocalypse_gtx: + INCBIN "Data/Dialog/apocalypse/l1104_apocalypse.gtx" + +l1104_letsgo_gtx: + INCBIN "Data/Dialog/apocalypse/l1104_letsgo.gtx" + + +L1104_Contents:: + DW L1104_Load + DW L1104_Init + DW L1104_Check + DW L1104_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1104_Load: + DW ((L1104_LoadFinished - L1104_Load2)) ;size +L1104_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,EXIT_D + ld hl,$1104 + call YankRemotePlayer + + ld a,BANK(intro_cinema_gbm) + ld hl,intro_cinema_gbm + call InitMusic + + ld a,$b7 + ld [appomattoxMapIndex],a + + xor a + ld [levelVars+VAR_TAKEOFFPOS],a + + ;set fg tile map for first three chars to allow characters in + ;dialog + ld a,TILEINDEXBANK + ldio [$ff70],a + ld a,$ff + ld hl,$d701 + ld [hl+],a + inc a + ld [hl+],a + inc a + ld [hl+],a + ld hl,$dd01 ;fg attributes + ld [hl],2 ;red + inc hl + ld [hl],3 ;blue + inc hl + ld [hl],4 ;green + + ld de,((.endCinema-L1104_Load2)+levelCheckRAM) + call SetDialogSkip + + ld a,BANK(appx_takeoff_bg) + ld hl,appx_takeoff_bg + call LoadCinemaBG + + ld a,BANK(appx_takeoff_sprites_sp) + ld hl,appx_takeoff_sprites_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + ld de,((.bs1-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + + ld a,15 + call SetupFadeFromStandard + + ld c,3 + DIALOGBOTTOM l1104_whereisgyro_gtx + + ld a,150 + call Delay + +.bs1 + ld de,((.bs2-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,2 + DIALOGBOTTOM l1104_station_gtx + + ld a,150 + call Delay + +.bs2 + call ((.quickToBlack-L1104_Load2)+levelCheckRAM) + + ld a,BANK(station_tactical_bg) + ld hl,station_tactical_bg + call LoadCinemaBG + + ld a,BANK(station_tactical_sprites_sp) + ld hl,station_tactical_sprites_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + call ((.quickFromBlack-L1104_Load2)+levelCheckRAM) + + ld de,((.ba-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + + ld c,2 + DIALOGBOTTOM l1104_apocalypse_gtx + + ;blink station id + ld c,15 + +.blink + ld a,10 + call Delay + + push bc + ld b,128 + ld c,10 + call ((.addSpriteYPos-L1104_Load2)+levelCheckRAM) + pop bc + + dec c + jr nz,.blink + +.ba + call ((.quickToBlack-L1104_Load2)+levelCheckRAM) + + ld a,BANK(appx_takeoff_bg) + ld hl,appx_takeoff_bg + call LoadCinemaBG + + ld a,BANK(appx_takeoff_sprites_sp) + ld hl,appx_takeoff_sprites_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + ld de,((.flyAway-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + call ((.quickFromBlack-L1104_Load2)+levelCheckRAM) + + ld c,1 + DIALOGBOTTOM l1104_letsgo_gtx + + ld a,75 + call Delay + + ld b,24 + call ((.setAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + + ld a,75 + call Delay + +.flyAway + call ClearDialog + + ld b,24 + call ((.setAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + + ld de,((.approachSmall-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,30 +.takeOff + push af + call ((.takeOffUpdate-L1104_Load2)+levelCheckRAM) + pop af + dec a + jr nz,.takeOff + + ;retract landing gear + ld b,48 + call ((.setAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + + ld a,10 +.takeOff2 + push af + call ((.takeOffUpdate-L1104_Load2)+levelCheckRAM) + pop af + dec a + jr nz,.takeOff2 + + ld a,35 +.takeOff3 + push af + call ((.takeOffUpdate-L1104_Load2)+levelCheckRAM) + call ((.takeOffUpdateX-L1104_Load2)+levelCheckRAM) + pop af + dec a + jr nz,.takeOff3 + +.approachSmall + call ((.quickToBlack-L1104_Load2)+levelCheckRAM) + + ld a,BANK(small_station_approach_bg) + ld hl,small_station_approach_bg + call LoadCinemaBG + + ld a,BANK(small_station_sprites_sp) + ld hl,small_station_sprites_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + call ((.quickFromBlack-L1104_Load2)+levelCheckRAM) + + ld de,((.approachBig-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,75 +.approachSmallLoop + push af + call ((.updateSmallApproach-L1104_Load2)+levelCheckRAM) + pop af + dec a + jr nz,.approachSmallLoop + + ld a,30 +.approachSmallLoop2 + push af + call ((.updateSmallApproachNoThrust-L1104_Load2)+levelCheckRAM) + pop af + dec a + jr nz,.approachSmallLoop2 + +.approachBig + call ((.quickToBlack-L1104_Load2)+levelCheckRAM) + + ld a,BANK(big_station_approach_bg) + ld hl,big_station_approach_bg + call LoadCinemaBG + + ld a,BANK(big_station_sprites_sp) + ld hl,big_station_sprites_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + call ((.quickFromBlack-L1104_Load2)+levelCheckRAM) + + ld de,((.endCinema-L1104_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,20 +.approachBigLoop + push af + call ((.updateBigApproach-L1104_Load2)+levelCheckRAM) + pop af + dec a + jr nz,.approachBigLoop + + ld a,60 + call Delay + +.endCinema + ld a,15 + call SetupFadeToStandard + call WaitFade + ;call ((.quickToBlack-L1104_Load2)+levelCheckRAM) + call ClearDialogSkipForward + + ld a,EXIT_U + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + ld a,29 + ld [hero0_enterLevelLocation],a + ld [hero1_enterLevelLocation],a + ld a,59 + ld [hero0_enterLevelLocation+1],a + ld [hero1_enterLevelLocation+1],a + + ld hl,$1100 + call SetJoinMap + call SetRespawnMap + + ld hl,$0711 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.updateBigApproach + ld a,3 + call Delay + + ld b,$ff + ld c,5 + call ((.addSpriteYPos-L1104_Load2)+levelCheckRAM) + ld b,$ff + ld c,5 + call ((.addSpriteXPos-L1104_Load2)+levelCheckRAM) + ret + +.updateSmallApproach + ld a,1 + call Delay + + ld b,10 + call ((.setLittleAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + + ld a,1 + call Delay + + ld b,6 + call ((.setLittleAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + + ld hl,spriteOAMBuffer+3*4+1 ;x pos + inc [hl] + ld hl,spriteOAMBuffer+4*4+1 ;x pos + inc [hl] + ret + +.updateSmallApproachNoThrust + ld a,2 + call Delay + + ld hl,spriteOAMBuffer+3*4+1 ;x pos + inc [hl] + ld hl,spriteOAMBuffer+4*4+1 ;x pos + inc [hl] + ret + +.takeOffUpdateX + ;ld a,[levelVars+VAR_TAKEOFFPOS] + ;cp 128 + ;jr c,.thrustSet + ;xor a +;.thrustSet + ld b,2 + ld c,12 + call ((.addSpriteXPos-L1104_Load2)+levelCheckRAM) + + ldio a,[updateTimer] + and %10 + jr z,.thrustOff + + ld b,72 + call ((.setAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + ret + +.thrustOff + ld b,48 + call ((.setAppxSpriteFrame-L1104_Load2)+levelCheckRAM) + ret + +.takeOffUpdate + ld a,2 + call Delay + + ld hl,levelVars+VAR_TAKEOFFPOS + ld a,[hl] + inc [hl] + ;and 63 + ld hl,((.shipSineTable-L1104_Load2)+levelCheckRAM) + call Lookup8 + dec a + ld b,a + ld c,12 + call ((.addSpriteYPos-L1104_Load2)+levelCheckRAM) + ret + +.addSpriteXPos + ld hl,spriteOAMBuffer+1 + jr .addSpritePos + +.addSpriteYPos + ;add b to ypos of all c sprites + ld hl,spriteOAMBuffer +.addSpritePos + ld de,4 +.add128Loop + ld a,[hl] + add b + ld [hl],a + add hl,de + dec c + jr nz,.add128Loop + ret + +.setLittleAppxSpriteFrame + ld hl,spriteOAMBuffer+3*4+2 + ld [hl],b + inc b + inc b + ld hl,spriteOAMBuffer+4*4+2 + ld [hl],b + ret + +.setAppxSpriteFrame + ld hl,spriteOAMBuffer+2 + ld de,4 + ld c,12 +.setAppxSpriteFrameLoop + ld [hl],b + add hl,de + inc b + inc b + dec c + jr nz,.setAppxSpriteFrameLoop + ret + +.quickToBlack + call ClearDialog + call ResetSprites + ld a,1 + call SetupFadeToBlack + call WaitFade + ret + +.quickFromBlack + ld a,1 + call SetupFadeFromBlack + call WaitFade + ret + +.shipSineTable + ;DB $ff,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 + ;DB 0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0 + ;DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$ff + ;DB 0,0,$ff,0,0,$ff,0,0,$ff,0,$ff,0,0,$ff,0,0 + DB 0, 0, 0, 0, 0, 0, -1, -1, -2, -2, -3 + DB -3, -3, -3, -2, -2, -2, -1, -1 + DB 0, 0, 0, 1, 1, 1, 2, 2 + DB 2, 3, 3, 3, 3, 3, 3, 3 + DB 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0 + DB 0, -1, -1, -2, -2, -2, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4 + DB -4, -4, -4, -4, -4, -4, -4, -4 + +L1104_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1104_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1104_Init: + DW ((L1104_InitFinished - L1104_Init2)) ;size +L1104_Init2: + ret + +L1104_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1104_Check: + DW ((L1104_CheckFinished - L1104_Check2)) ;size +L1104_Check2: + ret + +L1104_CheckFinished: +PRINTT "1104 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1104_LoadFinished - L1104_Load2) +PRINTT " / " +PRINTV (L1104_InitFinished - L1104_Init2) +PRINTT " / " +PRINTV (L1104_CheckFinished - L1104_Check2) +PRINTT "\n" + diff --git a/Source/l1105.asm b/Source/l1105.asm new file mode 100644 index 0000000..88ba42a --- /dev/null +++ b/Source/l1105.asm @@ -0,0 +1,260 @@ +; l1105.asm Save game screen +; Generated 05.09.2001 by mlevel +; Modified 05.09.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_SELECTION EQU 0 + +;--------------------------------------------------------------------- +SECTION "Level1105Gfx1",ROMX +;--------------------------------------------------------------------- +savegame_bg: + INCBIN "../fgbpix/appomattox/savegame.bg" + +cantsave_bg: + INCBIN "../fgbpix/appomattox/cantsave.bg" + +;--------------------------------------------------------------------- +SECTION "Level1105Gfx2",ROMX +;--------------------------------------------------------------------- +cantsave_flying_bg: + INCBIN "../fgbpix/appomattox/cantsave_flying.bg" + +;--------------------------------------------------------------------- +SECTION "Level1105Section",ROMX +;--------------------------------------------------------------------- + +L1105_Contents:: + DW L1105_Load + DW L1105_Init + DW L1105_Check + DW L1105_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1105_Load: + DW ((L1105_LoadFinished - L1105_Load2)) ;size +L1105_Load2: + ld a,[amLinkMaster] + or a + jp z,((.amSlave-L1105_Load2)+levelCheckRAM) + + ld a,[appomattoxMapIndex] + or a + jp z,((.amFlying-L1105_Load2)+levelCheckRAM) + + ld a,BANK(savegame_bg) + ld hl,savegame_bg + call LoadCinemaBG + + ld a,15 + call SetupFadeFromStandard + call WaitFade + + xor a + ld [levelVars+VAR_SELECTION],a +.waitSelection + call ((.blitCurSelection-L1105_Load2)+levelCheckRAM) + + ld a,1 + call Delay + + ld a,[myJoy] + bit JOY_UP_BIT,a + jr z,.checkDown + + xor a + ld [levelVars+VAR_SELECTION],a + jr .checkDone + +.checkDown + bit JOY_DOWN_BIT,a + jr z,.checkDone + + ld a,1 + ld [levelVars+VAR_SELECTION],a + +.checkDone + ld a,[myJoy] + bit JOY_A_BIT,a + jr z,.waitSelection + + ld a,[levelVars+VAR_SELECTION] + or a + call z,((.saveGame-L1105_Load2)+levelCheckRAM) + + ld a,15 + call SetupFadeToStandard + call WaitFade + + ld a,EXIT_S + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.saveGame + ld a,$0a ;enable save ram access + ld [0],a + + ld hl,$a000 ;start of save area $a000-$bfff + ld de,gameState + ld bc,9 + xor a + call ((.saveData-L1105_Load2)+levelCheckRAM) + + ld de,inventory + ld bc,16 + xor a + call ((.saveData-L1105_Load2)+levelCheckRAM) + + ld de,levelState + ld bc,256 + ld a,LEVELSTATEBANK + call ((.saveData-L1105_Load2)+levelCheckRAM) + + ld de,flightCode + ld bc,256 + ld a,FLIGHTCODEBANK + call ((.saveData-L1105_Load2)+levelCheckRAM) + + xor a + ld [0],a ;disable save ram to prevent false writes on powerdown + + ;blit "saved" + ld bc,$0a06 + ld de,$0509 + ld hl,$1412 + call CinemaBlitRect + ld a,15 + call Delay + ret + +.saveData + ;copies "bc" # of bytes from [de] to [hl] in bank "a" + ldio [$ff70],a +.saveLoop + ld a,[de] + inc de + ld [hl+],a + dec bc + xor a + cp b + jr nz,.saveLoop + cp c + jr nz,.saveLoop + ret + +.blitCurSelection + ldio a,[updateTimer] + and %1000 + jr z,.blitAppropriateCursor + + ;blit empty space + ld bc,$0a06 + ld de,$0509 + ld hl,$1400 + call CinemaBlitRect + ret + +.blitAppropriateCursor + ld a,[levelVars+VAR_SELECTION] ;selection * 6 + 6 + rlca + ld b,a + rlca + add b + add 6 + ld l,a + ld h,$14 + ld bc,$0a06 + ld de,$0509 + call CinemaBlitRect + ret + +.amFlying + ld a,BANK(cantsave_flying_bg) + ld hl,cantsave_flying_bg + call LoadCinemaBG + jr .showReason + +.amSlave + ld a,BANK(cantsave_bg) + ld hl,cantsave_bg + call LoadCinemaBG + +.showReason + ld a,15 + call SetupFadeFromStandard + call WaitFade + + ld de,((.returnToShip-L1105_Load2)+levelCheckRAM) + call SetDialogForward + call SetDialogSkip + + ld a,150 + call Delay + +.returnToShip + call ClearDialogSkipForward + + ld a,15 + call SetupFadeToStandard + call WaitFade + + ld a,EXIT_S + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +L1105_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1105_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1105_Init: + DW ((L1105_InitFinished - L1105_Init2)) ;size +L1105_Init2: + ret + +L1105_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1105_Check: + DW ((L1105_CheckFinished - L1105_Check2)) ;size +L1105_Check2: + ret + +L1105_CheckFinished: +PRINTT "1105 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1105_LoadFinished - L1105_Load2) +PRINTT " / " +PRINTV (L1105_InitFinished - L1105_Init2) +PRINTT " / " +PRINTV (L1105_CheckFinished - L1105_Check2) +PRINTT "\n" + diff --git a/Source/l1111.asm b/Source/l1111.asm new file mode 100644 index 0000000..b8f8684 --- /dev/null +++ b/Source/l1111.asm @@ -0,0 +1,173 @@ +; l1111.asm ssa se hulk module +; Generated 04.26.2001 by mlevel +; Modified 04.26.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_DEFUSED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level1111Section",ROMX +;--------------------------------------------------------------------- + +L1111_Contents:: + DW L1111_Load + DW L1111_Init + DW L1111_Check + DW L1111_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1111_Load: + DW ((L1111_LoadFinished - L1111_Load2)) ;size +L1111_Load2: + call ParseMap + ret + +L1111_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1111_Map: +INCBIN "Data/Levels/l1111_ssa_se.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1111_Init: + DW ((L1111_InitFinished - L1111_Init2)) ;size +L1111_Init2: + ld a,BANK(l0012_defused_gtx) + ld [dialogBank],a + call SetPressBDialog + + ldio a,[mapState] + cp STATE_DEFUSED + jr nz,.afterRemoveBomb + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d072 + ld [hl+],a + ld [hl],a + ld hl,$d092 + ld [hl+],a + ld [hl],a + +.afterRemoveBomb + ret + +L1111_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1111_Check: + DW ((L1111_CheckFinished - L1111_Check2)) ;size +L1111_Check2: + call ((.checkAtBomb-L1111_Check2)+levelCheckRAM) + ret + +.checkAtBomb + ldio a,[mapState] + cp STATE_DEFUSED + ret z + + ld hl,((.checkHeroAtBomb-L1111_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroAtBomb + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.atBomb + + xor a + ret + +.atBomb + ld a,STATE_DEFUSED + ldio [mapState],a + + call UpdateState + + ;remove bomb + ld a,MAPBANK + ldio [$ff70],a + xor a + ld hl,$d072 + ld [hl+],a + ld [hl],a + ld hl,$d092 + ld [hl+],a + ld [hl],a + + ;check all defused + ld d,0 + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$b8] + cp 2 + jr nz,.check2 + inc d +.check2 + ld a,[levelState+$b9] + cp 2 + jr nz,.check3 + inc d +.check3 + ld a,[levelState+$ba] + cp 2 + jr nz,.check4 + inc d +.check4 + ld a,[levelState+$bb] + cp 2 + jr nz,.checkTotal + inc d +.checkTotal + ;if 3 bombs were defused before this one then that's all + ld a,d + cp 3 + jr nz,.bombsRemain + + ld hl,l0012_alldefused_gtx + jr .dialog + +.bombsRemain + ld hl,l0012_defused_gtx + +.dialog + call MakeIdle + ld de,((.afterDialog-L1111_Check2)+levelCheckRAM) + call SetDialogSkip + + ld d,h + ld e,l + + call SetSpeakerFromHeroIndex + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ret + +L1111_CheckFinished: +PRINTT "1111 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1111_LoadFinished - L1111_Load2) +PRINTT " / " +PRINTV (L1111_InitFinished - L1111_Init2) +PRINTT " / " +PRINTV (L1111_CheckFinished - L1111_Check2) +PRINTT "\n" + diff --git a/Source/l1112.asm b/Source/l1112.asm new file mode 100644 index 0000000..a0de58d --- /dev/null +++ b/Source/l1112.asm @@ -0,0 +1,325 @@ +; l1112.asm duke's disco +; Generated 04.10.2001 by mlevel +; Modified 04.10.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +DISCOBALL_INDEX EQU 29 +REDDANCER_INDEX EQU 45 +BLUEDANCER_INDEX EQU 47 +REDDANCER_2X1_INDEX EQU 49 +BLUEDANCER_2X1_INDEX EQU 53 +REDDANCER_1X2_INDEX EQU 57 +BLUEDANCER_1X2_INDEX EQU 61 + +REDOBJ_INDEX EQU 65 +BLUEOBJ_INDEX EQU 66 +ORANGEOBJ_INDEX EQU 67 + +VAR_LIGHTFRAME EQU 0 +VAR_BGKILLED EQU 15 + +STATE_NORMAL EQU 1 +STATE_AVERTED EQU 2 + + +;--------------------------------------------------------------------- +SECTION "Level1112Gfx1",ROMX +;--------------------------------------------------------------------- +success_bg: + INCBIN "../fgbpix/disco/success.bg" + +party_over_bg: + INCBIN "../fgbpix/disco/party_over.bg" + +;--------------------------------------------------------------------- +SECTION "Level1112Section",ROMX +;--------------------------------------------------------------------- + +L1112_Contents:: + DW L1112_Load + DW L1112_Init + DW L1112_Check + DW L1112_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1112_Load: + DW ((L1112_LoadFinished - L1112_Load2)) ;size +L1112_Load2: + call ParseMap + ret + +L1112_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1112_Map: +INCBIN "Data/Levels/l1112_disco.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1112_Init: + DW ((L1112_InitFinished - L1112_Init2)) ;size +L1112_Init2: + ;change palette 7's BG color to black + ld a,FADEBANK + ldio [$ff70],a + ld hl,gamePalette+8*7 + xor a + ld [hl+],a + ld [hl+],a + + xor a + ld [levelVars+VAR_LIGHTFRAME],a + ld [levelVars+VAR_BGKILLED],a + + ld a,ENV_DISCO + ld [envEffectType],a + + call State0To1 + ret + +L1112_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1112_Check: + DW ((L1112_CheckFinished - L1112_Check2)) ;size +L1112_Check2: + call ((.animateBG-L1112_Check2)+levelCheckRAM) + call ((.checkPartyOver-L1112_Check2)+levelCheckRAM) + ret + +.checkPartyOver + ld c,REDOBJ_INDEX + call GetNumObjects + cp 8 + jr nz,.partyOver + + ld c,BLUEOBJ_INDEX + call GetNumObjects + cp 12 + jr nz,.partyOver + + ld a,[levelVars+VAR_BGKILLED] + or a + jr nz,.partyOver + + ld c,ORANGEOBJ_INDEX + call GetNumObjects + or a + ret nz + + ;success + ld a,STATE_AVERTED + ldio [mapState],a + + ;we leave on a cinema so need to update state manually + call UpdateState + + ;yank player even if he's on the homeworld already + ld a,(EXIT_W | 8) + ld hl,$0912 + call YankRemotePlayer + + ld a,30 + call Delay + + ld a,15 + call SetupFadeToBlack + call WaitFade + call ResetSprites + + ld a,BANK(success_bg) + ld hl,success_bg + call LoadCinemaBG + jr .exitDisco + +.partyOver + ld a,30 + call Delay + + ld a,15 + call SetupFadeToBlack + call WaitFade + call ResetSprites + + ld a,BANK(party_over_bg) + ld hl,party_over_bg + call LoadCinemaBG + +.exitDisco + xor a + ld [envEffectType],a + + ld a,15 + call SetupFadeFromBlack + call WaitFade + + ld c,90 +.waitInputLoop + ld a,1 + call Delay + ld a,[myJoy] + and %11110000 + jr nz,.continueExit + dec c + jr nz,.waitInputLoop + +.continueExit + call BlackoutPalette + + ld a,EXIT_W + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$0912 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.animateBG + ld a,TILEINDEXBANK + ld [$ff70],a + + call ((.animateDiscoBall-L1112_Check2)+levelCheckRAM) + call ((.animateDancer1-L1112_Check2)+levelCheckRAM) + call ((.animateDancer2-L1112_Check2)+levelCheckRAM) + call ((.animateDancer3-L1112_Check2)+levelCheckRAM) + call ((.animateDancer4-L1112_Check2)+levelCheckRAM) + call ((.animateDancer5-L1112_Check2)+levelCheckRAM) + call ((.animateDancer6-L1112_Check2)+levelCheckRAM) + ret + +.animateDiscoBall + ldio a,[updateTimer] + and %11 + ret nz + + ld hl,bgTileMap+DISCOBALL_INDEX + ld b,DISCOBALL_INDEX + call ((.incDiscoFrame-L1112_Check2)+levelCheckRAM) + call ((.incDiscoFrame-L1112_Check2)+levelCheckRAM) + call ((.incDiscoFrame-L1112_Check2)+levelCheckRAM) + call ((.incDiscoFrame-L1112_Check2)+levelCheckRAM) + + ld hl,levelVars+VAR_LIGHTFRAME + ld a,[hl] + inc a + and 7 + ld [hl],a + ret + +.incDiscoFrame + ld a,[hl] + sub b + add 4 + and %1100 + add b + ld [hl+],a + inc b + ret + +.animateDancer1 + ldio a,[updateTimer] + and %111 + ret nz + + ld hl,bgTileMap+REDDANCER_INDEX + ld b,REDDANCER_INDEX + call ((.inc1-L1112_Check2)+levelCheckRAM) + ret +.animateDancer2 + ldio a,[updateTimer] + inc a + and %11 + ret nz + + ld hl,bgTileMap+BLUEDANCER_INDEX + ld b,BLUEDANCER_INDEX + call ((.inc1-L1112_Check2)+levelCheckRAM) + ret + +.animateDancer3 + ldio a,[updateTimer] + and %111 + ret nz + + ld hl,bgTileMap+REDDANCER_2X1_INDEX + ld b,REDDANCER_2X1_INDEX + call ((.inc2-L1112_Check2)+levelCheckRAM) + call ((.inc2-L1112_Check2)+levelCheckRAM) + ret + +.animateDancer4 + ldio a,[updateTimer] + inc a + and %11 + ret nz + + ld hl,bgTileMap+BLUEDANCER_2X1_INDEX + ld b,BLUEDANCER_2X1_INDEX + call ((.inc2-L1112_Check2)+levelCheckRAM) + call ((.inc2-L1112_Check2)+levelCheckRAM) + ret + +.animateDancer5 + ldio a,[updateTimer] + add 3 + and %11 + ret nz + + ld hl,bgTileMap+REDDANCER_1X2_INDEX + ld b,REDDANCER_1X2_INDEX + call ((.inc2-L1112_Check2)+levelCheckRAM) + call ((.inc2-L1112_Check2)+levelCheckRAM) + ret + +.animateDancer6 + ldio a,[updateTimer] + add 3 + and %11 + ret nz + + ld hl,bgTileMap+BLUEDANCER_1X2_INDEX + ld b,BLUEDANCER_1X2_INDEX + call ((.inc2-L1112_Check2)+levelCheckRAM) + call ((.inc2-L1112_Check2)+levelCheckRAM) + ret + +.inc1 + ld a,[hl] + sub b + inc a + and %1 + add b + ld [hl+],a + ret + +.inc2 + ld a,[hl] + sub b + add 2 + and %10 + add b + ld [hl+],a + inc b + ret + +L1112_CheckFinished: +PRINTT "1112 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1112_LoadFinished - L1112_Load2) +PRINTT " / " +PRINTV (L1112_InitFinished - L1112_Init2) +PRINTT " / " +PRINTV (L1112_CheckFinished - L1112_Check2) +PRINTT "\n" + diff --git a/Source/l1200.asm b/Source/l1200.asm new file mode 100644 index 0000000..6940746 --- /dev/null +++ b/Source/l1200.asm @@ -0,0 +1,745 @@ +;level1200 logo cinema +;Abe Pralle 5.2.2000 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/gfx.inc" + +TEMPKLUDGE EQU 50 + +;--------------------------------------------------------------------- +SECTION "L1200DataSection",ROMX +;--------------------------------------------------------------------- +logo160_bg: + INCBIN "../fgbpix/logo/logo160.bg" + +presents_bg: + INCBIN "../fgbpix/logo/presents.bg" + +fgbtitle_bg: + INCBIN "../fgbpix/logo/fgbtitle.bg" + +;--------------------------------------------------------------------- +SECTION "L1200DataSection2",ROMX +;--------------------------------------------------------------------- +kiwi1_bg:: + INCBIN "../fgbpix/intro/kiwi1.bg" + +kiwi2_bg:: + INCBIN "../fgbpix/intro/kiwi2.bg" + +kiwi3_bg:: + INCBIN "../fgbpix/intro/kiwi3.bg" + +landing_bg_bg:: + INCBIN "../fgbpix/intro/landing_bg.bg" + +landing_sprites_sp:: + INCBIN "../fgbpix/intro/landing_sprites.sp" + +;--------------------------------------------------------------------- +SECTION "L1200DataSection3",ROMX +;--------------------------------------------------------------------- +titlesprite_sp: + INCBIN "../fgbpix/logo/titlesprite.sp" + +ocloud0_bg: + INCBIN "../fgbpix/logo/ocloud0.bg" + +ocloud1_bg: + INCBIN "../fgbpix/logo/ocloud1.bg" + +;--------------------------------------------------------------------- +SECTION "L1200DataSection4",ROMX +;--------------------------------------------------------------------- +ocloud2_bg: + INCBIN "../fgbpix/logo/ocloud2.bg" + +ocloud3_bg: + INCBIN "../fgbpix/logo/ocloud3.bg" + + +;--------------------------------------------------------------------- +SECTION "L1200DataSection5",ROMX +;--------------------------------------------------------------------- +ocloud4_bg: + INCBIN "../fgbpix/logo/ocloud4.bg" + +ocloud5_bg: + INCBIN "../fgbpix/logo/ocloud5.bg" + + +;--------------------------------------------------------------------- +SECTION "L1200DataSection6",ROMX +;--------------------------------------------------------------------- +ocloud6_bg: + INCBIN "../fgbpix/logo/ocloud6.bg" + +ocloud7_bg: + INCBIN "../fgbpix/logo/ocloud7.bg" + + +;--------------------------------------------------------------------- +SECTION "L1200DataSection7",ROMX +;--------------------------------------------------------------------- +ocloud8_bg: + INCBIN "../fgbpix/logo/ocloud8.bg" + +ocloud9_bg: + INCBIN "../fgbpix/logo/ocloud9.bg" + + +;--------------------------------------------------------------------- +SECTION "L1200DataSection8",ROMX +;--------------------------------------------------------------------- +oclouda_bg: + INCBIN "../fgbpix/logo/oclouda.bg" + +ocloudb_bg: + INCBIN "../fgbpix/logo/ocloudb.bg" + + +;--------------------------------------------------------------------- +SECTION "L1200DataSection9",ROMX +;--------------------------------------------------------------------- +ocloudc_bg: + INCBIN "../fgbpix/logo/ocloudc.bg" + +ocloudd_bg: + INCBIN "../fgbpix/logo/ocloudd.bg" + + +;--------------------------------------------------------------------- +SECTION "L1200DataSection10",ROMX +;--------------------------------------------------------------------- +ocloude_bg: + INCBIN "../fgbpix/logo/ocloude.bg" + +ocloudf_bg: + INCBIN "../fgbpix/logo/ocloudf.bg" + +;--------------------------------------------------------------------- +SECTION "L1200CodeSection",ROMX +;--------------------------------------------------------------------- +L1200_Contents:: + DW L1200_Load + DW L1200_Init + DW L1200_Check + DW L1200_Map + +;--------------------------------------------------------------------- +; demo intro +;--------------------------------------------------------------------- +L1200_Load: + DW ((L1200_LoadFinished - L1200_Load)-2) ;size +L1200_Load2: + ;----------------plasmaworks logo---------------------- + ld a,BANK(logo160_bg) + ld hl,logo160_bg + call LoadCinemaBG + + ld a,1 + call Delay + + ld a,BANK(haiku_gbm) + ld hl,haiku_gbm + call InitMusic + + ld de,((.endLogoCinema-L1200_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.showPresents-L1200_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,16 + call SetupFadeFromWhite + call WaitFade + + ld a,30 + call Delay + + ;----------------presents------------------------------ +.showPresents + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld a,BANK(presents_bg) + ld hl,presents_bg + call LoadCinemaBG + + ld de,((.showTitle-L1200_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + ld a,27 + call Delay + + ;----------------fgb title----------------------------- +.showTitle + ld a,16 + call SetupFadeToStandard + call WaitFade + + ;ld a,BANK(fgbtitle_bg) + ;ld hl,fgbtitle_bg + ;call LoadCinemaBG + + ld a,BANK(ocloud0_bg) + ld hl,ocloud0_bg + call LoadCinemaBG + + ld a,BANK(titlesprite_sp) + ld hl,titlesprite_sp + call LoadCinemaSprite + ld a,1 + call Delay + + ld de,((.endLogoCinema-L1200_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + ld b,32 + ld c,1 +.cloudAnim + ;load next cloud frame + ld d,0 ;de = c*4 + ld e,c + sla e + rl d + sla e + rl d + ld hl,((.cloudFrames-L1200_Load2)+levelCheckRAM) + add hl,de + ld a,[hl+] ;mem bank of cloud frame + inc hl + push af + ld a,[hl+] + ld h,[hl] + ld l,a + pop af + call LoadCinemaBG + ;ld a,1 + ;call Delay + + ld a,c + inc a + and 15 + ld c,a + + dec b + jr nz,.cloudAnim + +.endLogoCinema + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld hl,$1101 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + ret + +IF 0 +.starfield + ;----------------star field----------------------------- + ld a,BANK(starfield_bg) + ld hl,starfield_bg + call LoadCinemaBG + + ld a,BANK(starfield_sprite_sp) + ld hl,starfield_sprite_sp + call LoadCinemaSprite + + ld a,FADEBANK + ld [$ff70],a + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + + ld d,48 + (TEMPKLUDGE/2) + call ScrollSpritesLeft + + ld d,48 + (TEMPKLUDGE/2) + call ScrollSpritesDown + + SETDIALOGSKIP(.afterIntro + (levelCheckRAM-L1200_Load2)) + + ;number of cycles total + ld b,180 + TEMPKLUDGE + 20 + +.loop + push bc + + call (.clearPaletteToBlack + (levelCheckRAM-L1200_Load2)) + call (.cycleColors + (levelCheckRAM-L1200_Load2)) + ld a,1 + ld [paletteBufferReady],a + + ld a,1 + call Delay + pop bc + + ld a,b + and %00000001 + jr nz,.afterScrollSprites + + ld d,1 + call ScrollSpritesUp + + ld d,1 + call ScrollSpritesRight + +.afterScrollSprites + ld a,b + and %00000010 + jr nz,.turnThrustOn + + call (.routine_thrustoff + (levelCheckRAM-L1200_Load2)) + jr .afterThrust + +.turnThrustOn + call (.routine_thruston + (levelCheckRAM-L1200_Load2)) + +.afterThrust + dec b + jr nz,.loop + + ld a,16 + call SetupFadeToStandard + call WaitFade + ld a,1 + call Delay + + ;----------------approach kiwi------------------------------- + ld a,BANK(kiwi1_bg) + ld hl,kiwi1_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + call (.animate_ship + (levelCheckRAM-L1200_Load2)) + + ld a,16 + call SetupFadeToBlackBGOnly + call WaitFade + + ;kiwi 2 + ld a,BANK(kiwi2_bg) + ld hl,kiwi2_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromBlackBGOnly + call WaitFade + + call (.animate_ship + (levelCheckRAM-L1200_Load2)) + + ld a,16 + call SetupFadeToBlackBGOnly + call WaitFade + + ;kiwi 3 + ld a,BANK(kiwi3_bg) + ld hl,kiwi3_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromBlackBGOnly + call WaitFade + + call (.animate_ship + (levelCheckRAM-L1200_Load2)) + + ld a,16 + call SetupFadeToBlack + call WaitFade + + ;----------------landing on kiwi----------------------- + call ResetSprites + ld a,BANK(landing_bg_bg) + ld hl,landing_bg_bg + call LoadCinemaBG + ld a,BANK(landing_sprites_sp) + ld hl,landing_sprites_sp + call LoadCinemaSprite + + ld d,16 + call ScrollSpritesRight + ld d,48 + call ScrollSpritesUp + + ;set landing gear sprites and flame to off + ld hl,spriteOAMBuffer+6 + ld c,8 + xor a +.init_landing_loop + ld [hl+],a + inc hl + inc hl + inc hl + dec c + jr nz,.init_landing_loop + + + SETDIALOGSKIP(.afterIntro + (levelCheckRAM-L1200_Load2)) + + ;----------------animate descent of appomattox + + ;landing gear stowed + ld a,16 + call SetupFadeFromBlack + ld b,45 +.descent1 + push bc + ld a,1 + call Delay + ld d,1 + call (.scrollDownAllSprites + (levelCheckRAM-L1200_Load2)) + pop bc + + dec b + jr nz,.descent1 + + ;landing gear half-out + ld hl,spriteOAMBuffer+(9*4)+2 + ld c,4 + ld a,2 +.gear_half_loop + ld [hl+],a ;change tile index + inc hl + inc hl + inc hl + add 2 + dec c + jr nz,.gear_half_loop + + ld b,5 +.descent2 + push bc + ld a,1 + call Delay + ld a,1 + call Delay + ld d,1 + call (.scrollDownAllSprites + (levelCheckRAM-L1200_Load2)) + pop bc + + dec b + jr nz,.descent2 + + ;landing gear full out + ld hl,spriteOAMBuffer+(9*4)+2 + ld c,4 + ld a,10 +.gear_full_loop + ld [hl+],a ;change tile index + inc hl + inc hl + inc hl + add 2 + dec c + jr nz,.gear_full_loop + + ld b,28 +.descent3 + push bc + ld a,1 + call Delay + ld a,1 + call Delay + ld d,1 + call (.scrollDownAllSprites + (levelCheckRAM-L1200_Load2)) + pop bc + + dec b + jr nz,.descent3 + + + ld a,16 + call SetupFadeToStandard + ld b,8 +.descent4 + push bc + ld a,1 + call Delay + ld a,1 + call Delay + ld a,1 + call Delay + ld d,1 + call (.scrollDownAllSprites + (levelCheckRAM-L1200_Load2)) + pop bc + + dec b + jr nz,.descent4 + + ;ld a,16 + ;call SetupFadeToWhite + call WaitFade + +.afterIntro + ld a,$05 + ld [curLevelIndex],a + ld a,$02 + ld [curLevelIndex+1],a + + ld a,1 + ld [timeToChangeLevel],a + + ret +ENDC + +.show_pic + ld a,16 + call SetupFadeFromStandard + call WaitFade + + ld a,48 + call Delay + + ret + +IF 0 +.routine_thrustoff + ;turn thrust off by setting sprites 0-5 to pattern 50 + ld hl,spriteOAMBuffer+2 + ld de,4 + ld a,50 + ld c,6 +.thrustOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.thrustOffLoop + ret + +.routine_thruston + ;turn thrust on by setting sprites 0-5 to patterns 0,2,4,6,8,10 + ld hl,spriteOAMBuffer+2 + ld de,4 + xor a + ld c,6 +.thrustOnLoop + ld [hl],a + inc a + inc a + add hl,de + dec c + jr nz,.thrustOnLoop + ret + +.clearPaletteToBlack + push bc + ld c,64 + ld hl,fadeCurPalette + xor a +.clearPaletteLoop + ld [hl+],a + dec c + jr nz,.clearPaletteLoop + pop bc + ret + +.cycleColors + ;b is current cycle + ;set palettes 1,5, & 7 to cycle half-speed (1/8 speed of b) + ;rest to cycle full speed (1/4 speed of b) + push bc + + ;----------set full-speed palettes (0,2,3,4,6)------------ + ;color = (clock % 6) / 2 + ld c,6 + ld a,b +.getMod6 + cp c + jr c,.gotMod6 + sub c + jr .getMod6 +.gotMod6 + srl a ;divided by 2 yields 0-2 + ld c,a + inc c ;c is now 1-3 + + push bc + ld b,0 + xor a + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;0 + inc a + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;2 + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;3 + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;4 + inc a + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;6 + pop bc + + ;----------set half-speed palettes (1,5,7)--------------- + ;color = (clock % 12) / 4 + ld c,12 + ld a,b +.getMod12 + cp c + jr c,.gotMod12 + sub c + jr .getMod12 +.gotMod12 + srl a ;divided by 4 yields 0-2 + srl a + ld c,a + inc c ;c is now 1-3 + + push bc + ld b,1 + ld a,1 + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;1 + ld a,5 + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;5 + inc a + call (.setCycle + (levelCheckRAM-L1200_Load2)) ;7 + pop bc + + pop bc + ret + +.setCycle + ;a is palette # to set (0-7) + ;b is color flag (0=white, 1=grey) + ;c is color number to set (1-3) + push af + push hl + + ;(palette# * 4 + color) * 2 + 128 is first byte to set + rlca + rlca + add c + rlca + add 128 + ld l,a + ld h,((fadeCurPalette>>8) & $ff) + + ld a,b + cp 1 + jr z,.setToGrey + + ;set to white + ld a,$ff + ld [hl+],a + ld a,$7f + ld [hl],a + jr .done + +.setToGrey + ld a,$08 + ld [hl+],a + ld a,$21 + ld [hl],a + +.done + pop hl + pop af + inc a + ret + +.animate_ship + SETDIALOGSKIP(.afterIntro + (levelCheckRAM-L1200_Load2)) + push bc + ld b,90 +.animate_loop + push bc + ld a,1 + call Delay + pop bc + + ld a,b + and %10 ;thrust on or off? + + jr nz,.animate_thruston + call (.routine_thrustoff + (levelCheckRAM-L1200_Load2)) + jr .animate_check_done + +.animate_thruston + call (.routine_thruston + (levelCheckRAM-L1200_Load2)) + +.animate_check_done + dec b + jr nz,.animate_loop + + pop bc + + ret + +.scrollDownAllSprites + push bc + push de + push hl + + ld hl,spriteOAMBuffer + ld c,35 +.scrollDownLoop + ld a,[hl] + add d + ld [hl+],a + inc hl + inc hl + inc hl + dec c + jr nz,.scrollDownLoop + + pop hl + pop de + pop bc + ret + +ENDC + +.cloudFrames + DW BANK(ocloud0_bg), ocloud0_bg, BANK(ocloud1_bg), ocloud1_bg + DW BANK(ocloud2_bg), ocloud2_bg, BANK(ocloud3_bg), ocloud3_bg + DW BANK(ocloud4_bg), ocloud4_bg, BANK(ocloud5_bg), ocloud5_bg + DW BANK(ocloud6_bg), ocloud6_bg, BANK(ocloud7_bg), ocloud7_bg + DW BANK(ocloud8_bg), ocloud8_bg, BANK(ocloud9_bg), ocloud9_bg + DW BANK(oclouda_bg), oclouda_bg, BANK(ocloudb_bg), ocloudb_bg + DW BANK(ocloudc_bg), ocloudc_bg, BANK(ocloudd_bg), ocloudd_bg + DW BANK(ocloude_bg), ocloude_bg, BANK(ocloudf_bg), ocloudf_bg + +L1200_LoadFinished: + +PRINTT " 1200 Level Load Size: " +PRINTV (L1200_LoadFinished - L1200_Load2) +PRINTT "/$500 bytes\n" + + +L1200_Map: + +;gtx_app_closed_gate_bs5: INCBIN "Data/Dialog/Landing/app_closed_gate_bs5.gtx" + +L1200_Init: + DW ((L1200_InitFinished - L1200_Init)-2) ;size +L1200_Init2: + ret + +L1200_InitFinished: + + +L1200_Check: + DW ((L1200_CheckFinished - L1200_Check) - 2) ;size +L1200_Check2: +L1200_CheckOffset EQU (levelCheckADDR - L1200_Check2) + ret + +L1200_CheckFinished: + +PRINTT " 1200 Level Check Size: " +PRINTV (L1200_CheckFinished - L1200_Check2) +PRINTT "/$500 bytes\n" + diff --git a/Source/l1201.asm b/Source/l1201.asm new file mode 100644 index 0000000..dc2dad8 --- /dev/null +++ b/Source/l1201.asm @@ -0,0 +1,86 @@ +;level1201.asm +;Abe Pralle 6.13.2000 + +;called when the level the guest is going to is the same as the one +;the host is on + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "LevelsSection1201",ROMX,BANK[MAP0ROM] +;--------------------------------------------------------------------- + +L1201_Contents:: + DW L1201_Load + DW L1201_Init + DW L1201_Check + DW L1201_Map + +waiting_to_join_bg: + INCBIN "../fgbpix/menu/waiting_to_join.bg" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1201_Load: + DW ((L1201_LoadFinished - L1201_Load2)) ;size +L1201_Load2: + ld a,1 + call SetupFadeToWhite + call WaitFade + + ld a,BANK(waiting_to_join_bg) + ld hl,waiting_to_join_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + ld a,30 + call Delay + + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld a,$02 + ld [curLevelIndex+1],a + ld a,$05 + ld [curLevelIndex],a + + ld a,1 + ld [timeToChangeLevel],a + + ret + + +L1201_LoadFinished: +;some local vars + +L1201_Map: +;--------------------------------------------------------------------- +L1201_Init: +;--------------------------------------------------------------------- + DW ((L1201_InitFinished - L1201_Init2)) ;size +L1201_Init2: + + ret + +L1201_InitFinished: + + +;--------------------------------------------------------------------- +L1201_Check: +;--------------------------------------------------------------------- + DW ((L1201_CheckFinished - L1201_Check) - 2) ;size +L1201_Check2: + ret +L1201_CheckFinished: + + +PRINTT " 1201 Level Check Size: " +PRINTV (L1201_CheckFinished - L1201_Check2) +PRINTT "/$500 bytes" + diff --git a/Source/l1202.asm b/Source/l1202.asm new file mode 100644 index 0000000..b63b473 --- /dev/null +++ b/Source/l1202.asm @@ -0,0 +1,238 @@ +; l1202.asm dropship leaving triumph +; Generated 07.30.2000 by mlevel +; Modified 07.30.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +STATE_BASHUTTLE EQU 1 +STATE_SKIPPYSHUTTLE EQU 2 + +;--------------------------------------------------------------------- +SECTION "Level1202Section",ROMX +;--------------------------------------------------------------------- + +L1202_Contents:: + DW L1202_Load + DW L1202_Init + DW L1202_Check + DW L1202_Map + +triumphBIG_bg:: + INCBIN "../fgbpix/main_intro/triumphBIG.bg" + +dropship_tiny_sp: + INCBIN "../fgbpix/main_intro/dropship_tiny.sp" + +nar_skippyshuttle_bg: + INCBIN "../fgbpix/main_intro/nar_skippyshuttle.bg" + +dialog: +blank_gtx: + INCBIN "Data/Dialog/main_intro/blank.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1202_Load: + DW ((L1202_LoadFinished - L1202_Load2)) ;size + +L1202_Load2: + ld a,STATE_BASHUTTLE + ldio [mapState],a + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$2d] ;gyro catches BA + or a + jr z,.afterSkippyShuttle + ld a,STATE_SKIPPYSHUTTLE + ldio [mapState],a +.afterSkippyShuttle + + ld a,BANK(dialog) + ld [dialogBank],a + + ;ldio a,[mapState] + ;or a + ;jr nz,.afterState0 + + ;ld a,BANK(moon_base_ba_gbm) + ;ld hl,moon_base_ba_gbm + ;call InitMusic + +.afterState0 + ld a,BANK(triumphBIG_bg) + ld hl,triumphBIG_bg + call LoadCinemaBG + + ld a,BANK(dropship_tiny_sp) + ld hl,dropship_tiny_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + ld a,BANK(nar_skippyshuttle_bg) + ld hl,nar_skippyshuttle_bg + call LoadCinemaTextBox + + ld a,1 + call Delay + + ld d,72 + call ScrollSpritesRight + ld d,74 + call ScrollSpritesDown + + ld b,%10000000 + call ((.setSpritePriority-L1202_Load2)+levelCheckRAM) + + ld a,1 + call Delay + + ld a,16 + call SetupFadeFromStandard + call WaitFade + + ldio a,[mapState] + cp STATE_SKIPPYSHUTTLE + jr nc,.describe_skippy + + ld a,BANK(blank_gtx) + ld c,0 + ld de,blank_gtx + call ShowDialogAtBottomNoWait + jr .afterSetupTextBox + +.describe_skippy + call GfxShowStandardTextBox + +.afterSetupTextBox + ld a,1 + call Delay + + ;blit the full image from the offscreen buffer now that the + ;bottom is obscured by the text box + ld bc,$1424 + ld de,$0000 + ld hl,$1400 + call CinemaBlitRect + + ld a,$22 + ldio [scrollSpeed],a + + ;start the screen scrolling down + ld a,28 + ld [camera_j],a + +.afterShowSkippyShuttle + + ld de,((.endCinema - L1202_Load2) + levelCheckRAM) + call SetDialogSkip + ld de,((.endCinema - L1202_Load2) + levelCheckRAM) + call SetDialogForward + + ld c,80 + 144 +.scrollDropshipLoop + ld d,1 + call ScrollSpritesDown + ld a,1 + call Delay + ld a,c + + cp 80 + jr nz,.stillScrolling + ldio a,[mapState] + cp STATE_SKIPPYSHUTTLE + jr nc,.stillScrolling + call ClearDialog +.stillScrolling + + dec c + jr nz,.scrollDropshipLoop + +.endCinema + ld hl,$0013 + ld de,$0013 ;respawn map + ldio a,[mapState] + cp STATE_SKIPPYSHUTTLE + jr nz,.afterChooseNextLevel + + ld hl,$0215 + ld de,$0014 ;respawn map +.afterChooseNextLevel + + call ClearDialog + + ld a,e + ld [respawnMap],a + ld a,d + ld [respawnMap+1],a + + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + cp STATE_SKIPPYSHUTTLE + ldio [mapState],a + + ld a,1 + ld [timeToChangeLevel],a + + ld a,16 + call SetupFadeToStandard + call WaitFade + + ret + +.setSpritePriority + ;set the priority flag for the first 8 sprites + ld hl,spriteOAMBuffer+3 + ld de,4 + ld c,8 +.setPriorityLoop + ld a,[hl] + and %01111111 + or b + ld [hl],a + add hl,de + dec c + jr nz,.setPriorityLoop + ret + +L1202_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1202_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1202_Init: + DW ((L1202_InitFinished - L1202_Init2)) ;size +L1202_Init2: + ret + +L1202_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1202_Check: + DW ((L1202_CheckFinished - L1202_Check2)) ;size +L1202_Check2: + ret + +L1202_CheckFinished: +PRINTT "1202 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1202_LoadFinished - L1202_Load2) +PRINTT " / " +PRINTV (L1202_InitFinished - L1202_Init2) +PRINTT " / " +PRINTV (L1202_CheckFinished - L1202_Check2) +PRINTT "\n" + diff --git a/Source/l1203.asm b/Source/l1203.asm new file mode 100644 index 0000000..ad2c6f0 --- /dev/null +++ b/Source/l1203.asm @@ -0,0 +1,352 @@ +; l1203.asm Rescue From The Tower Cinema +; Generated 03.31.2001 by mlevel +; Modified 03.31.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + + +;--------------------------------------------------------------------- +SECTION "Level1203Gfx1",ROMX +;--------------------------------------------------------------------- +in_prison_bg: + INCBIN "../fgbpix/wedding/in_prison.bg" + +bs_driving_bg: + INCBIN "../fgbpix/wedding/bs_driving.bg" + +;--------------------------------------------------------------------- +SECTION "Level1203Section",ROMX +;--------------------------------------------------------------------- + +dialog: +flour_heyguys_gtx: + INCBIN "Data/Dialog/wedding/flour_heyguys.gtx" + +bs_explain_gtx: + INCBIN "Data/Dialog/wedding/bs_explain.gtx" + +bs_explain2_gtx: + INCBIN "Data/Dialog/wedding/bs_explain2.gtx" + +captain_interrupt_gtx: + INCBIN "Data/Dialog/wedding/captain_interrupt.gtx" + +captain_tellyouwhat_gtx: + INCBIN "Data/Dialog/wedding/captain_tellyouwhat.gtx" + +captain_key_gtx: + INCBIN "Data/Dialog/wedding/captain_key.gtx" + +captain_dosomething_gtx: + INCBIN "Data/Dialog/wedding/captain_dosomething.gtx" + +captain_camp_gtx: + INCBIN "Data/Dialog/wedding/captain_camp.gtx" + +bs_driving_gtx: + INCBIN "Data/Dialog/wedding/bs_driving.gtx" + +bs_palace_gtx: + INCBIN "Data/Dialog/wedding/bs_palace.gtx" + + +L1203_Contents:: + DW L1203_Load + DW L1203_Init + DW L1203_Check + DW L1203_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1203_Load: + DW ((L1203_LoadFinished - L1203_Load2)) ;size +L1203_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,EXIT_D + ld hl,$1203 + call YankRemotePlayer + + ld bc,ITEM_APPXKEY + call AddInventoryItem + + ld a,[heroesUsed] + ld hl,heroesAvailable + or [hl] + ld [hl],a + xor a + ld [heroesUsed],a + + ld a,BANK(moon_base_haiku_gbm) + ld hl,moon_base_haiku_gbm + call InitMusic + + ld a,BANK(in_prison_bg) + ld hl,in_prison_bg + call LoadCinemaBG + + ld a,15 + call SetupFadeFromStandard + call WaitFade + + ld de,((.endCinema-L1203_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.doorOpen-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,60 + call Delay + +.doorOpen + ld bc,$0508 + ld de,$0201 + ld hl,$1400 + call CinemaBlitRect + + ld de,((.heyGuys-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,30 + call Delay + +.heyGuys + ld c,0 + DIALOGBOTTOM flour_heyguys_gtx + + ld de,((.fewMinutesLater-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,150 + call Delay + +.fewMinutesLater + call ((.quickToBlack-L1203_Load2)+levelCheckRAM) + + ld a,BANK(gang_watches_front_bg) + ld hl,gang_watches_front_bg + call LoadCinemaBG + call ((.quickFromBlack-L1203_Load2)+levelCheckRAM) + + ld de,((.bsExplain-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,90 + call Delay + +.bsExplain + call ((.quickToBlack-L1203_Load2)+levelCheckRAM) + + ld a,BANK(bs_bg) + ld hl,bs_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1203_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM bs_explain_gtx + + ld de,((.bsExplain2-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateBS + +.bsExplain2 + call ClearDialog + + ld c,0 + DIALOGBOTTOM bs_explain2_gtx + + ld de,((.captainInterrupt-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateBS + +.captainInterrupt + call ((.quickToBlack-L1203_Load2)+levelCheckRAM) + + ld a,BANK(flour_bg) + ld hl,flour_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1203_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM captain_interrupt_gtx + + ld de,((.captainTellYouWhat-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.captainTellYouWhat + call ClearDialog + ld c,0 + DIALOGBOTTOM captain_tellyouwhat_gtx + + ld de,((.captainKey-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.captainKey + call ClearDialog + ld c,0 + DIALOGBOTTOM captain_key_gtx + + ld de,((.captainDoSomething-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.captainDoSomething + call ClearDialog + ld c,0 + DIALOGBOTTOM captain_dosomething_gtx + + ld de,((.captainCamp-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.captainCamp + call ClearDialog + ld c,0 + DIALOGBOTTOM captain_camp_gtx + + ld de,((.backAtAppx-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateFlour + +.backAtAppx + call ((.quickToBlack-L1203_Load2)+levelCheckRAM) + + ld a,BANK(bs_driving_bg) + ld hl,bs_driving_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1203_Load2)+levelCheckRAM) + + ld de,((.bsDriving-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,90 + call Delay + +.bsDriving + ld bc,$1406 + ld de,$000c + ld hl,$1412 + call CinemaBlitRect + + ld a,1 + call Delay + + ld c,0 + DIALOGBOTTOM bs_driving_gtx + + ld de,((.bsPalace-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateBSDriving + +.bsPalace + call ClearDialog + + ld c,0 + DIALOGBOTTOM bs_palace_gtx + + ld de,((.endCinema-L1203_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,4 + LONGCALLNOARGS AnimateBSDriving + +.endCinema + call ClearDialogSkipForward + + ;call ((.quickToBlack-L1203_Load2)+levelCheckRAM) + + ld hl,2056 ;bs + ld a,l + ld [hero0_class],a + ld a,h + ld [hero0_class+1],a + ld a,HERO_BS_FLAG + ld [hero0_type],a + + ld hl,2058 ;haiku + ld a,l + ld [hero1_class],a + ld a,h + ld [hero1_class+1],a + ld a,HERO_HAIKU_FLAG + ld [hero1_type],a + + ld a,EXIT_N + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$1100 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.quickToBlack + call BlackoutPalette + call ClearDialog + jp ResetSprites + +.quickFromBlack + ld a,1 + jp SetupFadeFromBlack + + +L1203_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1203_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1203_Init: + DW ((L1203_InitFinished - L1203_Init2)) ;size +L1203_Init2: + ret + +L1203_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1203_Check: + DW ((L1203_CheckFinished - L1203_Check2)) ;size +L1203_Check2: + ret + +L1203_CheckFinished: +PRINTT "1203 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1203_LoadFinished - L1203_Load2) +PRINTT " / " +PRINTV (L1203_InitFinished - L1203_Init2) +PRINTT " / " +PRINTV (L1203_CheckFinished - L1203_Check2) +PRINTT "\n" + diff --git a/Source/l1204.asm b/Source/l1204.asm new file mode 100644 index 0000000..e2c167d --- /dev/null +++ b/Source/l1204.asm @@ -0,0 +1,441 @@ +; l1204.asm Escape from the space station +; Generated 05.02.2001 by mlevel +; Modified 05.02.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level1204Gfx1",ROMX +;--------------------------------------------------------------------- +gyro_screen_bg: + INCBIN "../fgbpix/ending/gyro_screen.bg" + +button_bg: + INCBIN "../fgbpix/ending/button.bg" + +minuteslater_bg: + INCBIN "../fgbpix/ending/minuteslater.bg" + +;--------------------------------------------------------------------- +SECTION "Level1204Gfx2",ROMX +;--------------------------------------------------------------------- +appland3d2_bg: + INCBIN "../fgbpix/ending/appland3d2.bg" + +appland_sprites_sp: + INCBIN "../fgbpix/ending/appland_sprites.sp" + +;--------------------------------------------------------------------- +SECTION "Level1204Gfx2",ROMX +;--------------------------------------------------------------------- +willtheyland_bg: + INCBIN "../fgbpix/promo/willtheyland.bg" + +haveseenthelast_bg: + INCBIN "../fgbpix/promo/haveseenthelast.bg" + +publish_bg: + INCBIN "../fgbpix/promo/publish.bg" + +;--------------------------------------------------------------------- +SECTION "Level1204Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l1204_gyro_notthere_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gyro_notthere.gtx" + +l1204_gyro_ofcourse_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gyro_ofcourse.gtx" + +l1204_gyro_unfortunately_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gyro_unfortunately.gtx" + +l1204_gyro_explode_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gyro_explode.gtx" + +l1204_gyro_escape_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gyro_escape.gtx" + +l1204_gyro_button_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gyro_button.gtx" + +l1204_gotitall_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_gotitall.gtx" + +l1204_datahere_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_datahere.gtx" + +l1204_letsroll_gtx: + INCBIN "Data/Dialog/apocalypse/l1204_letsroll.gtx" + +blank_gtx: + INCBIN "Data/Dialog/main_intro/blank.gtx" + +L1204_Contents:: + DW L1204_Load + DW L1204_Init + DW L1204_Check + DW L1204_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1204_Load: + DW ((L1204_LoadFinished - L1204_Load2)) ;size +L1204_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(gyro_screen_bg) + ld hl,gyro_screen_bg + call LoadCinemaBG + + ld a,15 + call SetupFadeFromBlack + call WaitFade + + ld de,((.afterDialog-L1204_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.notThere-L1204_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,30 + call Delay + +.notThere + ld c,0 + DIALOGBOTTOM l1204_gyro_notthere_gtx + ld de,((.ofCourse-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateGyroOnScreen + + +.ofCourse + ld c,0 + DIALOGBOTTOM l1204_gyro_ofcourse_gtx + ld de,((.unfortunately-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateGyroOnScreen + +.unfortunately + ld c,0 + DIALOGBOTTOM l1204_gyro_unfortunately_gtx + ld de,((.explode-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateGyroOnScreen + +.explode + ld c,0 + DIALOGBOTTOM l1204_gyro_explode_gtx + ld de,((.escape-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateGyroOnScreen + +.escape + ld c,0 + DIALOGBOTTOM l1204_gyro_escape_gtx + ld de,((.button-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateGyroOnScreen + +.button + call ((.quickToBlack-L1204_Load2)+levelCheckRAM) + ld a,BANK(button_bg) + ld hl,button_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1204_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM l1204_gyro_button_gtx + ld de,((.minuteslater-L1204_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,15 +.blinkLoop + push af + ld a,5 + call Delay + ld bc,$1412 + ld de,$0000 + ld hl,$1400 + call CinemaBlitRect + + ld a,5 + call Delay + ld bc,$1412 + ld de,$0000 + ld hl,$2800 + call CinemaBlitRect + pop af + dec a + jr nz,.blinkLoop + +.minuteslater + call ((.quickToBlack-L1204_Load2)+levelCheckRAM) + ld a,BANK(minuteslater_bg) + ld hl,minuteslater_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1204_Load2)+levelCheckRAM) + ld de,((.gotitall-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld a,120 + call Delay + +.gotitall + call ((.quickToBlack-L1204_Load2)+levelCheckRAM) + ld a,BANK(bs_bg) + ld hl,bs_bg + call LoadCinemaBG + call ((.quickFromBlack-L1204_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM l1204_gotitall_gtx + ld de,((.datahere-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateBS + +.datahere + call ((.quickToBlack-L1204_Load2)+levelCheckRAM) + ld a,BANK(haiku_bg) + ld hl,haiku_bg + call LoadCinemaBG + call ((.quickFromBlack-L1204_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM l1204_datahere_gtx + ld de,((.letsroll-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateHaiku + +.letsroll + call ((.quickToBlack-L1204_Load2)+levelCheckRAM) + ld a,BANK(bs_bg) + ld hl,bs_bg + call LoadCinemaBG + call ((.quickFromBlack-L1204_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM l1204_letsroll_gtx + ld de,((.descending-L1204_Load2)+levelCheckRAM) + call SetDialogForward + ld d,2 + LONGCALLNOARGS AnimateBS + +.afterDialog +.descending + ld de,0 + call SetDialogForward + + ld a,15 + call SetupFadeToBlack + call WaitFade + call ResetSprites + call ClearDialog + + ld a,BANK(appland3d2_bg) + ld hl,appland3d2_bg + call LoadCinemaBG + + ld a,BANK(appland_sprites_sp) + ld hl,appland_sprites_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld c,0 + DIALOGBOTTOM blank_gtx + + ld a,15 + call SetupFadeFromBlack + + ;ld de,((.willtheyland-L1204_Load2)+levelCheckRAM) + ;call SetDialogForward + + ld c,24 +.shipScroll1 + ld d,1 + call ScrollSpritesDown + call ((.shakeShip-L1204_Load2)+levelCheckRAM) + ld a,1 + call Delay + dec c + jr nz,.shipScroll1 + + ld a,$11 + ldio [scrollSpeed],a + ld a,30 + ld [camera_j],a + + + ld a,48 +.shipScrollLoop + push af + ld d,1 + call ScrollSpritesDown + call ((.scrollTerrain-L1204_Load2)+levelCheckRAM) + call ((.shakeShip-L1204_Load2)+levelCheckRAM) + ld a,1 + call Delay + pop af + dec a + jr nz,.shipScrollLoop + +.willtheyland + call ClearDialog + ld a,BANK(willtheyland_bg) + ld hl,willtheyland_bg + call LoadCinemaTextBox + call InstallGamePalette + call GfxShowStandardTextBox + + ld de,((.haveseenthelast-L1204_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,120 + call ((.scrollShakeDelay-L1204_Load2)+levelCheckRAM) + +.haveseenthelast + call ClearDialog + ld a,BANK(haveseenthelast_bg) + ld hl,haveseenthelast_bg + call LoadCinemaTextBox + call InstallGamePalette + call GfxShowStandardTextBox + + ld de,((.publish-L1204_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,120 + call ((.scrollShakeDelay-L1204_Load2)+levelCheckRAM) + +.publish + call ClearDialog + ld a,BANK(publish_bg) + ld hl,publish_bg + call LoadCinemaTextBox + call InstallGamePalette + call GfxShowStandardTextBox + + ld de,((.tempEnd-L1204_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,120 + call ((.scrollShakeDelay-L1204_Load2)+levelCheckRAM) + +.tempEnd + +.infi + call ((.scrollTerrain-L1204_Load2)+levelCheckRAM) + call ((.shakeShip-L1204_Load2)+levelCheckRAM) + ld a,1 + call Delay + jr .infi + + ret + +.scrollShakeDelay + push af + call ((.scrollTerrain-L1204_Load2)+levelCheckRAM) + call ((.shakeShip-L1204_Load2)+levelCheckRAM) + ld a,1 + call Delay + pop af + dec a + jr nz,.scrollShakeDelay + +.scrollTerrain + ldio a,[updateTimer] ;frame * 6 + rrca + and %11 + ld b,a + ld a,3 + sub b + rlca + ld b,a + rlca + add b + ld l,a + ld h,$14 + ld bc,$1406 + ld de,$000c + call CinemaBlitRect + ret + +.shakeShip + ;scroll ship vertical by value in shipSineTable + ldio a,[updateTimer] + and 63 + add (((.shipSineTable-L1204_Load2)+levelCheckRAM) & $ff) + ld l,a + ld a,0 + adc ((((.shipSineTable-L1204_Load2)+levelCheckRAM)>>8) & $ff) + ld h,a + ld d,[hl] + call ScrollSpritesDown + ret + +.quickToBlack + call ClearDialog + call ResetSprites + ld a,1 + call SetupFadeToBlack + call WaitFade + ret + +.quickFromBlack + ld a,1 + call SetupFadeFromBlack + call WaitFade + ret + +.shipSineTable + DB 1, 0, 0,255, 0, 1, 0, 0,254, 0, 0, 1, 0, 0, 0, 0 + DB 0, 2, 0, 0,255, 0, 0, 0,254, 0, 0, 0, 1, 0, 0, 0 + DB 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + DB 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + +L1204_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1204_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1204_Init: + DW ((L1204_InitFinished - L1204_Init2)) ;size +L1204_Init2: + ret + +L1204_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1204_Check: + DW ((L1204_CheckFinished - L1204_Check2)) ;size +L1204_Check2: + ret + +L1204_CheckFinished: +PRINTT "1204 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1204_LoadFinished - L1204_Load2) +PRINTT " / " +PRINTV (L1204_InitFinished - L1204_Init2) +PRINTT " / " +PRINTV (L1204_CheckFinished - L1204_Check2) +PRINTT "\n" + diff --git a/Source/l1212.asm b/Source/l1212.asm new file mode 100644 index 0000000..196133d --- /dev/null +++ b/Source/l1212.asm @@ -0,0 +1,189 @@ +; l1212.asm Crouton Homeworld 1 +; Generated 04.19.2001 by mlevel +; Modified 04.19.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +NUM_DIALOG EQU 3 + +HFENCE_INDEX EQU 18 +HULK_INDEX EQU 43 +GOBLIN_INDEX EQU 44 + +VAR_OVERHEARD EQU 0 + +STATE_ANYTIME EQU 0 +STATE_MAKESURE EQU 1 +STATE_SUCKS EQU 2 + +;--------------------------------------------------------------------- +SECTION "Level1212Section",ROMX +;--------------------------------------------------------------------- + +dialog: +l1212_anytime_gtx: + INCBIN "Data/Dialog/talk/l1212_anytime.gtx" + +l1212_yeah_gtx: + INCBIN "Data/Dialog/talk/l1212_yeah.gtx" + +l1212_makesure_gtx: + INCBIN "Data/Dialog/talk/l1212_makesure.gtx" + +l1212_suckstobehim_gtx: + INCBIN "Data/Dialog/talk/l1212_suckstobehim.gtx" + +L1212_Contents:: + DW L1212_Load + DW L1212_Init + DW L1212_Check + DW L1212_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1212_Load: + DW ((L1212_LoadFinished - L1212_Load2)) ;size +L1212_Load2: + call ParseMap + ret + +L1212_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1212_Map: +INCBIN "Data/Levels/L1212_crouton_hw1.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1212_Init: + DW ((L1212_InitFinished - L1212_Init2)) ;size +L1212_Init2: + ld hl,$1212 + call SetJoinMap + call SetRespawnMap + + call State0To1 + + ld a,BANK(fgbwar_gbm) + ld hl,fgbwar_gbm + call InitMusic + + STDSETUPDIALOG + + xor a + ld [levelVars+VAR_OVERHEARD],a + ret + +L1212_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1212_Check: + DW ((L1212_CheckFinished - L1212_Check2)) ;size +L1212_Check2: + call ((.animateFence-L1212_Check2)+levelCheckRAM) + call ((.checkDialog-L1212_Check2)+levelCheckRAM) + ret + +.checkDialog + ld a,[levelVars+VAR_OVERHEARD] + or a + ret nz + + ld hl,((.checkHeroInZone-L1212_Check2)+levelCheckRAM) + xor a + call CheckEachHero + ret + +.checkHeroInZone + ld c,a + call GetFirst + call GetCurZone + cp 2 + jr z,.inZone + + xor a + ret + +.inZone + ;increment dialog number + ld hl,mapState + ld a,[hl] + push af + inc a + cp (NUM_DIALOG+1) + jr c,.dialogNumOkay + + ld a,1 + +.dialogNumOkay + ld [hl],a + pop af + + ld hl,((.dialogLookup-L1212_Check2)+levelCheckRAM) + call Lookup16 + + push hl + call MakeIdle + pop hl + ld de,((.afterDialog-L1212_Check2)+levelCheckRAM) + call SetDialogSkip + + ld d,h + ld e,l + call SetSpeakerFromHeroIndex + ld c,HULK_INDEX + call ShowDialogAtTop + + call ClearDialog + ld c,GOBLIN_INDEX + ld de,l1212_yeah_gtx + call ShowDialogAtBottom + +.afterDialog + call ClearDialogSkipForward + call MakeNonIdle + + ld a,1 + ld [levelVars+VAR_OVERHEARD],a + ret + +.animateFence + ldio a,[updateTimer] + rrca + and 3 + ld b,a + ld hl,bgTileMap+HFENCE_INDEX + ld d,HFENCE_INDEX + call ((.animateFourFrames-L1212_Check2)+levelCheckRAM) + ret + +.animateFourFrames + ld c,4 + +.animateFourFrames_loop + ld a,b + add c + and 3 + add d + ld [hl+],a + dec c + jr nz,.animateFourFrames_loop + ret + +.dialogLookup + DW 0,l1212_anytime_gtx,l1212_makesure_gtx,l1212_suckstobehim_gtx + +L1212_CheckFinished: +PRINTT "1212 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1212_LoadFinished - L1212_Load2) +PRINTT " / " +PRINTV (L1212_InitFinished - L1212_Init2) +PRINTT " / " +PRINTV (L1212_CheckFinished - L1212_Check2) +PRINTT "\n" + diff --git a/Source/l1300.asm b/Source/l1300.asm new file mode 100644 index 0000000..7d42e06 --- /dev/null +++ b/Source/l1300.asm @@ -0,0 +1,313 @@ +; l1300.asm appomattox interior +; Generated 02.16.2001 by mlevel +; Modified 02.16.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/start.inc" + +DICEINDEX EQU 6 +GRENADE_INDEX EQU 170 +BAINDEX EQU 173 +BSINDEX EQU 174 +HAIKUINDEX EQU 175 + +VAR_DICELIGHT EQU 0 +VAR_HEROESUSED EQU 1 +VAR_BA EQU 2 +VAR_BS EQU 3 +VAR_HAIKU EQU 4 + + +;--------------------------------------------------------------------- +SECTION "Level1300Section",ROMX +;--------------------------------------------------------------------- + +L1300_Contents:: + DW L1300_Load + DW L1300_Init + DW L1300_Check + DW L1300_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1300_Load: + DW ((L1300_LoadFinished - L1300_Load2)) ;size +L1300_Load2: + call ParseMap + + ;reset heroes to full health + xor a + ld [hero0_health],a + ld [hero1_health],a + ret + +L1300_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1300_Map: +INCBIN "Data/Levels/l1300_appomattox.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1300_Init: + DW ((L1300_InitFinished - L1300_Init2)) ;size +L1300_Init2: + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld hl,$1100 + call SetJoinMap + call SetRespawnMap + + ld a,[bgTileMap+DICEINDEX] ;tile index of first light + ld [levelVars+VAR_DICELIGHT],a + + ld a,0 + ld [levelVars+VAR_HEROESUSED],a + + ld a,TILEINDEXBANK + ldio [$ff70],a + ld a,[fgTileMap+BAINDEX] + ld [levelVars+VAR_BA],a + ld a,[fgTileMap+BSINDEX] + ld [levelVars+VAR_BS],a + ld a,[fgTileMap+HAIKUINDEX] + ld [levelVars+VAR_HAIKU],a + + ;get rid of king grenade if he's not available + ld a,[heroesAvailable] + and HERO_GRENADE_FLAG + jr nz,.afterRemoveKingGrenade + + ld bc,classGeneric + call DeleteObjectsOfClass +.afterRemoveKingGrenade + + ;link down exit to appomattox map + ld a,[appomattoxMapIndex] + or a + jr z,.afterLinkDownExit + + ;convert map index to 16-bit BCD index + ld b,a + and %1111 + call NumberToBCD + ld d,a + ld a,b + swap a + and %1111 + call NumberToBCD + ld e,a + +IF FORCE_EXIT +ld de,FORCE_EXIT_MAP +ENDC + ;store in exit list + ld hl,mapExitLinks+EXIT_D*2 + ld [hl],e + inc hl + ld [hl],d + +.afterLinkDownExit + ;if player is king grenade and appx is not at base camp, + ;set exit to "back inside" level + LDHL_CURHERODATA HERODATA_TYPE + ld a,[hl] + cp HERO_GRENADE_FLAG + jr nz,.afterLinkGrenade + + ld a,[appomattoxMapIndex] + cp $000a + jr z,.afterLinkGrenade + + ld de,$1304 + ld hl,mapExitLinks+EXIT_D*2 + ld [hl],e + inc hl + ld [hl],d + +.afterLinkGrenade + ;kill north exit (flight) if at space station + ld a,[appomattoxMapIndex] + cp $b7 + jr nz,.afterApocalypse + + ld de,$4040 ;null exit + ld hl,mapExitLinks+EXIT_N*2 + ld [hl],e + inc hl + ld [hl],d + +.afterApocalypse + ret + +L1300_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1300_Check: + DW ((L1300_CheckFinished - L1300_Check2)) ;size +L1300_Check2: + call ((.animateDiceLights-L1300_Check2)+levelCheckRAM) + + ld a,[levelVars+VAR_HEROESUSED] + ld hl,heroesUsed + xor [hl] + jr z,.afterChangeLounge + + ld a,[hl] + ld [levelVars+VAR_HEROESUSED],a + ld b,a + + bit HERO_BA_BIT,b + jr z,.BAinLounge + call ((.removeBA-L1300_Check2)+levelCheckRAM) + jr .afterCheckBA +.BAinLounge + call ((.addBA-L1300_Check2)+levelCheckRAM) +.afterCheckBA + + bit HERO_BS_BIT,b + jr z,.BSinLounge + call ((.removeBS-L1300_Check2)+levelCheckRAM) + jr .afterCheckBS +.BSinLounge + call ((.addBS-L1300_Check2)+levelCheckRAM) +.afterCheckBS + + bit HERO_HAIKU_BIT,b + jr z,.HaikuInLounge + call ((.removeHaiku-L1300_Check2)+levelCheckRAM) + jr .afterCheckHaiku +.HaikuInLounge + call ((.addHaiku-L1300_Check2)+levelCheckRAM) +.afterCheckHaiku + + bit HERO_GRENADE_BIT,b + jr z,.GrenadeInLounge + call ((.removeGrenade-L1300_Check2)+levelCheckRAM) + jr .afterCheckGrenade +.GrenadeInLounge + call ((.addGrenade-L1300_Check2)+levelCheckRAM) +.afterCheckGrenade + +.afterChangeLounge + ret + +.removeHaiku + ld c,HAIKUINDEX + jr .removeIndex +.removeBS + ld c,BSINDEX + jr .removeIndex +.removeBA + ld c,BAINDEX +.removeIndex + push bc + ld a,TILEINDEXBANK + ldio [$ff70],a + ld l,c + ld h,((fgTileMap>>8)&$ff) + ld [hl],$ff + call GetFirst + ld b,METHOD_DRAW + call CallMethod + pop bc + ret + +.removeGrenade + ld bc,classGeneric + call DeleteObjectsOfClass + ret + +.addHaiku + ld l,HAIKUINDEX + ld a,[levelVars+VAR_HAIKU] + jr .addIndex +.addBS + ld l,BSINDEX + ld a,[levelVars+VAR_BS] + jr .addIndex +.addBA + ld l,BAINDEX + ld a,[levelVars+VAR_BA] +.addIndex + push bc + ld c,a + ld a,TILEINDEXBANK + ldio [$ff70],a + ld a,c + ld h,((fgTileMap>>8)&$ff) + ld [hl],a + ld c,l + call GetFirst + ld b,METHOD_DRAW + call CallMethod + pop bc + ret + +.addGrenade + ld a,[heroesAvailable] + and HERO_GRENADE_FLAG + ret z + + ld c,GRENADE_INDEX + call GetFirst + or a + ret nz ;already exists + + ld hl,$d253 + call CreateInitAndDrawObject + ret + +.animateDiceLights + ;animate dice lights + ld a,[levelVars+VAR_DICELIGHT] + ld b,a + + ;slow lights + ldio a,[updateTimer] + swap a + and %00000011 + add b + + ld hl,bgTileMap+DICEINDEX + call ((.updateTwoLights - L1300_Check2) + levelCheckRAM) + + ;fast lights + ldio a,[updateTimer] + swap a + rlca + and %00000011 + add b + call ((.updateTwoLights - L1300_Check2) + levelCheckRAM) + ret + +.updateTwoLights + ld [hl+],a + call ((.incCount4 - L1300_Check2) + levelCheckRAM) + ld [hl+],a + ret + +.incCount4 + sub b + inc a + and %00000011 + add b + ret + + +L1300_CheckFinished: +PRINTT "1300 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1300_LoadFinished - L1300_Load2) +PRINTT " / " +PRINTV (L1300_InitFinished - L1300_Init2) +PRINTT " / " +PRINTV (L1300_CheckFinished - L1300_Check2) +PRINTT "\n" + diff --git a/Source/l1301.asm b/Source/l1301.asm new file mode 100644 index 0000000..66e38cb --- /dev/null +++ b/Source/l1301.asm @@ -0,0 +1,261 @@ +; l1301.asm map view +; Generated 02.22.2001 by mlevel +; Modified 02.22.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_MAPI EQU 0 +VAR_MAPJ EQU 1 + + +;--------------------------------------------------------------------- +SECTION "Level1301Section",ROMX +;--------------------------------------------------------------------- + +fgbmap_bg: + INCBIN "../fgbpix/appomattox/fgbmap_big.bg" + +L1301_Contents:: + DW L1301_Load + DW L1301_Init + DW L1301_Check + DW L1301_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1301_Load: + DW ((L1301_LoadFinished - L1301_Load2)) ;size +L1301_Load2: + ld a,BANK(fgbmap_bg) + ld hl,fgbmap_bg + call LoadCinemaBG + + ld a,[appomattoxMapIndex] + cp $b7 + jp z,((.onSpaceStation-L1301_Load2)+levelCheckRAM) + + ;ld a,LEVELSTATEBANK + ;ldio [$ff70],a + ;ld a,[levelState+$2e] ;off moon yet? + ;or a + ;jp z,((.onMoon-L1301_Load2)+levelCheckRAM) + + ;clear unvisited zones + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld hl,$d000 + ld b,0 +.outer ld c,0 +.inner ld a,b ;a = b*16 + c + swap a + or c + ld d,((levelState>>8)&$ff) + ld e,a + ld a,[de] + or a + jr nz,.continue + + ld a,TILESHADOWBANK + ldio [$ff70],a + push hl + ld de,61 + xor a + ld [hl+],a + ld [hl+],a + ld [hl+],a + add hl,de + ld [hl+],a + ld [hl+],a + ld [hl+],a + add hl,de + ld [hl+],a + ld [hl+],a + ld [hl+],a + pop hl + ld a,LEVELSTATEBANK + ldio [$ff70],a + +.continue + inc hl + inc hl + inc hl + inc c + ld a,c + cp 11 + jr nz,.inner + ld de,64*3-33 + add hl,de + inc b + ld a,b + cp 11 + jr nz,.outer + +.findMapIndex + ;figure out map index + ld a,[appomattoxMapIndex] + cp $c7 + jr nz,.notFarmLanding + ld a,$31 +.notFarmLanding + ld b,a + and %1111 + ld c,a ;*3 + rlca + add c + ld [levelVars+VAR_MAPI],a + ld [camera_i],a + ld c,a + cp 9 + jr c,.afterSub9 + ld c,9 +.afterSub9 + sub c + ld [mapLeft],a + ld a,b + swap a + and %1111 + ld c,a ;*3 + rlca + add c + ld [levelVars+VAR_MAPJ],a + ld [camera_j],a + ld c,a + cp 8 + jr c,.afterSub8 + ld c,8 +.afterSub8 + sub c + ld [mapTop],a + + ;constrain horizontal + ld a,[levelVars+VAR_MAPI] + cp 23 + jr c,.hokay + ld a,22 + ld [levelVars+VAR_MAPI],a + ld a,13 + ld [mapLeft],a +.hokay + + ;constrain vertical + ld a,[levelVars+VAR_MAPJ] + cp 24 + jr c,.vokay + ld a,23 + ld [levelVars+VAR_MAPJ],a + ld a,15 + ld [mapTop],a +.vokay + + ld a,15 + call SetupFadeFromStandard + +.loop + ld a,1 + call Delay + ld a,[myJoy] + ld b,a + + ld a,[levelVars+VAR_MAPI] + ld [camera_i],a + ld a,[levelVars+VAR_MAPJ] + ld [camera_j],a +.checkLeft + xor a + bit JOY_LEFT_BIT,b + jr z,.checkUp + ld [camera_i],a +.checkUp + bit JOY_UP_BIT,b + jr z,.checkRight + ld [camera_j],a +.checkRight + ld a,22 + bit JOY_RIGHT_BIT,b + jr z,.checkDown + ld [camera_i],a +.checkDown + bit JOY_DOWN_BIT,b + jr z,.checkExit + ld a,23 + ld [camera_j],a + +.checkExit + ld a,b + and (JOY_A | JOY_B | JOY_START) + jr z,.loop + +.exit + ld a,15 + call SetupFadeToStandard + call WaitFade + + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,EXIT_W + ld [hl],a + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.onSpaceStation + ld a,BANK(station_tactical_bg) + ld hl,station_tactical_bg + call LoadCinemaBG + jr .loadAlternate + +.onMoon + ld a,BANK(moontact_bg) + ld hl,moontact_bg + call LoadCinemaBG + +.loadAlternate + ld a,15 + call SetupFadeFromStandard + +.waitExit + ld a,1 + call Delay + ld a,[myJoy] + and (JOY_A | JOY_B | JOY_START) + jr z,.waitExit + jr .exit + +L1301_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1301_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1301_Init: + DW ((L1301_InitFinished - L1301_Init2)) ;size +L1301_Init2: + ret + +L1301_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1301_Check: + DW ((L1301_CheckFinished - L1301_Check2)) ;size +L1301_Check2: + ret + +L1301_CheckFinished: +PRINTT "1301 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1301_LoadFinished - L1301_Load2) +PRINTT " / " +PRINTV (L1301_InitFinished - L1301_Init2) +PRINTT " / " +PRINTV (L1301_CheckFinished - L1301_Check2) +PRINTT "\n" + diff --git a/Source/l1302.asm b/Source/l1302.asm new file mode 100644 index 0000000..5f2d678 --- /dev/null +++ b/Source/l1302.asm @@ -0,0 +1,369 @@ +; l1302.asm gyves cornered cinema +; Generated 07.31.2000 by mlevel +; Modified 07.31.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1302Section",ROMX +;--------------------------------------------------------------------- + +L1302_Contents:: + DW L1302_Load + DW L1302_Init + DW L1302_Check + DW L1302_Map + +gyro_cornered_bg: + INCBIN "../fgbpix/main_intro/gyrocornered.bg" + +gyro_cornered_gun_sp: + INCBIN "../fgbpix/main_intro/gyro_cornered_gun.sp" + +dialog: +gyro_cornered1_gtx: + INCBIN "Data/Dialog/main_intro/gyro_cornered1.gtx" + +gyro_cornered2_gtx: + INCBIN "Data/Dialog/main_intro/gyro_cornered2.gtx" + +gyro_cornered3_gtx: + INCBIN "Data/Dialog/main_intro/gyro_cornered3.gtx" + +gyro_cornered4_gtx: + INCBIN "Data/Dialog/main_intro/gyro_cornered4.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1302_Load: + DW ((L1302_LoadFinished - L1302_Load2)) ;size +L1302_Load2: + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld a,BANK(gyro_cornered_bg) + ld hl,gyro_cornered_bg + call LoadCinemaBG + + ld a,BANK(gyro_cornered_gun_sp) + ld hl,gyro_cornered_gun_sp + call LoadCinemaSprite + + ld d,162 + call ScrollSpritesRight + + ld d,40 + call ScrollSpritesDown + + ;cur palette to game palette + gun quarter-bright + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ;fade from black to gun quarter-bright + ;cur palette to all white + ld hl,fadeCurPalette + call FadeCommonSetPaletteToBlack + + ld hl,fadeFinalPalette + 64 + ld d,8 + call ((.paletteToQuarterBright - L1302_Load2) + levelCheckRAM) + + ld a,16 + call FadeInit + call WaitFade + + ld de,((.endCinema - L1302_Load2) + levelCheckRAM) + call SetDialogSkip + ld de,((.dialog1 - L1302_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,16 + call Delay + + ;----focus on gun--------------------------------------------- + call ((.setupFadeToFocusOnGun-L1302_Load2) + levelCheckRAM) + ld a,60 + call FadeInit + + ;slide gun out as fade is happening + ld c,60 +.slideGunOutLoop + ld d,1 + call ScrollSpritesLeft + ld a,1 + call Delay + dec c + jr nz,.slideGunOutLoop + + ld a,30 + call Delay + + ld a,BANK(gyro_cornered1_gtx) + ld c,0 + ld de,gyro_cornered1_gtx + call ShowDialogAtBottomNoWait + +.dialog1 + call ((.showGunForSure - L1302_Load2) + levelCheckRAM) + ;----gyro says wait------------------------------------------- + ld de,((.dialog2 - L1302_Load2) + levelCheckRAM) + call SetDialogForward + + ld b,3 + call ((.animateGyro-L1302_Load2)+levelCheckRAM) + + ;----focus on gyro-------------------------------------------- + call ((.setupFadeToFocusOnGyro-L1302_Load2) + levelCheckRAM) + ld a,60 + call FadeInit + + ld c,120 + ld b,0 +.hideGunLoop + ld a,b + srl a + and 1 + ld d,a + call ScrollSpritesRight + ld a,1 + call Delay + inc b + dec c + jr nz,.hideGunLoop + +.dialog2 + call ((.hideGunForSure - L1302_Load2) + levelCheckRAM) + ;----gyro makes the deal-------------------------------------- + ld de,((.dialog3 - L1302_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(gyro_cornered2_gtx) + ld c,0 + ld de,gyro_cornered2_gtx + call ShowDialogAtBottomNoWait + + ld b,4 + call ((.animateGyro-L1302_Load2)+levelCheckRAM) + +.dialog3 + ld de,((.dialog4 - L1302_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(gyro_cornered3_gtx) + ld c,0 + ld de,gyro_cornered3_gtx + call ShowDialogAtBottomNoWait + + ld b,5 + call ((.animateGyro-L1302_Load2)+levelCheckRAM) + +.dialog4 + ld de,((.endCinema - L1302_Load2) + levelCheckRAM) + call SetDialogForward + + ld a,BANK(gyro_cornered4_gtx) + ld c,0 + ld de,gyro_cornered4_gtx + call ShowDialogAtBottomNoWait + + ld b,5 + call ((.animateGyro-L1302_Load2)+levelCheckRAM) + +.endCinema + call ClearDialog + ld a,16 + call SetupFadeToStandard + call WaitFade + + ld hl,$1202 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.animateGyro + ;b already set up with # of loops + sla b ;b*=4 + sla b +.gyroEyes + ld c,4 + +.gyroTalk + push bc + ld a,3 + call Delay + + ld a,b + cp 8 + ld a,2 + jr nc,.animate + ld a,1 + +.animate + ;animate mouth + ld bc,$0604 + ld de,$0806 + ld hl,$1402 + call CinemaSpotAnimationRandomVerticalFrames + pop bc + dec c + jr nz,.gyroTalk + + ;animate eye + push bc + ld a,4 + ld bc,$0202 + ld de,$0704 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + pop bc + dec b + jr nz,.gyroEyes + + ;open eye at end + ld a,1 + ld bc,$0202 + ld de,$0704 + ld hl,$1400 + call CinemaSpotAnimationRandomHorizontalFrames + ld a,10 + call Delay + ret + +.paletteToQuarterBright + push bc + push de + push hl + ld a,FADEBANK + ldio [$ff70],a + +.quarterBrightLoop + ld a,[hl+] + ld c,a + ld a,[hl-] + ld b,a + call GetRedComponent + srl a + srl a + call SetRedComponent + call GetGreenComponent + srl a + srl a + call SetGreenComponent + call GetBlueComponent + srl a + srl a + call SetBlueComponent + ld a,c + ld [hl+],a + ld a,b + ld [hl+],a + dec d + jr nz,.quarterBrightLoop + pop hl + pop de + pop bc + ret + +.setupFadeToFocusOnGun + ld a,FADEBANK + ldio [$ff70],a + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld hl,fadeFinalPalette + 8 + ld d,28 + call ((.paletteToQuarterBright - L1302_Load2) + levelCheckRAM) + ld hl,fadeCurPalette + 64 + ld d,8 + call ((.paletteToQuarterBright - L1302_Load2) + levelCheckRAM) + ret + +.setupFadeToFocusOnGyro + ld a,FADEBANK + ldio [$ff70],a + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld hl,fadeFinalPalette + 64 + ld d,8 + call ((.paletteToQuarterBright-L1302_Load2)+levelCheckRAM) + ld hl,fadeCurPalette + 8 + ld d,28 + call ((.paletteToQuarterBright-L1302_Load2)+levelCheckRAM) + ret + +.showGunForSure + ld hl,spriteOAMBuffer + 1 + ld a,[hl] ;first sprite x pos + sub 102+8 ;minus desired x pos + ld d,a + call ScrollSpritesLeft ;is amount to scroll sprites + + call ((.setupFadeToFocusOnGun-L1302_Load2) + levelCheckRAM) + ld a,1 + call FadeInit + ret + +.hideGunForSure + ld hl,spriteOAMBuffer + 1 + ld a,162+8 ;desired x pos + sub [hl] ;minus first sprite x pos + ld d,a + call ScrollSpritesRight ;is amount to scroll sprites + + call ((.setupFadeToFocusOnGyro-L1302_Load2)+levelCheckRAM) + ld a,1 + call FadeInit + ret + +L1302_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1302_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1302_Init: + DW ((L1302_InitFinished - L1302_Init2)) ;size +L1302_Init2: + ret + +L1302_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1302_Check: + DW ((L1302_CheckFinished - L1302_Check2)) ;size +L1302_Check2: + ret + +L1302_CheckFinished: +PRINTT "1302 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1302_LoadFinished - L1302_Load2) +PRINTT " / " +PRINTV (L1302_InitFinished - L1302_Init2) +PRINTT " / " +PRINTV (L1302_CheckFinished - L1302_Check2) +PRINTT "\n" + diff --git a/Source/l1304.asm b/Source/l1304.asm new file mode 100644 index 0000000..af5f953 --- /dev/null +++ b/Source/l1304.asm @@ -0,0 +1,97 @@ +; l1304.asm +; Generated 05.08.2001 by mlevel +; Modified 05.08.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1304Gfx",ROMX +;--------------------------------------------------------------------- +backinside_bg: + INCBIN "../fgbpix/charselect/backinside.bg" + +;--------------------------------------------------------------------- +SECTION "Level1304Section",ROMX +;--------------------------------------------------------------------- + +L1304_Contents:: + DW L1304_Load + DW L1304_Init + DW L1304_Check + DW L1304_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1304_Load: + DW ((L1304_LoadFinished - L1304_Load2)) ;size +L1304_Load2: + ld a,BANK(backinside_bg) + ld hl,backinside_bg + call LoadCinemaBG + + ld a,15 + call SetupFadeFromStandard + call WaitFade + + ld de,((.returnToShip-L1304_Load2)+levelCheckRAM) + call SetDialogForward + call SetDialogSkip + + ld a,150 + call Delay + +.returnToShip + call ClearDialogSkipForward + + ld a,15 + call SetupFadeToStandard + call WaitFade + + ld a,EXIT_D + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +L1304_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1304_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1304_Init: + DW ((L1304_InitFinished - L1304_Init2)) ;size +L1304_Init2: + ret + +L1304_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1304_Check: + DW ((L1304_CheckFinished - L1304_Check2)) ;size +L1304_Check2: + ret + +L1304_CheckFinished: +PRINTT "1304 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1304_LoadFinished - L1304_Load2) +PRINTT " / " +PRINTV (L1304_InitFinished - L1304_Init2) +PRINTT " / " +PRINTV (L1304_CheckFinished - L1304_Check2) +PRINTT "\n" + diff --git a/Source/l1312.asm b/Source/l1312.asm new file mode 100644 index 0000000..67913a1 --- /dev/null +++ b/Source/l1312.asm @@ -0,0 +1,59 @@ +; l1312.asm Crouton Homeworld 2 +; Generated 04.19.2001 by mlevel +; Modified 04.19.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1312Section",ROMX +;--------------------------------------------------------------------- + +L1312_Contents:: + DW L1312_Load + DW L1312_Init + DW L1312_Check + DW L1312_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1312_Load: + DW ((L1312_LoadFinished - L1312_Load2)) ;size +L1312_Load2: + call ParseMap + ret + +L1312_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1312_Map: +INCBIN "Data/Levels/L1312_crouton_hw2.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1312_Init: + DW ((L1312_InitFinished - L1312_Init2)) ;size +L1312_Init2: + ret + +L1312_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1312_Check: + DW ((L1312_CheckFinished - L1312_Check2)) ;size +L1312_Check2: + ret + +L1312_CheckFinished: +PRINTT "1312 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1312_LoadFinished - L1312_Load2) +PRINTT " / " +PRINTV (L1312_InitFinished - L1312_Init2) +PRINTT " / " +PRINTV (L1312_CheckFinished - L1312_Check2) +PRINTT "\n" + diff --git a/Source/l1400.asm b/Source/l1400.asm new file mode 100644 index 0000000..d696689 --- /dev/null +++ b/Source/l1400.asm @@ -0,0 +1,659 @@ +; l1400.asm Appomattox flying +; Generated 02.21.2001 by mlevel +; Modified 02.21.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_DESTZONE EQU 0 +VAR_DESTCOLOR EQU 1 +VAR_DESTBG EQU 3 +VAR_DESTBANK EQU 5 + +VAR_SELSTAGE EQU 6 + + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ1",ROMX +;--------------------------------------------------------------------- +lz_mist_bg:: + INCBIN "../fgbpix/appomattox/lz_mist.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ2",ROMX +;--------------------------------------------------------------------- +lz_ice1_bg:: + INCBIN "../fgbpix/appomattox/lz_ice1.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ3",ROMX +;--------------------------------------------------------------------- +lz_gate_bg:: + INCBIN "../fgbpix/appomattox/lz_gate.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ4",ROMX +;--------------------------------------------------------------------- +lz_brokenwall_bg:: + INCBIN "../fgbpix/appomattox/lz_brokenwall.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ5",ROMX +;--------------------------------------------------------------------- +lz_canyon_bg:: + INCBIN "../fgbpix/appomattox/lz_canyon.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ6",ROMX +;--------------------------------------------------------------------- +lz_desert_bg:: + INCBIN "../fgbpix/appomattox/lz_desert.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ7",ROMX +;--------------------------------------------------------------------- +lz_graves_bg:: + INCBIN "../fgbpix/appomattox/lz_graves.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ8",ROMX +;--------------------------------------------------------------------- +lz_icecubes_bg:: + INCBIN "../fgbpix/appomattox/lz_icecubes.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ9",ROMX +;--------------------------------------------------------------------- +lz_jungle_bg:: + INCBIN "../fgbpix/appomattox/lz_jungle.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ10",ROMX +;--------------------------------------------------------------------- +lz_mountains_bg:: + INCBIN "../fgbpix/appomattox/lz_mountains.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ11",ROMX +;--------------------------------------------------------------------- +lz_ocean_bg:: + INCBIN "../fgbpix/appomattox/lz_ocean.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ12",ROMX +;--------------------------------------------------------------------- +lz_pencil_bg:: + INCBIN "../fgbpix/appomattox/lz_pencil.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionLZ13",ROMX +;--------------------------------------------------------------------- +lz_treepath_bg:: + INCBIN "../fgbpix/appomattox/lz_treepath.bg" + + +;--------------------------------------------------------------------- +SECTION "Level1402SectionData3",ROMX +;--------------------------------------------------------------------- +lz_trees1_bg:: + INCBIN "../fgbpix/appomattox/lz_trees1.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402SectionData2",ROMX +;--------------------------------------------------------------------- +cloud0_bg:: + INCBIN "../fgbpix/appomattox/cloud0.bg" +cloud1_bg:: + INCBIN "../fgbpix/appomattox/cloud1.bg" +cloud2_bg:: + INCBIN "../fgbpix/appomattox/cloud2.bg" +cloud3_bg:: + INCBIN "../fgbpix/appomattox/cloud3.bg" +cloud4_bg:: + INCBIN "../fgbpix/appomattox/cloud4.bg" + +;--------------------------------------------------------------------- +SECTION "Level1400Section",ROMX +;--------------------------------------------------------------------- + +cloud5_bg:: + INCBIN "../fgbpix/appomattox/cloud5.bg" +cloud6_bg:: + INCBIN "../fgbpix/appomattox/cloud6.bg" +cloud7_bg:: + INCBIN "../fgbpix/appomattox/cloud7.bg" + +L1400_Contents:: + DW L1400_Load + DW L1400_Init + DW L1400_Check + DW L1400_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1400_Load: + DW ((L1400_LoadFinished - L1400_Load2)) ;size +L1400_Load2: + ld a,1 + ld [displayType],a + xor a + ld [scrollSprites],a + + ld a,200 + ldio [jiggleDuration],a + + ld a,1 + ldio [jiggleType],a ;take-off jiggle + + ld hl,musicEnabled ;disable track 4 + res 3,[hl] + + ld hl,((.engineSound1-L1400_Load2)+levelCheckRAM) + call PlaySound + + ld a,$11 + ldio [scrollSpeed],a + + + ld de,((.tookOff-L1400_Load2)+levelCheckRAM) + call SetDialogSkip + call SetDialogForward + + ld a,60 + call ((.delayAnimateWave-L1400_Load2)+levelCheckRAM) + + xor a + ld [camera_j],a + + ld hl,((.engineSound2-L1400_Load2)+levelCheckRAM) + call PlaySound + + ld a,69 + call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM) + +.tookOff + ld hl,((.silentSound4-L1400_Load2)+levelCheckRAM) + call PlaySound + call ClearSkipForward + xor a + ldio [jiggleDuration],a + ld [mapTop],a + ld a,1 + call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM) + + ld hl,musicEnabled ;enable track 4 + set 3,[hl] + + ld a,1 + call ((.setupFadeFromSky-L1400_Load2)+levelCheckRAM) + ld a,1 + call Delay + + ld de,((.skipToLanding-L1400_Load2)+levelCheckRAM) + call SetDialogSkip + call SetDialogForward + +.flying + ld a,BANK(cloud0_bg) + ld hl,cloud0_bg + call LoadCinemaBG + + ld a,15 + call ((.setupFadeToClouds-L1400_Load2)+levelCheckRAM) + + ld b,50 + ld c,1 +.cloudAnim + ;load next cloud frame + ld d,0 ;de = c*4 + ld e,c + sla e + rl d + sla e + rl d + ld hl,((.cloudFrames-L1400_Load2)+levelCheckRAM) + add hl,de + ld a,[hl+] ;mem bank of cloud frame + inc hl + push af + ld a,[hl+] + ld h,[hl] + ld l,a + pop af + call LoadCinemaBG + ;ld a,1 + ;call Delay + call ((.animateWave-L1400_Load2)+levelCheckRAM) + + ld a,c + inc a + and 7 + ld c,a + + ld a,b + cp 20 + jr nz,.afterStartFadeOutInClouds + + ld a,15 + call ((.setupFadeToSky-L1400_Load2)+levelCheckRAM) + +.afterStartFadeOutInClouds + dec b + jr nz,.cloudAnim + jr .naturalLanding + +.skipToLanding + call ClearSkipForward + ld a,15 + call ((.setupFadeToSky-L1400_Load2)+levelCheckRAM) + call WaitFade + +.naturalLanding + ld a,3 + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1400_Load2)+levelCheckRAM) + +;----Load picture of new landing zone--------------------------------- + ld hl,levelVars+VAR_DESTBANK + ld a,[hl-] + push af + ld a,[hl-] + ld l,[hl] + ld h,a + pop af + call LoadCinemaBG + ld a,1 + call Delay + + ld a,FADEBANK + ld [$ff70],a + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld a,1 + call FadeInit + call WaitFade + ld a,2 + call Delay + + ld a,190 + ldio [jiggleDuration],a + + ld a,1 + ldio [jiggleType],a ;take-off jiggle + + ld a,18 + ld [camera_j],a + + ld a,$11 + ldio [scrollSpeed],a + + ld a,[amLinkMaster] + bit 7,a + jr nz,.afterRemoteAppx + +.addRemoteAppx + ld a,LCHANGEAPPXMAP + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.addRemoteAppx ;must repeat + ld a,[appomattoxMapIndex] + call TransmitByte +.afterRemoteAppx + + ld de,((.landed-L1400_Load2)+levelCheckRAM) + call SetDialogSkip + call SetDialogForward + + ld hl,musicEnabled ;disable track 4 + res 3,[hl] + + ld hl,((.engineSound1-L1400_Load2)+levelCheckRAM) + call PlaySound + + ld a,40 + call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM) + + ld a,2 + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1400_Load2)+levelCheckRAM) + + ld a,40 + call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM) + + ld a,1 + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1400_Load2)+levelCheckRAM) + + ld hl,((.engineSound2-L1400_Load2)+levelCheckRAM) + call PlaySound + + ld a,30 + call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM) + + xor a + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1400_Load2)+levelCheckRAM) + + ld a,30 + call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM) + + ld hl,musicEnabled ;enable track 4 + set 3,[hl] + + call ((.powerDown-L1400_Load2)+levelCheckRAM) + +.landed + ld hl,((.silentSound4-L1400_Load2)+levelCheckRAM) + call PlaySound + xor a + ldio [jiggleDuration],a + call ClearSkipForward + ld a,15 + call SetupFadeToStandard + call WaitFade + call ClearDialog + ld a,2 + call Delay + + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,EXIT_N + ld [hl],a + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.powerDown + ;xor a + ;ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1400_Load2)+levelCheckRAM) + call ((.recticleOff-L1400_Load2)+levelCheckRAM) + call ((.horizonOff-L1400_Load2)+levelCheckRAM) + call ((.diagramOff-L1400_Load2)+levelCheckRAM) + ld a,30 + call ((.delayAnimateWave-L1400_Load2)+levelCheckRAM) + ret + +.silentSound4 + DB 4,0,0,0,$c0 + +.setPowerBar + ld a,[levelVars+VAR_SELSTAGE] + inc a + ld [musicRegisters+0],a + dec a + rlca ;sprite = stage*4 + 44 + rlca + add 44 + ld hl,spriteOAMBuffer+22*4+2 + ld [hl+],a + inc hl + inc hl + inc hl + add 2 + ld [hl],a + + ;ld hl,((.buttonSound-L1400_Load2)+levelCheckRAM) + ;call PlaySound + ret + +.horizonOff + ld de,4 + xor a + ld hl,spriteOAMBuffer+16*4 + ld c,4 +.horizonOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.horizonOffLoop + ret + +.recticleOff + ld de,4 + xor a + ld hl,spriteOAMBuffer+8*4 + ld c,8 +.recticleOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.recticleOffLoop + ret + +.diagramOff + ld hl,spriteOAMBuffer+20*4 + ld [hl],160 + ld hl,spriteOAMBuffer+21*4 + ld [hl],160 + ret + + +.delayAdjustHorizon + ld c,a + ld hl,spriteOAMBuffer+16*4 + ld de,4 +.delayLoop + call ((.animateWave-L1400_Load2)+levelCheckRAM) + + ld a,1 + call Delay + + ;horizon = 58 - ((mapTop*8+desiredPixelOffset_y)/4) + ld a,[mapTop] + rlca + rlca + rlca + ld b,a + ld a,[desiredPixelOffset_y] + add b + srl a + srl a + cpl + add 59 + + push hl + ld b,4 +.alterHorizonSpriteLoop + ld [hl],a + add hl,de + dec b + jr nz,.alterHorizonSpriteLoop + pop hl + dec c + jr nz,.delayLoop + ret + + +.setupFadeFromSky + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette bg7 to be bg7 color 0 + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld hl,fadeFinalPalette+8*7 + ld a,[hl+] + ld c,a + ld b,[hl] + ;call ((.getLandingInfo-L1400_Load2)+levelCheckRAM) + ld hl,fadeFinalPalette+8*7 + call ((.setBG7-L1400_Load2)+levelCheckRAM) + + pop af + call FadeInit + ret + +.setBG7 + ;copy bc to 4 entries at palette hl + ld hl,fadeFinalPalette+8*7 + ld a,4 +.setBG7Loop + ld [hl],c + inc hl + ld [hl],b + inc hl + dec a + jr nz,.setBG7Loop + ret + +.setupFadeToSky + push bc + push de + push hl + + push af + + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ld hl,levelVars+VAR_DESTZONE + ld a,[hl+] + ld [appomattoxMapIndex],a + ld a,[hl+] + ld b,[hl] + ld c,a + ld hl,fadeCurPalette+8*7 + call ((.setBG7-L1400_Load2)+levelCheckRAM) + pop af + call FadeInit + pop hl + pop de + pop bc + ret + +.defaultSkyColor + ld bc,$7e20 + ret + +.setupFadeToClouds + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette bg7 to be bg7 color 0 + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + pop af + call FadeInit + ret + +.cloudFrames + DW BANK(cloud0_bg), cloud0_bg, BANK(cloud1_bg), cloud1_bg + DW BANK(cloud2_bg), cloud2_bg, BANK(cloud3_bg), cloud3_bg + DW BANK(cloud4_bg), cloud4_bg, BANK(cloud5_bg), cloud5_bg + DW BANK(cloud6_bg), cloud6_bg, BANK(cloud7_bg), cloud7_bg + +.engineSound1 + DB 4,$00,$df,$a9,$80 ;looping/infinite + +.engineSound2 + DB 4,$00,$d7,$a9,$80 ;fades + +.buttonSound + DB 1,$79,$80,$f1,$00,$87 + +.byte8 + DB 8 + +.delayAnimateWave + push af + call ((.animateWave-L1400_Load2)+levelCheckRAM) + ld a,1 + call Delay + pop af + dec a + jr nz,.delayAnimateWave + ret + +.animateWave + push bc + push de + push hl + PUSHROM + ld a,BANK(appwaves0_dat) + call SetActiveROM + ld a,[levelVars+VAR_SELSTAGE] ;a=stage*8 + frame*2 + rlca + rlca + rlca + ld b,a + ldio a,[vblankTimer] + and %11000 + rrca + rrca + or b + add (((.waveFrameTable-L1400_Load2)+levelCheckRAM) & $ff) + ld l,a + ld a,0 + adc ((((.waveFrameTable-L1400_Load2)+levelCheckRAM)>>8) & $ff) + ld h,a + ld a,[hl+] + ld h,[hl] + ld l,a + ld de,$9420 + ld c,40 + ld a,1 + call VMemCopy + POPROM + pop hl + pop de + pop bc + ret + +.waveFrameTable + DW appwaves0_dat,appwaves0_dat+640,appwaves0_dat+640*2,appwaves0_dat+640*3 + DW appwaves1_dat,appwaves1_dat+640,appwaves1_dat+640*2,appwaves1_dat+640*3 + DW appwaves2_dat,appwaves2_dat+640,appwaves2_dat+640*2,appwaves2_dat+640*3 + DW appwaves3_dat,appwaves3_dat+640,appwaves3_dat+640*2,appwaves3_dat+640*3 + DW appwaves4_dat,appwaves4_dat+640,appwaves4_dat+640*2,appwaves4_dat+640*3 + +L1400_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1400_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1400_Init: + DW ((L1400_InitFinished - L1400_Init2)) ;size +L1400_Init2: + ret + +L1400_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1400_Check: + DW ((L1400_CheckFinished - L1400_Check2)) ;size +L1400_Check2: + ret + +L1400_CheckFinished: +PRINTT "1400 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1400_LoadFinished - L1400_Load2) +PRINTT " / " +PRINTV (L1400_InitFinished - L1400_Init2) +PRINTT " / " +PRINTV (L1400_CheckFinished - L1400_Check2) +PRINTT "\n" + diff --git a/Source/l1401.asm b/Source/l1401.asm new file mode 100644 index 0000000..c5a7b0c --- /dev/null +++ b/Source/l1401.asm @@ -0,0 +1,895 @@ +; l1401.asm Appomattox control panel / destination select +; Generated 02.27.2001 by mlevel +; Modified 02.27.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" +INCLUDE "Source/items.inc" + +VAR_DESTZONE EQU 0 +VAR_DESTCOLOR EQU 1 +VAR_DESTBG EQU 3 +VAR_DESTBANK EQU 5 + +;this var used in user.asm +VAR_SELSTAGE EQU 6 +VAR_STAGE0 EQU 7 +VAR_STAGE1 EQU 8 +VAR_STAGE2 EQU 9 +VAR_STAGE3 EQU 10 + +VAR_LASTDIR EQU 11 + + +;--------------------------------------------------------------------- +SECTION "Level1401Gfx2",ROMX +;--------------------------------------------------------------------- +nokey_bg:: + INCBIN "../fgbpix/appomattox/nokey.bg" + +;--------------------------------------------------------------------- +SECTION "Level1401Gfx",ROMX +;--------------------------------------------------------------------- +lz_zorhaus_bg:: + INCBIN "../fgbpix/appomattox/lz_zorhaus.bg" + +lz_palace_bg:: + INCBIN "../fgbpix/appomattox/lz_palace.bg" + +lz_croutongate_bg:: + INCBIN "../fgbpix/appomattox/lz_croutongate.bg" + +;--------------------------------------------------------------------- +SECTION "Level1401SectionDataControlPanel",ROMX +;--------------------------------------------------------------------- +controlpanel_bg:: + INCBIN "../fgbpix/appomattox/controlpanel.bg" + +panelsprites_sp:: + INCBIN "../fgbpix/appomattox/panelsprites.sp" + +;--------------------------------------------------------------------- +SECTION "Level1401Waves",ROMX +;--------------------------------------------------------------------- +appwaves0_dat:: + INCBIN "../fgbpix/appomattox/appwaves0.dat" + +appwaves1_dat:: + INCBIN "../fgbpix/appomattox/appwaves1.dat" + +appwaves2_dat:: + INCBIN "../fgbpix/appomattox/appwaves2.dat" + +appwaves3_dat:: + INCBIN "../fgbpix/appomattox/appwaves3.dat" + +appwaves4_dat:: + INCBIN "../fgbpix/appomattox/appwaves4.dat" + + +;--------------------------------------------------------------------- +SECTION "Level1401Section",ROMX +;--------------------------------------------------------------------- + +L1401_Contents:: + DW L1401_Load + DW L1401_Init + DW L1401_Check + DW L1401_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1401_Load: + DW ((L1401_LoadFinished - L1401_Load2)) ;size +L1401_Load2: + jr .afterDirectionTable + +.directionTable +;lookup table to convert 4-bit input into 0-7 or 8 (no dir) + ; DULR + DB 8 ;%0000 701 + DB 2 ;%0001 682 + DB 6 ;%0010 543 + DB 8 ;%0011 + DB 0 ;%0100 + DB 1 ;%0101 + DB 7 ;%0110 + DB 8 ;%0111 + DB 4 ;%1000 + DB 3 ;%1001 + DB 5 ;%1010 + DB 8 ;%1011 + DB 8 ;%1100 + DB 8 ;%1101 + DB 8 ;%1110 + DB 8 ;%1111 + +.afterDirectionTable + ld bc,ITEM_APPXKEY + call HasInventoryItem + jp z,((.noKey-L1401_Load2)+levelCheckRAM) + + ld a,1 + ld [musicRegisters+0],a + + ld a,BANK(takeoff_gbm) + ld hl,takeoff_gbm + call InitMusic + + ;----set up control panel window------------------------------ + ld a,BANK(controlpanel_bg) + ld hl,controlpanel_bg + call LoadCinemaBG + + ld a,BANK(panelsprites_sp) + ld hl,panelsprites_sp + call LoadCinemaSprite + + ;set last three positional indicators to blank sprite + ld hl,spriteOAMBuffer+8+2 + ld de,4 + ld a,36 + ld c,6 +.clearIndicators + ld [hl],a + add hl,de + dec c + jr nz,.clearIndicators + + ;set sprites 8-19 to be HUD instead of dest symbol + ld hl,spriteOAMBuffer+8*4+2 + ld a,64 + ld b,4 ;palette 4 for HUD + ld c,12 + ld de,3 +.spritesToHUD + ld [hl+],a + ld [hl],b + add hl,de + add 2 + dec c + jr nz,.spritesToHUD + + ;hide all HUD sprites except power bars + ld hl,spriteOAMBuffer+8*4 + ld b,144 ;offset to add to each sprite + ld c,14 + ld de,4 +.hideAllHUD + ld a,[hl] + add b + ld [hl],a + add hl,de + dec c + jr nz,.hideAllHUD + + ;copy panel to top half of map + ld bc,$1409 + ld de,$0000 + ld hl,$0009 + call CinemaBlitRect + ld a,1 + call Delay + + ;panel to dialog window + ld de,((.byte8-L1401_Load2)+levelCheckRAM) + call ShowDialogAtBottomCommon + + ld a,[appomattoxMapIndex] + call ((.getLandingInfo-L1401_Load2)+levelCheckRAM) + call LoadCinemaBG + + ld a,18 + ld [camera_j],a + ld a,9 + ld [mapTop],a + + ;someone already flying? + ld a,[appomattoxMapIndex] + or a + call z,((.backToAppx-L1401_Load2)+levelCheckRAM) + + ld a,15 + call SetupFadeFromStandard + + xor a + ld hl,levelVars+VAR_SELSTAGE + ld [hl+],a + ld [hl+],a ;stage 0 + ld [hl+],a ;stage 1 + ld [hl+],a ;stage 2 + ld [hl+],a ;stage 3 + ld a,8 + ld [hl+],a ;last direction pushed + +.setCoords + ld a,[myJoy] + and %1111 ;directions + add (((.directionTable-L1401_Load2)+levelCheckRAM) & $ff) + ld l,a + ld h,((((.directionTable-L1401_Load2)+levelCheckRAM)>>8)&$ff) + ld a,[hl] + push af + call ((.setHLCurStage-L1401_Load2)+levelCheckRAM) + pop af + ld [hl],a + ld a,[levelVars+VAR_LASTDIR] + cp [hl] + jr z,.afterPlayChangeSound + + ld a,[hl] + ld [levelVars+VAR_LASTDIR],a + ;ld hl,((.changeSound-L1401_Load2)+levelCheckRAM) + ;call PlaySound + +.afterPlayChangeSound + call ((.drawCurSymbol-L1401_Load2)+levelCheckRAM) + + ld a,[myJoy] + bit JOY_A_BIT,a + jr z,.checkUp + + call ((.changeStage-L1401_Load2)+levelCheckRAM) + call ((.drawCurSymbol-L1401_Load2)+levelCheckRAM) + ;ld hl,((.buttonSound-L1401_Load2)+levelCheckRAM) + ;call PlaySound + ld a,1 + call Delay + call ((.waitInputZero-L1401_Load2)+levelCheckRAM) + jr .setCoordsContinue + +.checkUp +IF 0 + bit JOY_UP_BIT,a + jr z,.checkDown + + call ((.previousSymbol-L1401_Load2)+levelCheckRAM) + call ((.drawCurSymbol-L1401_Load2)+levelCheckRAM) + call ((.waitInputZero-L1401_Load2)+levelCheckRAM) + jr .setCoordsContinue + +.checkDown + bit JOY_DOWN_BIT,a + jr z,.setCoordsContinue + + call ((.nextSymbol-L1401_Load2)+levelCheckRAM) + call ((.drawCurSymbol-L1401_Load2)+levelCheckRAM) + call ((.waitInputZero-L1401_Load2)+levelCheckRAM) +ENDC + +.setCoordsContinue + ld a,1 + call Delay + + ld a,[levelVars+VAR_SELSTAGE] + cp $ff + call z,((.backToAppx-L1401_Load2)+levelCheckRAM) + cp 4 + jr nz,.setCoords + + call ((.convertCoordsToMapIndex-L1401_Load2)+levelCheckRAM) + ld [levelVars+VAR_DESTZONE],a + call ((.getLandingInfo-L1401_Load2)+levelCheckRAM) + ld d,h + ld e,l + ld hl,levelVars+VAR_DESTCOLOR + ld [hl],c + inc hl + ld [hl],b + inc hl + ld [hl],e + inc hl + ld [hl],d + inc hl + ld [hl],a + + ld a,[amLinkMaster] + bit 7,a + jr nz,.afterRemoteAppx + +.removeRemoteAppx + ld a,LCHANGEAPPXMAP + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.removeRemoteAppx ;must repeat + xor a + call TransmitByte +.afterRemoteAppx + + ld hl,$1400 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,2 + ld [timeToChangeLevel],a + ret + +.animateWave + PUSHROM + ld a,BANK(appwaves0_dat) + call SetActiveROM + ld a,[levelVars+VAR_SELSTAGE] ;a=stage*8 + frame*2 + rlca + rlca + rlca + ld b,a + ldio a,[vblankTimer] + and %11000 + rrca + rrca + or b + add (((.waveFrameTable-L1401_Load2)+levelCheckRAM) & $ff) + ld l,a + ld a,0 + adc ((((.waveFrameTable-L1401_Load2)+levelCheckRAM)>>8) & $ff) + ld h,a + ld a,[hl+] + ld h,[hl] + ld l,a + ld de,$9420 + ld c,40 + ld a,1 + call VMemCopy + POPROM + ret + +.waveFrameTable + DW appwaves0_dat,appwaves0_dat+640,appwaves0_dat+640*2,appwaves0_dat+640*3 + DW appwaves1_dat,appwaves1_dat+640,appwaves1_dat+640*2,appwaves1_dat+640*3 + DW appwaves2_dat,appwaves2_dat+640,appwaves2_dat+640*2,appwaves2_dat+640*3 + DW appwaves3_dat,appwaves3_dat+640,appwaves3_dat+640*2,appwaves3_dat+640*3 + DW appwaves4_dat,appwaves4_dat+640,appwaves4_dat+640*2,appwaves4_dat+640*3 + +.convertCoordsToMapIndex + ;de = binary map coords + ld hl,levelVars+VAR_STAGE0 + ld a,[hl+] + swap a + ld d,a + ld a,[hl+] + or d + ld d,a + ld a,[hl+] + swap a + ld e,a + ld a,[hl+] + or e + ld e,a + + ld a,FLIGHTCODEBANK + ld [$ff70],a + ld hl,flightCode + ld c,[hl] ;num flight codes +.findCode + inc hl + ld a,[hl+] + cp e + jr nz,.noMatch + + ld a,[hl] + cp d + jr nz,.noMatch + + ;match! Get map index + inc hl + ld a,[hl] + ret + +.noMatch + inc hl + dec c + jr nz,.findCode + + ;go to default map + ld a,$71 + ret + +.waitInputZero + ld a,JOY_A ;|JOY_UP|JOY_DOWN + ld hl,myJoy + jp WaitInputZero + +.setHLCurStage + ld h,(((levelVars+VAR_STAGE0)>>8) & $ff) + ld a,[levelVars+VAR_SELSTAGE] + ld b,a + add ((levelVars+VAR_STAGE0) & $ff) + ld l,a + ld a,[hl] + ret + + +.drawCurSymbol + call ((.animateWave-L1401_Load2)+levelCheckRAM) + ;set power bar level + ld a,[levelVars+VAR_SELSTAGE] + inc a + ld [musicRegisters+0],a + dec a + push af + rlca ;sprite = stage*4 + 44 + rlca + add 44 + ld hl,spriteOAMBuffer+22*4+2 + ld [hl+],a + inc hl + inc hl + inc hl + add 2 + ld [hl],a + pop af + + ;turn on HUD sprites based on stage + push af + or a + jr nz,.checkHUD1 + + ;HUD 0 + call ((.diagramOff-L1401_Load2)+levelCheckRAM) + jr .afterCheckHUD + +.checkHUD1 + cp 1 + jr nz,.checkHUD2 + + call ((.diagramOn-L1401_Load2)+levelCheckRAM) + call ((.recticleOff-L1401_Load2)+levelCheckRAM) + jr .afterCheckHUD + +.checkHUD2 + cp 2 + jr nz,.checkHUD3 + + call ((.recticleOn-L1401_Load2)+levelCheckRAM) + call ((.horizonOff-L1401_Load2)+levelCheckRAM) + jr .afterCheckHUD + +.checkHUD3 + cp 3 + jr nz,.HUD4 + + call ((.horizonOn-L1401_Load2)+levelCheckRAM) + jr .afterCheckHUD + +.HUD4 + +.afterCheckHUD + pop af + cp 4 + ret z ;done + + call ((.setHLCurStage-L1401_Load2)+levelCheckRAM) + cp 8 + jr nz,.drawYellow + + ;draw blue + ld d,1 + jr .afterSetPalette + +.drawYellow + ld d,0 + +.afterSetPalette + ;alter palette based on time + push af + ldio a,[vblankTimer] + and %1000 + rrca + rrca + or d + ld d,a + pop af + rlca ;selection times four is sprite pattern index + rlca + ld c,a + ld a,b + rlca ;stage*8+2 is sprite index + rlca + rlca + add 2 + add (spriteOAMBuffer&$ff) + ld l,a + ld h,((spriteOAMBuffer>>8) & $ff) + ld [hl],c ;tile pattern + inc hl + ld [hl],d ;palette + inc hl + inc hl + inc hl + inc c + inc c + ld [hl],c + inc hl + ld [hl],d + ret + +.diagramOn + ld hl,spriteOAMBuffer+20*4 + ld [hl],16 + ld hl,spriteOAMBuffer+21*4 + ld [hl],16 + ret + +.diagramOff + ld hl,spriteOAMBuffer+20*4 + ld [hl],160 + ld hl,spriteOAMBuffer+21*4 + ld [hl],160 + ret + +.recticleOn + ld b,2 + ld de,4 + ld a,32 + ld hl,spriteOAMBuffer+8*4 +.recticleOnLoopOuter + ld c,4 +.recticleOnLoopInner + ld [hl],a + add hl,de + dec c + jr nz,.recticleOnLoopInner + add 16 + dec b + jr nz,.recticleOnLoopOuter + ret + +.recticleOff + ld de,4 + xor a + ld hl,spriteOAMBuffer+8*4 + ld c,8 +.recticleOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.recticleOffLoop + ret + +.horizonOn + ld de,4 + ld a,40 + ld hl,spriteOAMBuffer+16*4 + ld c,4 +.horizonOnLoop + ld [hl],a + add hl,de + dec c + jr nz,.horizonOnLoop + ret + +.horizonOff + ld de,4 + xor a + ld hl,spriteOAMBuffer+16*4 + ld c,4 +.horizonOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.horizonOffLoop + ret + + +;----changeStage------------------------------------------------------ +.changeStage + call ((.setHLCurStage-L1401_Load2)+levelCheckRAM) + cp 8 ;back arrow? + jr z,.backArrow + + ;forward + inc b + ld a,b + ld [levelVars+VAR_SELSTAGE],a + cp 4 + ret z ;all done! + + ;set this sprite to palette 0 and reset sprite for next level + ld a,[hl] + inc hl + ld [hl],a + ld a,b + rlca ;times eight + rlca + rlca + sub 5 + add (spriteOAMBuffer&$ff) + ld l,a + ld h,((spriteOAMBuffer>>8)&$ff) + ld de,4 + ld [hl],0 + add hl,de + ld [hl],0 + add hl,de + dec hl + ld [hl],0 + add hl,de + ld [hl],2 + + ret + +.backArrow + dec b + ld a,b + cp $ff + jr nz,.notPos0 + +.backToAppx + ;return to appomattox + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,EXIT_N + ld [hl],a + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ld a,15 + call SetupFadeToStandard + call WaitFade + call ClearDialog + ld a,1 + call Delay + pop hl ;pop return address, return from Load2 + ret + +.notPos0 + dec hl ;set stage[n-1] to be back arrow too + ld [hl],8 + ld [levelVars+VAR_SELSTAGE],a + + ;reset this sprite to blank before going back + inc a + rlca ;times eight + rlca + rlca + add 2 + add (spriteOAMBuffer&$ff) + ld l,a + ld h,((spriteOAMBuffer>>8)&$ff) + ld [hl],36 + ld de,4 + add hl,de + ld [hl],36 + + ;decrement rolloever sprite (8 & 9) xpos + ;ld hl,spriteOAMBuffer+8*4+1 + ;ld b,24 + ;ld a,[hl] + ;sub b + ;ld [hl],a + ;ld hl,spriteOAMBuffer+9*4+1 + ;ld a,[hl] + ;sub b + ;ld [hl],a + + ret + +;----getLandingInfo--------------------------------------------------- +.getLandingInfo +.checkGate + cp $71 + jr nz,.checkCroutonGate + + ld a,LEVELSTATEBANK + ldio [$ff70],a + ld a,[levelState+$71] + cp 6 + jr nz,.gate + + ;broken wall (blasted) + ld a,BANK(lz_brokenwall_bg) + ld hl,lz_brokenwall_bg + jp ((.defaultSkyColor-L1401_Load2)+levelCheckRAM) + +.gate + ld a,BANK(lz_gate_bg) + ld hl,lz_gate_bg + jp ((.defaultSkyColor-L1401_Load2)+levelCheckRAM) + +.checkCroutonGate + cp $0a + jr nz,.checkZorhaus + + ld a,BANK(lz_croutongate_bg) + ld hl,lz_croutongate_bg + ld bc,0 ;sky color + ret + +.checkZorhaus + cp $3d + jr nz,.checkPalace + + ld a,BANK(lz_zorhaus_bg) + ld hl,lz_zorhaus_bg + ld bc,$33f ;sky color + ret + +.checkPalace + cp $55 + jr nz,.checkTrees1 + + ld a,BANK(lz_palace_bg) + ld hl,lz_palace_bg + ld bc,$7eee ;sky color + ret + +.checkTrees1 + cp $81 + jr nz,.checkMist + ld a,BANK(lz_trees1_bg) + ld hl,lz_trees1_bg + jp ((.defaultSkyColor-L1401_Load2)+levelCheckRAM) + +.checkMist + cp $23 + jr nz,.checkIce1 + ld a,BANK(lz_mist_bg) + ld hl,lz_mist_bg + ld bc,$592e + ret + +.checkIce1 + cp $06 + jr nz,.checkCanyon + + ld a,BANK(lz_ice1_bg) + ld hl,lz_ice1_bg + ld bc,$7eed + ret + +.checkCanyon + cp $47 + jr nz,.checkDesert + + ld a,BANK(lz_canyon_bg) + ld hl,lz_canyon_bg + ld bc,$2fff + ret + +.checkDesert + cp $a3 + jr nz,.checkGraves + + ld a,BANK(lz_desert_bg) + ld hl,lz_desert_bg + ld bc,$2fff + ret + +.checkGraves + cp $a8 + jr nz,.checkIceCubes + + ld a,BANK(lz_graves_bg) + ld hl,lz_graves_bg + ld bc,0 + ret + +.checkIceCubes + cp $29 + jr nz,.checkJungle + + ld a,BANK(lz_icecubes_bg) + ld hl,lz_icecubes_bg + ld bc,$7e2b + ret + +.checkJungle + cp $59 + jr nz,.checkMountains + + ld a,BANK(lz_jungle_bg) + ld hl,lz_jungle_bg + ld bc,$a0 + ret + +.checkMountains + cp $66 + jr nz,.checkOcean + + ld a,BANK(lz_mountains_bg) + ld hl,lz_mountains_bg + ld bc,$487f + ret + +.checkOcean + cp $3a + jr nz,.checkTreePath + + ld a,BANK(lz_ocean_bg) + ld hl,lz_ocean_bg + ld bc,$121f + ret + +.checkTreePath + ;cp $c7 + ld a,BANK(lz_treepath_bg) + ld hl,lz_treepath_bg + +.defaultSkyColor + ld bc,$7e20 + ret + +.changeSound + DB 1,$31,$80,$c1,$00,$83 + +.buttonSound + DB 1,$79,$80,$f1,$00,$87 + +.byte8 + DB 8 + +.noKey + ld a,BANK(nokey_bg) + ld hl,nokey_bg + call LoadCinemaBG + + ld a,15 + call SetupFadeFromStandard + call WaitFade + + ld de,((.returnToShip-L1401_Load2)+levelCheckRAM) + call SetDialogForward + call SetDialogSkip + + ld a,150 + call Delay + +.returnToShip + call ClearDialogSkipForward + + ld a,15 + call SetupFadeToStandard + call WaitFade + + ld a,EXIT_N + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$1300 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +L1401_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1401_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1401_Init: + DW ((L1401_InitFinished - L1401_Init2)) ;size +L1401_Init2: + ret + +L1401_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1401_Check: + DW ((L1401_CheckFinished - L1401_Check2)) ;size +L1401_Check2: + ret + +L1401_CheckFinished: +PRINTT "1401 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1401_LoadFinished - L1401_Load2) +PRINTT " / " +PRINTV (L1401_InitFinished - L1401_Init2) +PRINTT " / " +PRINTV (L1401_CheckFinished - L1401_Check2) +PRINTT "\n" + diff --git a/Source/l1402.asm b/Source/l1402.asm new file mode 100644 index 0000000..f5fe786 --- /dev/null +++ b/Source/l1402.asm @@ -0,0 +1,595 @@ +; l1402.asm lady flower intervenes +; Generated 08.13.2000 by mlevel +; Modified 08.13.2000 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level1402SectionData2",ROMX +;--------------------------------------------------------------------- +spacepan_bg: + INCBIN "../fgbpix/distress/spacepan.bg" + +final_bg: + INCBIN "../fgbpix/distress/final.bg" + +;--------------------------------------------------------------------- +SECTION "Level1402Section",ROMX +;--------------------------------------------------------------------- + +L1402_Contents:: + DW L1402_Load + DW L1402_Init + DW L1402_Check + DW L1402_Map + +moon_mini_bg: + INCBIN "../fgbpix/distress/moon_mini.bg" + +palace_bg: + INCBIN "../fgbpix/distress/palace.bg" + +flowernight_bg: + INCBIN "../fgbpix/distress/flowernight.bg" + +fgstars_sp: + INCBIN "../fgbpix/distress/fgstars.sp" + +yacht_mini_sp: + INCBIN "../fgbpix/distress/yacht_mini.sp" + +bee_sp: + INCBIN "../fgbpix/distress/bee.sp" + +dialog: +lady_badNews_gtx: + INCBIN "Data/Dialog/distress/lady_badNews.gtx" + +lady_dispatched_gtx: + INCBIN "Data/Dialog/distress/lady_dispatched.gtx" + +lady_surrender_gtx: + INCBIN "Data/Dialog/distress/lady_surrender.gtx" + +lady_bigBullies_gtx: + INCBIN "Data/Dialog/distress/lady_bigBullies.gtx" + +lady_poorCaptain_gtx: + INCBIN "Data/Dialog/distress/lady_poorCaptain.gtx" + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +VAR_BEEPOS EQU 0 + +L1402_Load: + DW ((L1402_LoadFinished - L1402_Load2)) ;size +L1402_Load2: + ld hl,$1402 + call SetJoinMap + + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(moon_bg) + ld hl,moon_bg + call LoadCinemaBG + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ;center moon in stars + ;right top stars to bottom + ld bc,$1406 + ld hl,$1406 + ld de,$140c + call CinemaBlitRect + ld a,1 + call Delay + + ;left moon centered in right + ld bc,$140c + ld hl,$0000 + ld de,$1403 + call CinemaBlitRect + ld a,1 + call Delay + + ;right to left + ld bc,$1412 + ld hl,$1400 + ld de,$0000 + call CinemaBlitRect + ld a,1 + call Delay + + ld a,48 + call SetupFadeFromStandard + call WaitFade + + ld de,((.endCinema-L1402_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.showMoonMini-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,32 + call Delay + +.showMoonMini + call ((.fadeToBlack32-L1402_Load2)+levelCheckRAM) + + ld a,BANK(moon_mini_bg) + ld hl,moon_mini_bg + call LoadCinemaBG + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.showSpacePan-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,32 + call Delay + +.showSpacePan + call ((.fadeToBlack32-L1402_Load2)+levelCheckRAM) + + ld a,BANK(spacepan_bg) + ld hl,spacepan_bg + call LoadCinemaBG + + ld a,BANK(fgstars_sp) + ld hl,fgstars_sp + call LoadCinemaSprite + + ld a,1 + call Delay + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.showKiwi-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,32 + call Delay + + ld a,$44 + ld [scrollSpeed],a + + ld a,117 + ld [camera_i],a + + ld c,4 +.stars1 + ld a,1 + call Delay + ld d,2 + call ScrollSpritesLeft + dec c + jr nz,.stars1 + + + ld a,$82 + ld [scrollSpeed],a + + ld c,150 +.stars2 + ld a,1 + call Delay + ld a,[mapLeft] + cp 108 + jr nc,.afterStarScroll + ld d,4 + call ScrollSpritesLeft +.afterStarScroll + dec c + jr nz,.stars2 + +.showKiwi + call ((.fadeToBlack32-L1402_Load2)+levelCheckRAM) + call ResetSprites + + ld a,BANK(kiwi1_bg) + ld hl,kiwi1_bg + call LoadCinemaBG + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.showPalace1-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,32 + call Delay + +.showPalace1 + call ((.fadeToBlack32-L1402_Load2)+levelCheckRAM) + + ld a,BANK(palace_bg) + ld hl,palace_bg + call LoadCinemaBG + + ld a,BANK(yacht_mini_sp) + ld hl,yacht_mini_sp + call LoadCinemaSprite + ;set bg priority + ld hl,spriteOAMBuffer+3 + set 7,[hl] + ld hl,spriteOAMBuffer+7 + set 7,[hl] + + ld a,28 + ld [camera_j],a + ld a,18 + ld [mapTop],a + + ld a,1 + call Delay + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.showLadyFlower-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,32 + call Delay + +.showLadyFlower + call ((.fadeToBlack32-L1402_Load2)+levelCheckRAM) + call ResetSprites + + ld a,BANK(lady_flower_gbm) + ld hl,lady_flower_gbm + call InitMusic + + xor a + ld [levelVars + VAR_BEEPOS],a + + ld a,BANK(flowernight_bg) + ld hl,flowernight_bg + call LoadCinemaBG + + ld a,BANK(bee_sp) + ld hl,bee_sp + call LoadCinemaSprite + + ;clear the sprites of bee's other two frames + ld hl,spriteOAMBuffer+8 + xor a + ld [hl+],a ;ypos to zero + inc hl + inc hl + inc hl + ld [hl+],a ;ypos to zero + + ld d,16 + call ScrollSpritesRight + ld d,16 + call ScrollSpritesDown + + ld a,1 + call Delay + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.dialog1-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,1 ;get her to open her eyes + LONGCALLNOARGS AnimateLadyFlower + +.dialog1 + ld c,0 + DIALOGBOTTOM lady_badNews_gtx + ld de,((.dialog2-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld d,2 + LONGCALLNOARGS AnimateLadyFlower + +.dialog2 + ld c,0 + DIALOGBOTTOM lady_dispatched_gtx + ld de,((.dialog3-L1402_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateLadyFlower + +.dialog3 + ld c,0 + DIALOGBOTTOM lady_surrender_gtx + ld de,((.dialog4-L1402_Load2)+levelCheckRAM) + call SetDialogForward + ld d,6 + LONGCALLNOARGS AnimateLadyFlower + +.dialog4 + ld c,0 + DIALOGBOTTOM lady_bigBullies_gtx + ld de,((.dialog5-L1402_Load2)+levelCheckRAM) + call SetDialogForward + ld d,4 + LONGCALLNOARGS AnimateLadyFlower + +.dialog5 + ld c,0 + DIALOGBOTTOM lady_poorCaptain_gtx + ld de,((.showPalace2-L1402_Load2)+levelCheckRAM) + call SetDialogForward + ld d,6 + LONGCALLNOARGS AnimateLadyFlower + +.showPalace2 + call ClearDialog + ld a,32 + call SetupFadeToBlack +.waitFadeBee + call ((.animateBee-L1402_Load2)+levelCheckRAM) + ld a,1 + call Delay + ld a,[specialFX] + and FX_FADE + jr nz,.waitFadeBee + + call ResetSprites + ld a,BANK(palace_bg) + ld hl,palace_bg + call LoadCinemaBG + + ld a,BANK(yacht_mini_sp) + ld hl,yacht_mini_sp + call LoadCinemaSprite + + ld a,28 + ld [camera_j],a + ld a,18 + ld [mapTop],a + ld a,1 + call Delay + + ;set bg priority + ld hl,spriteOAMBuffer+3 + set 7,[hl] + ld hl,spriteOAMBuffer+7 + set 7,[hl] + + ;sprites don't scroll with the bg + xor a + ld [scrollSprites],a + ld a,$11 + ld [scrollSpeed],a ;bg scroll speed + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.endCinema-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ;----take off------------------------------------------------- + ;setup a fade + ld hl,gamePalette + ld de,fadeCurPalette + call CopyPalette32 + ld de,fadeFinalPalette + call CopyPalette32 + + ;set the final palette's first 6 BG colors to dark purple + ld c,6 + ld de,6 + ld hl,fadeFinalPalette +.setPurpleLoop + ld [hl],$04 + inc hl + ld [hl],$10 + inc hl + add hl,de + dec c + jr nz,.setPurpleLoop + ld a,14*8 + call FadeInit + + ;set the camera to pan up + xor a + ld [camera_j],a + + ld c,14*8 +.takeoffLoop + push bc + ld a,1 + call Delay + + ;scroll the ship sprites up 1 pixel + ;ld hl,spriteOAMBuffer + ;dec [hl] + ;ld hl,spriteOAMBuffer+4 + ;dec [hl] + + call ((.scrollMoons-L1402_Load2)+levelCheckRAM) + + pop bc + dec c + jr nz,.takeoffLoop + + ;accellerate offscreen + ld hl,fadeFinalPalette + ld de,fadeCurPalette + call CopyPalette32 + ld hl,fadeFinalPalette + call FadeCommonSetPaletteToBlack + ld hl,fadeFinalPalette + ld de,gamePalette + call CopyPalette32 + ld a,14*8 + call FadeInit + + ld c,14*8 +.accelerateLoop + push bc + ld a,1 + call Delay + + ;scroll the ship sprites up 1 pixel + ld hl,spriteOAMBuffer + dec [hl] + ld hl,spriteOAMBuffer+4 + dec [hl] + + call ((.scrollMoons-L1402_Load2)+levelCheckRAM) + call ((.scrollMoons-L1402_Load2)+levelCheckRAM) + + pop bc + dec c + jr nz,.accelerateLoop + +.endCinema + call ClearDialog + ld a,16 + call SetupFadeToBlack + call WaitFade + call ResetSprites + +IF 0 + ld a,BANK(final_bg) + ld hl,final_bg + call LoadCinemaBG + + call ((.fadeFromBlack32-L1402_Load2)+levelCheckRAM) + + ld de,((.backToMenu-L1402_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.backToMenu-L1402_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,150 + call Delay + +.backToMenu +;.infi + ;ld a,1 + ;call Delay ;upkeep so remote game won't freak +;jr .infi +ENDC + ;ld de,0 + ;call SetDialogSkip + ;call SetDialogForward + + ;ld a,16 + ;call SetupFadeToStandard + ;call WaitFade + + ;ld hl,fadeFinalPalette + ;ld de,gamePalette + ;call CopyPalette64 + ;ld de,fadeCurPalette + ;call CopyPalette64 + + ld hl,$1502 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,2 + ld [timeToChangeLevel],a + + ret + +;----support routines------------------------------------------------- +.fadeToBlack32 + ld a,32 + call SetupFadeToBlack + call WaitFade + ret + +.fadeFromBlack32 + ld a,32 + call SetupFadeFromBlack + call WaitFade + ret + +.animateBee + ;bee y position + ld a,[levelVars + VAR_BEEPOS] + add 2 + ld [levelVars + VAR_BEEPOS],a + cp 128 + jr c,.beeDirectionChosen + ld b,a ;a = 255 - a + ld a,255 + sub b +.beeDirectionChosen + sub 64 + rlca ;get sign bit in bit 7 + sra a + sra a + sra a + sra a + + ;adjust y coord + ld hl,spriteOAMBuffer + add 40 + ld [hl],a + ld hl,spriteOAMBuffer+4 + ld [hl],a + + ;adjust animation frame + ldio a,[updateTimer] + rlca + rlca + and %100 + ld hl,spriteOAMBuffer + 2 + ld [hl],a + inc a + inc a + ld hl,spriteOAMBuffer + 6 + ld [hl],a + + ret + +.scrollMoons + ;scroll the 13 moon sprites down 1 pixel every other time + ld a,[updateTimer] + and 1 + ret z + ld c,13 + ld hl,spriteOAMBuffer+8 +.scrollMoonsLoop + inc [hl] + ld a,l + add 4 + ld l,a + dec c + jr nz,.scrollMoonsLoop + ret + +L1402_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1402_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1402_Init: + DW ((L1402_InitFinished - L1402_Init2)) ;size +L1402_Init2: + ret + +L1402_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1402_Check: + DW ((L1402_CheckFinished - L1402_Check2)) ;size +L1402_Check2: + ret + +L1402_CheckFinished: +PRINTT "1402 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1402_LoadFinished - L1402_Load2) +PRINTT " / " +PRINTV (L1402_InitFinished - L1402_Init2) +PRINTT " / " +PRINTV (L1402_CheckFinished - L1402_Check2) +PRINTT "\n" + diff --git a/Source/l1403.asm b/Source/l1403.asm new file mode 100644 index 0000000..a87a328 --- /dev/null +++ b/Source/l1403.asm @@ -0,0 +1,604 @@ +; l1403.asm approaching kiwi +; Generated 03.08.2001 by mlevel +; Modified 03.08.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_DESTZONE EQU 0 +VAR_DESTCOLOR EQU 1 +VAR_DESTBG EQU 3 +VAR_DESTBANK EQU 5 + +;this var used in user.asm +VAR_SELSTAGE EQU 6 +VAR_EXHAUST_FRAME EQU 7 + + + + + +;--------------------------------------------------------------------- +SECTION "Level1403Section",ROMX +;--------------------------------------------------------------------- + +L1403_Contents:: + DW L1403_Load + DW L1403_Init + DW L1403_Check + DW L1403_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1403_Load: + DW ((L1403_LoadFinished - L1403_Load2)) ;size +L1403_Load2: + ld a,1 + ld [displayType],a + xor a + ld [scrollSprites],a + xor a + ld [levelVars+VAR_EXHAUST_FRAME],a + ld a,4 + ld [levelVars+VAR_SELSTAGE],a + + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + +;----"Thank you"------------------------------------------------------ +.thankYou + call ((.loadLadyFlowerOnScreen-L1403_Load2)+levelCheckRAM) + + ld de,((.seeYou-L1403_Load2)+levelCheckRAM) + call SetDialogForward + ld de,((.endCinema-L1403_Load2)+levelCheckRAM) + call SetDialogSkip + + ld c,0 + DIALOGBOTTOM lady_saved_gtx + + ld d,3 + LONGCALLNOARGS AnimateLadyFlowerDistress + +;----"See you"-------------------------------------------------------- +.seeYou + call ((.loadFlour-L1403_Load2)+levelCheckRAM) + + ld de,((.wait-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_seeyou_gtx + + call ((.animateFlourDriving3-L1403_Load2)+levelCheckRAM) + +;----"Wait..."-------------------------------------------------------- +.wait + call ((.loadLadyFlowerOnScreen-L1403_Load2)+levelCheckRAM) + + ld de,((.holdOut-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM lady_wait_gtx + + ld d,3 + LONGCALLNOARGS AnimateLadyFlowerDistress + +;----"Do you think you can hold out for a few days?"------------------ +.holdOut + call ((.loadFlour-L1403_Load2)+levelCheckRAM) + + ld de,((.whatNo-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_holdout_gtx + + call ((.animateFlourDriving4-L1403_Load2)+levelCheckRAM) + + +;----"What?! No!"----------------------------------------------------- +.whatNo + call ((.loadLadyFlowerOnScreen-L1403_Load2)+levelCheckRAM) + + ld de,((.sendShuttle-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM lady_no_gtx + + ld d,3 + LONGCALLNOARGS AnimateLadyFlowerDistress + +;----"BS, send over the shuttle"-------------------------------------- +.sendShuttle + call ((.loadFlour-L1403_Load2)+levelCheckRAM) + + ld de,((.toKiwi-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_shuttle_gtx + + call ((.animateFlourDriving4-L1403_Load2)+levelCheckRAM) + + ld a,60 + call SetupFadeToBlack + call WaitFade + +.toKiwi + call ((.quickToBlack-L1403_Load2)+levelCheckRAM) + ld de,((.approachKiwi-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,BANK(appomattox_tokiwi_bg) + ld hl,appomattox_tokiwi_bg + call ((.appxSideView-L1403_Load2)+levelCheckRAM) + ld a,16 + call SetupFadeToBlack + ld c,20 + call ((.appxScrollStarsWaitFade-L1403_Load2)+levelCheckRAM) + +;----Approach Kiwi---------------------------------------------------- +.approachKiwi + call ((.quickToBlack-L1403_Load2)+levelCheckRAM) + ld a,BANK(kiwi1_bg) + ld hl,kiwi1_bg + call LoadCinemaBG + + ld a,BANK(starfield_sprite_sp) + ld hl,starfield_sprite_sp + call LoadCinemaSprite + ld a,1 + call Delay + + ld de,((.controlPanel-L1403_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,16 + call SetupFadeFromBlack + call WaitFade + + ld b,30 + call (.animate_ship + (levelCheckRAM-L1403_Load2)) + + ld a,16 + call SetupFadeToBlackBGOnly + ld b,16 + call (.animate_ship + (levelCheckRAM-L1403_Load2)) + + ;kiwi 2 + ld a,BANK(kiwi2_bg) + ld hl,kiwi2_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromBlackBGOnly + ld c,16 + call ((.animate_ship-L1403_Load2)+levelCheckRAM) + + ld b,30 + call (.animate_ship + (levelCheckRAM-L1403_Load2)) + + ld a,16 + call SetupFadeToBlackBGOnly + ld b,16 + call (.animate_ship + (levelCheckRAM-L1403_Load2)) + + ;kiwi 3 + ld a,BANK(kiwi3_bg) + ld hl,kiwi3_bg + call LoadCinemaBG + + ld a,16 + call SetupFadeFromBlackBGOnly + + ld b,30 + call (.animate_ship + (levelCheckRAM-L1403_Load2)) + + ld a,16 + call ((.setupFadeFromSky-L1403_Load2)+levelCheckRAM) + ld b,16 + call (.animate_ship + (levelCheckRAM-L1403_Load2)) + +.endCinema +.controlPanel + ld a,2 + call ((.setupFadeFromSky-L1403_Load2)+levelCheckRAM) + call WaitFade + + call ResetSprites + + ;----set up control panel window------------------------------ + ld a,BANK(controlpanel_bg) + ld hl,controlpanel_bg + call LoadCinemaBG + + ld a,BANK(panelsprites_sp) + ld hl,panelsprites_sp + call LoadCinemaSprite + + ;set coords to be star flower wrench crouton + ld hl,spriteOAMBuffer+2 + ld de,4 + ld [hl],0 + add hl,de + ld [hl],2 + add hl,de + ld [hl],8 + add hl,de + ld [hl],10 + add hl,de + ld [hl],24 + add hl,de + ld [hl],26 + add hl,de + ld [hl],12 + add hl,de + ld [hl],14 + +IF 0 + ;set four positional indicators to blank sprite + ld hl,spriteOAMBuffer+2 + ld de,4 + ld a,36 + ld c,8 +.clearIndicators + ld [hl],a + add hl,de + dec c + jr nz,.clearIndicators +ENDC + + ;set sprites 8-19 to be HUD instead of dest symbol + ld hl,spriteOAMBuffer+8*4+2 + ld a,64 + ld b,4 ;palette 4 for HUD + ld c,12 + ld de,3 +.spritesToHUD + ld [hl+],a + ld [hl],b + add hl,de + add 2 + dec c + jr nz,.spritesToHUD + +IF 0 + ;hide all HUD sprites except power bars + ld hl,spriteOAMBuffer+8*4 + ld b,144 ;offset to add to each sprite + ld c,14 + ld de,4 +.hideAllHUD + ld a,[hl] + add b + ld [hl],a + add hl,de + dec c + jr nz,.hideAllHUD +ENDC + + ;copy panel to top half of map + ld bc,$1409 + ld de,$0000 + ld hl,$0009 + call CinemaBlitRect + ld a,1 + call Delay + + ;panel to dialog window + ld de,((.byte8-L1403_Load2)+levelCheckRAM) + call ShowDialogAtBottomCommon + ld a,1 + call Delay + + ld a,BANK(lz_gate_bg) + ld hl,lz_gate_bg + call LoadCinemaBG + + ;set up DEST info + ld hl,levelVars+VAR_DESTZONE + ld a,$71 + ld [hl+],a + ld a,$20 + ld [hl+],a + ld a,$7e + ld [hl+],a + ld a,(lz_gate_bg & $ff) + ld [hl+],a + ld a,((lz_gate_bg>>8) & $ff) + ld [hl+],a + ld a,BANK(lz_gate_bg) + ld [hl+],a + ld a,4 + ld [hl+],a + +.setPowerBar + ld hl,spriteOAMBuffer+22*4+2 + ld a,60 + ld de,4 + ld [hl],a + add hl,de + add 2 + ld [hl],a + + ;set horizon bar vertical + ld hl,spriteOAMBuffer+16*4 + ld a,$3a + ld [hl],a + add hl,de + ld [hl],a + add hl,de + ld [hl],a + add hl,de + ld [hl],a + + ld hl,$1503 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,2 + ld [timeToChangeLevel],a + + ret + +;--------------------------------------------------------------------- +;Support Routines +;--------------------------------------------------------------------- +.appxSideView + call LoadCinemaBG + + ld a,BANK(appomattox_big_sprites_sp) + ld hl,appomattox_big_sprites_sp + call LoadCinemaSprite + + ;change 1st 32 sprites to be BG priority + ld c,32 + ld hl,spriteOAMBuffer+8*4+3 + ld de,4 +.spritePriorityLoop + set 7,[hl] + add hl,de + dec c + jr nz,.spritePriorityLoop + + ld a,90 + call SetupFadeFromBlack + + ld c,160 +.appxScrollStarsWaitFade +.waitFade + ld a,1 + call Delay + call ((.scrollStars-L1403_Load2)+levelCheckRAM) + dec c + jr nz,.waitFade + + ret + +.quickToBlack + call BlackoutPalette + call ClearDialog + jp ResetSprites + +.quickFromBlack + ld a,1 + jp SetupFadeFromBlack + +.loadFlour + call ((.quickToBlack-L1403_Load2)+levelCheckRAM) + + ld a,BANK(flourdriving_bg) + ld hl,flourdriving_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1403_Load2)+levelCheckRAM) + ret + +.animateFlourDriving3 + ld d,3 + jr .animateFlourDrivingN + +.animateFlourDriving4 + ld d,4 +.animateFlourDrivingN + LONGCALLNOARGS AnimateFlourDriving + +.scrollStars + push bc + push de + push hl + + ;of 32 stars, scroll odd ones by one pixel and evens + ;by two + ld c,16 + ld de,4 + ld hl,spriteOAMBuffer+8*4+1 +.scrollStarsLoop + dec [hl] + add hl,de + dec [hl] + dec [hl] + add hl,de + dec c + jr nz,.scrollStarsLoop + + ;ping-pong exhaust + ld hl,levelVars+VAR_EXHAUST_FRAME + ld a,[updateTimer] + bit 0,a + jr nz,.gotCurFrame + + ;increment frame + ld a,[hl] + add 16 + cp 160 + jr nz,.wrapFrame + xor a +.wrapFrame + ld [hl],a + +.gotCurFrame + ld a,[hl] + ;sprite = curframe + 80 + cp 96 + jr c,.frameOkay + cpl + add 161 +.frameOkay + add 80 + ld hl,spriteOAMBuffer+2 + ld de,4 + ld c,8 +.setThrust + ld [hl],a + add 2 + add hl,de + dec c + jr nz,.setThrust + + pop hl + pop de + pop bc + ret + +.loadLadyFlowerOnScreen + call ((.loadLadyFlowerInDistress-L1403_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1403_Load2)+levelCheckRAM) + jp ((.ladyFaceToViewscreen-L1403_Load2)+levelCheckRAM) + +.loadLadyFlowerInDistress + call ((.quickToBlack-L1403_Load2)+levelCheckRAM) + + ld a,BANK(flowerviewscreen_bg) + ld hl,flowerviewscreen_bg + call LoadCinemaBG + ret + +.ladyFaceToViewscreen + ;put lady flower's face on + ld bc,$1009 + ld de,$0201 + ld hl,$1a12 + call CinemaBlitRect + ret + +.animate_ship + push bc +.animate_loop + push bc + ld a,1 + call Delay + pop bc + + ld a,b + and %10 ;thrust on or off? + + jr nz,.animate_thruston + call (.routine_thrustoff + (levelCheckRAM-L1403_Load2)) + jr .animate_check_done + +.animate_thruston + call (.routine_thruston + (levelCheckRAM-L1403_Load2)) + +.animate_check_done + dec b + jr nz,.animate_loop + + pop bc + + ret + +.routine_thrustoff + ;turn thrust off by setting sprites 0-5 to pattern 50 + ld hl,spriteOAMBuffer+2 + ld de,4 + ld a,50 + ld c,6 +.thrustOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.thrustOffLoop + ret + +.routine_thruston + ;turn thrust on by setting sprites 0-5 to patterns 0,2,4,6,8,10 + ld hl,spriteOAMBuffer+2 + ld de,4 + xor a + ld c,6 +.thrustOnLoop + ld [hl],a + inc a + inc a + add hl,de + dec c + jr nz,.thrustOnLoop + ret + +.setupFadeFromSky + push af + + ld a,FADEBANK + ld [$ff70],a + + ;ld hl,gamePalette + ;ld de,fadeCurPalette + ;call FadeCommonCopyPalette + + ;set all colors to be $7d80 + ld hl,fadeFinalPalette + ld c,64 +.setAll7d80 + ld [hl],$80 + inc hl + ld [hl],$7d + inc hl + dec c + jr nz,.setAll7d80 + + pop af + call FadeInit + ret + +.byte8 + DB 8 + +L1403_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1403_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1403_Init: + DW ((L1403_InitFinished - L1403_Init2)) ;size +L1403_Init2: + ret + +L1403_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1403_Check: + DW ((L1403_CheckFinished - L1403_Check2)) ;size +L1403_Check2: + ret + +L1403_CheckFinished: +PRINTT "1403 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1403_LoadFinished - L1403_Load2) +PRINTT " / " +PRINTV (L1403_InitFinished - L1403_Init2) +PRINTT " / " +PRINTV (L1403_CheckFinished - L1403_Check2) +PRINTT "\n" + diff --git a/Source/l1412.asm b/Source/l1412.asm new file mode 100644 index 0000000..bb85949 --- /dev/null +++ b/Source/l1412.asm @@ -0,0 +1,59 @@ +; l1412.asm Crouton Homeworld 3 +; Generated 04.19.2001 by mlevel +; Modified 04.19.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +;--------------------------------------------------------------------- +SECTION "Level1412Section",ROMX +;--------------------------------------------------------------------- + +L1412_Contents:: + DW L1412_Load + DW L1412_Init + DW L1412_Check + DW L1412_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1412_Load: + DW ((L1412_LoadFinished - L1412_Load2)) ;size +L1412_Load2: + call ParseMap + ret + +L1412_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1412_Map: +INCBIN "Data/Levels/L1412_crouton_hw3.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1412_Init: + DW ((L1412_InitFinished - L1412_Init2)) ;size +L1412_Init2: + ret + +L1412_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1412_Check: + DW ((L1412_CheckFinished - L1412_Check2)) ;size +L1412_Check2: + ret + +L1412_CheckFinished: +PRINTT "1412 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1412_LoadFinished - L1412_Load2) +PRINTT " / " +PRINTV (L1412_InitFinished - L1412_Init2) +PRINTT " / " +PRINTV (L1412_CheckFinished - L1412_Check2) +PRINTT "\n" + diff --git a/Source/l1500.asm b/Source/l1500.asm new file mode 100644 index 0000000..8f48cc3 --- /dev/null +++ b/Source/l1500.asm @@ -0,0 +1,139 @@ +; l1500.asm +; Generated 03.22.2001 by mlevel +; Modified 03.22.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;--------------------------------------------------------------------- +SECTION "Level1500Section",ROMX +;--------------------------------------------------------------------- + +deathscreen_bg: + INCBIN "../fgbpix/charselect/deathscreen.bg" + +L1500_Contents:: + DW L1500_Load + DW L1500_Init + DW L1500_Check + DW L1500_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1500_Load: + DW ((L1500_LoadFinished - L1500_Load2)) ;size +L1500_Load2: + ;ld a,1 + ;ld [displayType],a + ;xor a + ;ld [scrollSprites],a + + ;fade to black + ;ld a,15 + ;call SetupFadeToBlack + ;call WaitFade + + call ResetSprites + ld a,BANK(deathscreen_bg) + ld hl,deathscreen_bg + call LoadCinemaBG + + ld a,BANK(death_gbm) + ld hl,death_gbm + call InitMusic + + ld a,30 + call SetupFadeFromStandard + ld d,0 + call ((.setEnvCounter-L1500_Load2)+levelCheckRAM) + +.loop + dec c + jr nz,.afterChangeEnv + dec b + jr nz,.afterChangeEnv + + call ((.setEnvCounter-L1500_Load2)+levelCheckRAM) + ld a,d + add 1 + cp 6 + jr nz,.afterResetEffectType + + xor a + +.afterResetEffectType + ld d,a + cp 4 + jr c,.validEffect + + cpl + add 7 + +.validEffect + ld [envEffectType],a + +.afterChangeEnv + ld a,1 + call Delay + ld a,[myJoy] + and %11110000 + jr z,.loop + + ;ld de,HERODATA_ENTERDIR + ;add hl,de + ;ld a,EXIT_D + ;ld [hl],a + + ld a,15 + call SetupFadeToBlack + call WaitFade + call ResetSprites + + ;----respawn at the appropriate map---- + ld hl,curLevelIndex + ld a,[respawnMap] + ld [hl+],a + ld a,[respawnMap+1] + ld [hl+],a + ld a,1 + ld [timeToChangeLevel],a + ret + +.setEnvCounter + ld bc,$02d8 + ret + +L1500_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1500_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1500_Init: + DW ((L1500_InitFinished - L1500_Init2)) ;size +L1500_Init2: + ret + +L1500_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1500_Check: + DW ((L1500_CheckFinished - L1500_Check2)) ;size +L1500_Check2: + ret + +L1500_CheckFinished: +PRINTT "1500 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1500_LoadFinished - L1500_Load2) +PRINTT " / " +PRINTV (L1500_InitFinished - L1500_Init2) +PRINTT " / " +PRINTV (L1500_CheckFinished - L1500_Check2) +PRINTT "\n" + diff --git a/Source/l1502.asm b/Source/l1502.asm new file mode 100644 index 0000000..80d7b76 --- /dev/null +++ b/Source/l1502.asm @@ -0,0 +1,998 @@ +; l1502.asm approach to kiwi +; Generated 03.06.2001 by mlevel +; Modified 03.06.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VAR_EXHAUST_FRAME EQU 0 + +TEMPKLUDGE EQU 0 + + +;--------------------------------------------------------------------- +SECTION "Level1502Gfx1",ROMX +;--------------------------------------------------------------------- +flour_gang_mono_bg: + INCBIN "../fgbpix/distress/flour_gang_mono.bg" + +appomattox_big_bg: + INCBIN "../fgbpix/distress/appomattox_big.bg" + +appomattox_big_sprites_sp:: + INCBIN "../fgbpix/distress/appomattox_big_sprites.sp" + +nar_certaindanger_bg: + INCBIN "../fgbpix/distress/nar_certaindanger.bg" + + +;--------------------------------------------------------------------- +SECTION "Level1502Gfx2",ROMX +;--------------------------------------------------------------------- +flourdriving_bg:: + INCBIN "../fgbpix/distress/flourdriving.bg" + +ba_bg:: + INCBIN "../fgbpix/distress/ba.bg" + +bs_bg:: + INCBIN "../fgbpix/distress/bs.bg" + +;--------------------------------------------------------------------- +SECTION "Level1502Gfx3",ROMX +;--------------------------------------------------------------------- +remote_bg: + INCBIN "../fgbpix/distress/remote.bg" + +flowerviewscreen_bg:: + INCBIN "../fgbpix/distress/flowerviewscreen.bg" + +;--------------------------------------------------------------------- +SECTION "Level1502Gfx4",ROMX +;--------------------------------------------------------------------- +yacht_under_fire_bg: + INCBIN "../fgbpix/distress/yacht_under_fire.bg" + +pirate_sprites_sp: + INCBIN "../fgbpix/distress/pirate_sprites.sp" + +;--------------------------------------------------------------------- +SECTION "Level1502Gfx5",ROMX +;--------------------------------------------------------------------- +starfield_bg: + INCBIN "../fgbpix/intro/starfield.bg" + +starfield_sprite_sp:: + INCBIN "../fgbpix/intro/starfield_sprite.sp" + +;--------------------------------------------------------------------- +SECTION "Level1502Gfx6",ROMX +;--------------------------------------------------------------------- +appomattox_tokiwi_bg:: + INCBIN "../fgbpix/distress/appomattox_tokiwi.bg" + + +;--------------------------------------------------------------------- +SECTION "Level1502Dialog",ROMX +;--------------------------------------------------------------------- +dialog: +captain_cider_gtx: + INCBIN "Data/Dialog/distress/captain_cider.gtx" + +haiku_cider_gtx: + INCBIN "Data/Dialog/distress/haiku_cider.gtx" + +captain_whyglum_gtx: + INCBIN "Data/Dialog/distress/captain_whyglum.gtx" + +ba_surrendering_gtx: + INCBIN "Data/Dialog/distress/ba_surrendering.gtx" + +captain_winsome_gtx: + INCBIN "Data/Dialog/distress/captain_winsome.gtx" + +bs_nearKiwi_gtx: + INCBIN "Data/Dialog/distress/bs_nearKiwi.gtx" + +haiku_signal_gtx: + INCBIN "Data/Dialog/distress/haiku_signal.gtx" + +captain_showit_gtx: + INCBIN "Data/Dialog/distress/captain_showit.gtx" + +lady_help_gtx: + INCBIN "Data/Dialog/distress/lady_help.gtx" + +captain_goodness_gtx: + INCBIN "Data/Dialog/distress/captain_goodness.gtx" + +lady_saved_gtx:: + INCBIN "Data/Dialog/distress/lady_saved.gtx" + +captain_seeyou_gtx:: + INCBIN "Data/Dialog/distress/captain_seeyou.gtx" + +lady_wait_gtx:: + INCBIN "Data/Dialog/distress/lady_wait.gtx" + +captain_holdout_gtx:: + INCBIN "Data/Dialog/distress/captain_holdout.gtx" + +lady_no_gtx:: + INCBIN "Data/Dialog/distress/lady_no.gtx" + +captain_shuttle_gtx:: + INCBIN "Data/Dialog/distress/captain_shuttle.gtx" + +lady_stay_gtx:: + INCBIN "Data/Dialog/distress/lady_stay.gtx" + +captain_nostuff_gtx:: + INCBIN "Data/Dialog/distress/captain_nostuff.gtx" + +lady_please_gtx:: + INCBIN "Data/Dialog/distress/lady_please.gtx" + +captain_nothanks_gtx:: + INCBIN "Data/Dialog/distress/captain_nothanks.gtx" + +lady_must_gtx:: + INCBIN "Data/Dialog/distress/lady_must.gtx" + +captain_no_gtx:: + INCBIN "Data/Dialog/distress/captain_no.gtx" + +lady_insist_gtx:: + INCBIN "Data/Dialog/distress/lady_insist.gtx" + +captain_okay_gtx:: + INCBIN "Data/Dialog/distress/captain_okay.gtx" + +ba_goneawhile_gtx:: + INCBIN "Data/Dialog/distress/ba_goneawhile.gtx" + + +;--------------------------------------------------------------------- +SECTION "Level1502Section",ROMX +;--------------------------------------------------------------------- + +L1502_Contents:: + DW L1502_Load + DW L1502_Init + DW L1502_Check + DW L1502_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1502_Load: + DW ((L1502_LoadFinished - L1502_Load2)) ;size +L1502_Load2: + ;restore health of heroes on next game engine level + xor a + ld [hero0_health],a + ld [hero1_health],a + + ld a,BANK(dialog) + ld [dialogBank],a + + ld a,BANK(intro_cinema_gbm) + ld hl,intro_cinema_gbm + call InitMusic + + xor a + ld [levelVars+VAR_EXHAUST_FRAME],a + + ld de,((.endCinema-L1502_Load2)+levelCheckRAM) + call SetDialogSkip + ld de,((.flourGang-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,BANK(appomattox_big_bg) + ld hl,appomattox_big_bg + call ((.appxSideView-L1502_Load2)+levelCheckRAM) + +.flourGang + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(flour_gang_mono_bg) + ld hl,flour_gang_mono_bg + call LoadCinemaBG + + ld a,BANK(nar_certaindanger_bg) + ld hl,nar_certaindanger_bg + call LoadCinemaTextBox + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + call GfxShowStandardTextBox + + ld de,((.appleCider-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,120 + call Delay + +;----"Haiku, did you bring the apple cider?"-------------------------- +.appleCider + call ((.loadFlour-L1502_Load2)+levelCheckRAM) + call LoadFont + + ld de,((.iBroughtTheCider-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_cider_gtx + + call ((.animateFlourDriving4-L1502_Load2)+levelCheckRAM) + +;----"I brought the cider..."----------------------------------------- +.iBroughtTheCider + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(haiku_bg) + ld hl,haiku_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.whySoGlum-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM haiku_cider_gtx + + LONGCALLNOARGS AnimateHaiku + +;----Why so glum?----------------------------------------------------- +.whySoGlum + call ((.loadFlour-L1502_Load2)+levelCheckRAM) + + ld de,((.itSucks-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_whyglum_gtx + + call ((.animateFlourDriving3-L1502_Load2)+levelCheckRAM) + +;----It sucks that we're surrendering after only two weeks!----------- +.itSucks + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(ba_bg) + ld hl,ba_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.winSomeLoseSome-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM ba_surrendering_gtx + + ld d,4 + LONGCALLNOARGS AnimateBA + +;----"Well you win some you lose some"-------------------------------- +.winSomeLoseSome + call ((.loadFlour-L1502_Load2)+levelCheckRAM) + + ld de,((.nearPlanetKiwi-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_winsome_gtx + + call ((.animateFlourDriving4-L1502_Load2)+levelCheckRAM) + +;----"Near planet Kiwi and you-know-who"------------------------------ +.nearPlanetKiwi + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(bs_bg) + ld hl,bs_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.distressCallFromLadyFlower-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM bs_nearKiwi_gtx + + ld d,4 + LONGCALLNOARGS AnimateBS + +;----"Distress call from Lady Flower"--------------------------------- +.distressCallFromLadyFlower + call ((.loadHaiku-L1502_Load2)+levelCheckRAM) + + ld de,((.showIt-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM haiku_signal_gtx + + LONGCALLNOARGS AnimateHaiku + +;----"Show it on the big screen"-------------------------------------- +.showIt + call ((.loadFlour-L1502_Load2)+levelCheckRAM) + + ld de,((.remoteControl-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_showit_gtx + + call ((.animateFlourDriving4-L1502_Load2)+levelCheckRAM) + +;----Remote control turns on screen----------------------------------- +.remoteControl + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(remote_bg) + ld hl,remote_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.help-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + call ((.delay15-L1502_Load2)+levelCheckRAM) + + ld bc,$0809 + ld de,$0800 + ld hl,$1400 + call CinemaBlitRect + + call ((.delay15-L1502_Load2)+levelCheckRAM) + + ld bc,$0809 + ld de,$0800 + ld hl,$1409 + call CinemaBlitRect + + call ((.delay15-L1502_Load2)+levelCheckRAM) + +;----"Help, our ship is being attacked by a space gang!"--------------- +.help + ld a,BANK(alarm_gbm) + ld hl,alarm_gbm + call InitMusic + call ((.loadLadyFlowerInDistress-L1502_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.myGoodness-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ;flash "distress" + ld a,60 +.flashDistress + push af + ld hl,$1a00 + ld a,[updateTimer] + and %1000 + jr z,.flashFrame0 + ld l,$09 +.flashFrame0 + ld bc,$1009 + ld de,$0201 + call CinemaBlitRect + ld a,1 + call Delay + pop af + dec a + jr nz,.flashDistress + + call ((.ladyFaceToViewscreen-L1502_Load2)+levelCheckRAM) + + ld c,0 + DIALOGBOTTOM lady_help_gtx + + ld d,(3|$80) + LONGCALLNOARGS AnimateLadyFlowerDistress + +;----"Oh my goodness!"------------------------------------------------ +.myGoodness + call ((.loadFlour-L1502_Load2)+levelCheckRAM) + + ld de,((.yachtUnderFire-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_goodness_gtx + + call ((.animateFlourDriving3-L1502_Load2)+levelCheckRAM) + + ld a,120 + call SetupFadeToBlack + call WaitFade + +;----Yacht under fire------------------------------------------------- +.yachtUnderFire + call ((.loadYachtScene-L1502_Load2)+levelCheckRAM) + + ld a,60 + call SetupFadeFromBlack + + ld de,((.appxWarp-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,110/3 +.laserLoop + push af + + ld bc,$0303 ;laser 1 + ld de,$0802 + ld hl,$1400 + ld a,6*4 ;pirate sprite number + call ((.pirateFire-L1502_Load2)+levelCheckRAM) + + ld bc,$0702 ;laser 2 + ld de,$0a05 + ld hl,$1700 + ld a,9*4 ;pirate sprite number + call ((.pirateFire-L1502_Load2)+levelCheckRAM) + + ld a,3 + call Delay + + pop af + dec a + jr nz,.laserLoop + + ;----------------star field----------------------------- +.appxWarp + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + ld a,BANK(main_in_game_gbm) + ld hl,main_in_game_gbm + call InitMusic + + ld a,BANK(starfield_bg) + ld hl,starfield_bg + call LoadCinemaBG + + ld a,BANK(starfield_sprite_sp) + ld hl,starfield_sprite_sp + call LoadCinemaSprite + + ld d,48 + (TEMPKLUDGE/2) + 40 + call ScrollSpritesLeft + + ld d,48 + (TEMPKLUDGE/2) + 40 + call ScrollSpritesDown + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.piratesFlee-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ;number of cycles total + ld b,180 + TEMPKLUDGE + 20 + +.loop + push bc + + call (.clearPaletteToBlack + (levelCheckRAM-L1502_Load2)) + call (.cycleColors + (levelCheckRAM-L1502_Load2)) + ld a,1 + ld [paletteBufferReady],a + + ld a,1 + call Delay + pop bc + + ld a,b + and %00000001 + jr nz,.afterScrollSprites + + ld d,1 + call ScrollSpritesUp + + ld d,1 + call ScrollSpritesRight + +.afterScrollSprites + ld a,b + and %00000010 + jr nz,.turnThrustOn + + call (.routine_thrustoff + (levelCheckRAM-L1502_Load2)) + jr .afterThrust + +.turnThrustOn + call (.routine_thruston + (levelCheckRAM-L1502_Load2)) + +.afterThrust + dec b + jr nz,.loop + + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + +;----Pirates Flee----------------------------------------------------- +.piratesFlee + call ((.loadYachtScene-L1502_Load2)+levelCheckRAM) + + ;replace yacht with damaged yacht + ld bc,$0906 + ld de,$0303 + ld hl,$1f06 + call CinemaBlitRect + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + + ld de,((.endCinema-L1502_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,30 + call Delay + + ld c,15 +.fleeLoopSlow + ld d,1 + call ScrollSpritesLeft + ld b,24 + call ((.setPirateSpriteDuringFlee-L1502_Load2)+levelCheckRAM) + ld d,1 + call ScrollSpritesLeft + ld b,12 + call ((.setPirateSpriteDuringFlee-L1502_Load2)+levelCheckRAM) + dec c + jr nz,.fleeLoopSlow + + ld c,35 +.fleeLoopFast + ld d,2 + call ScrollSpritesLeft + ld b,24 + call ((.setPirateSpriteDuringFlee-L1502_Load2)+levelCheckRAM) + ld d,2 + call ScrollSpritesLeft + ld b,12 + call ((.setPirateSpriteDuringFlee-L1502_Load2)+levelCheckRAM) + dec c + jr nz,.fleeLoopFast + +.endCinema + call LoadFont + + ld hl,$1403 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,2 + ld [timeToChangeLevel],a + ret + +.loadYachtScene + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(yacht_under_fire_bg) + ld hl,yacht_under_fire_bg + call LoadCinemaBG + + ld a,BANK(pirate_sprites_sp) + ld hl,pirate_sprites_sp + call LoadCinemaSprite + + ret + +.pirateFire + push af + ld a,1 + call GetRandomNumMask + or a + jr nz,.firing + +.notFiring + ld a,l + add c + ld l,a + call CinemaBlitRect + ld b,12 + jr .setPirateSprite + +.firing + call CinemaBlitRect + ld b,30 + +.setPirateSprite + pop af +.setPirateSpriteAfterPop + add 2 + ld h,((spriteOAMBuffer>>8)&$ff) + ld l,a + ld de,4 + ld a,b + cp 30 + jr nz,.afterSound + cp [hl] + jr z,.afterSound ;same sound + + push hl + ld hl,((.pirateLaserSound-L1502_Load2)+levelCheckRAM) + call PlaySound + pop hl + ld a,b + +.afterSound + ld [hl],a + add hl,de + add 2 + ld [hl],a + add hl,de + add 2 + ld [hl],a + add hl,de + ret + +.setPirateSpriteDuringFlee + ld a,6*4 + call ((.setPirateSpriteAfterPop-L1502_Load2)+levelCheckRAM) + ld a,9*4 + call ((.setPirateSpriteAfterPop-L1502_Load2)+levelCheckRAM) + ld a,1 + call Delay + ret + + +.quickToBlack + call BlackoutPalette + call ClearDialog + jp ResetSprites + +.quickFromBlack + ld a,1 + jp SetupFadeFromBlack + +.delay15 + ld a,15 + jp Delay + +.loadLadyFlowerOnScreen + call ((.loadLadyFlowerInDistress-L1502_Load2)+levelCheckRAM) + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + jp ((.ladyFaceToViewscreen-L1502_Load2)+levelCheckRAM) + +.loadLadyFlowerInDistress + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(flowerviewscreen_bg) + ld hl,flowerviewscreen_bg + call LoadCinemaBG + ret + +.ladyFaceToViewscreen + ;put lady flower's face on + ld bc,$1009 + ld de,$0201 + ld hl,$1a12 + call CinemaBlitRect + ret + +.loadHaiku + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(haiku_bg) + ld hl,haiku_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + ret + +.loadFlour + call ((.quickToBlack-L1502_Load2)+levelCheckRAM) + + ld a,BANK(flourdriving_bg) + ld hl,flourdriving_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1502_Load2)+levelCheckRAM) + ret + +.animateFlourDriving3 + ld d,3 + jr .animateFlourDrivingN + +.animateFlourDriving4 + ld d,4 +.animateFlourDrivingN + LONGCALLNOARGS AnimateFlourDriving + + +.scrollStars + push bc + push de + push hl + + ;of 32 stars, scroll odd ones by one pixel and evens + ;by two + ld c,16 + ld de,4 + ld hl,spriteOAMBuffer+8*4+1 +.scrollStarsLoop + dec [hl] + add hl,de + dec [hl] + dec [hl] + add hl,de + dec c + jr nz,.scrollStarsLoop + + ;ping-pong exhaust + ld hl,levelVars+VAR_EXHAUST_FRAME + ld a,[updateTimer] + bit 0,a + jr nz,.gotCurFrame + + ;increment frame + ld a,[hl] + add 16 + cp 160 + jr nz,.wrapFrame + xor a +.wrapFrame + ld [hl],a + +.gotCurFrame + ld a,[hl] + ;sprite = curframe + 80 + cp 96 + jr c,.frameOkay + cpl + add 161 +.frameOkay + add 80 + ld hl,spriteOAMBuffer+2 + ld de,4 + ld c,8 +.setThrust + ld [hl],a + add 2 + add hl,de + dec c + jr nz,.setThrust + + pop hl + pop de + pop bc + ret + +.routine_thrustoff + ;turn thrust off by setting sprites 0-5 to pattern 50 + ld hl,spriteOAMBuffer+2 + ld de,4 + ld a,50 + ld c,6 +.thrustOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.thrustOffLoop + ret + +.routine_thruston + ;turn thrust on by setting sprites 0-5 to patterns 0,2,4,6,8,10 + ld hl,spriteOAMBuffer+2 + ld de,4 + xor a + ld c,6 +.thrustOnLoop + ld [hl],a + inc a + inc a + add hl,de + dec c + jr nz,.thrustOnLoop + ret + +.clearPaletteToBlack + push bc + ld c,64 + ld hl,fadeCurPalette + xor a +.clearPaletteLoop + ld [hl+],a + dec c + jr nz,.clearPaletteLoop + pop bc + ret + +.cycleColors + ;b is current cycle + ;set palettes 1,5, & 7 to cycle half-speed (1/8 speed of b) + ;rest to cycle full speed (1/4 speed of b) + push bc + + ;----------set full-speed palettes (0,2,3,4,6)------------ + ;color = (clock % 6) / 2 + ld c,6 + ld a,b +.getMod6 + cp c + jr c,.gotMod6 + sub c + jr .getMod6 +.gotMod6 + srl a ;divided by 2 yields 0-2 + ld c,a + inc c ;c is now 1-3 + + push bc + ld b,0 + xor a + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;0 + inc a + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;2 + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;3 + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;4 + inc a + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;6 + pop bc + + ;----------set half-speed palettes (1,5,7)--------------- + ;color = (clock % 12) / 4 + ld c,12 + ld a,b +.getMod12 + cp c + jr c,.gotMod12 + sub c + jr .getMod12 +.gotMod12 + srl a ;divided by 4 yields 0-2 + srl a + ld c,a + inc c ;c is now 1-3 + + push bc + ld b,1 + ld a,1 + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;1 + ld a,5 + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;5 + inc a + call (.setCycle + (levelCheckRAM-L1502_Load2)) ;7 + pop bc + + pop bc + ret + +.setCycle + ;a is palette # to set (0-7) + ;b is color flag (0=white, 1=grey) + ;c is color number to set (1-3) + push af + push hl + + ;(palette# * 4 + color) * 2 + 128 is first byte to set + rlca + rlca + add c + rlca + add 128 + ld l,a + ld h,((fadeCurPalette>>8) & $ff) + + ld a,b + cp 1 + jr z,.setToGrey + + ;set to white + ld a,$ff + ld [hl+],a + ld a,$7f + ld [hl],a + jr .done + +.setToGrey + ld a,$08 + ld [hl+],a + ld a,$21 + ld [hl],a + +.done + pop hl + pop af + inc a + ret + +.animate_ship + push bc + ld b,90 +.animate_loop + push bc + ld a,1 + call Delay + pop bc + + ld a,b + and %10 ;thrust on or off? + + jr nz,.animate_thruston + call (.routine_thrustoff + (levelCheckRAM-L1502_Load2)) + jr .animate_check_done + +.animate_thruston + call (.routine_thruston + (levelCheckRAM-L1502_Load2)) + +.animate_check_done + dec b + jr nz,.animate_loop + + pop bc + + ret + +.pirateLaserSound + DB 1,$3c,00,$f6,00,$87 + +.appxSideView + call LoadCinemaBG + + ld a,BANK(appomattox_big_sprites_sp) + ld hl,appomattox_big_sprites_sp + call LoadCinemaSprite + + ;change 1st 32 sprites to be BG priority + ld c,32 + ld hl,spriteOAMBuffer+8*4+3 + ld de,4 +.spritePriorityLoop + set 7,[hl] + add hl,de + dec c + jr nz,.spritePriorityLoop + + ld a,90 + call SetupFadeFromBlack + +.appxScrollStarsWaitFade + ld c,160 +.waitFade + ld a,1 + call Delay + call ((.scrollStars-L1502_Load2)+levelCheckRAM) + dec c + jr nz,.waitFade + + ret + + +L1502_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1502_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1502_Init: + DW ((L1502_InitFinished - L1502_Init2)) ;size +L1502_Init2: + ret + +L1502_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1502_Check: + DW ((L1502_CheckFinished - L1502_Check2)) ;size +L1502_Check2: + ret + +L1502_CheckFinished: +PRINTT "1502 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1502_LoadFinished - L1502_Load2) +PRINTT " / " +PRINTV (L1502_InitFinished - L1502_Init2) +PRINTT " / " +PRINTV (L1502_CheckFinished - L1502_Check2) +PRINTT "\n" + diff --git a/Source/l1503.asm b/Source/l1503.asm new file mode 100644 index 0000000..1773784 --- /dev/null +++ b/Source/l1503.asm @@ -0,0 +1,847 @@ +; l1503.asm +; Generated 03.08.2001 by mlevel +; Modified 03.08.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + + + + + +VAR_DESTZONE EQU 0 +VAR_DESTCOLOR EQU 1 +VAR_DESTBG EQU 3 +VAR_DESTBANK EQU 5 + +VAR_SELSTAGE EQU 6 + +;--------------------------------------------------------------------- +SECTION "Level1503Gfx1",ROMX +;--------------------------------------------------------------------- +downramp_bg:: + INCBIN "../fgbpix/distress/downramp.bg" + +downramp_sprites_sp: + INCBIN "../fgbpix/distress/downramp_sprites.sp" + +;--------------------------------------------------------------------- +SECTION "Level1503Gfx2",ROMX +;--------------------------------------------------------------------- +flower_and_flour_establishing_bg: + INCBIN "../fgbpix/distress/flower_and_flour_establishing.bg" + +flour_and_flower_bg: + INCBIN "../fgbpix/distress/flour_and_flower.bg" + +;--------------------------------------------------------------------- +SECTION "Level1503Section",ROMX +;--------------------------------------------------------------------- + +L1503_Contents:: + DW L1503_Load + DW L1503_Init + DW L1503_Check + DW L1503_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1503_Load: + DW ((L1503_LoadFinished - L1503_Load2)) ;size +L1503_Load2: + ld a,1 + ld [displayType],a + xor a + ld [scrollSprites],a + ld a,1 + call Delay + + ld de,((.landingOnKiwi-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld de,((.endCinema-L1503_Load2)+levelCheckRAM) + call SetDialogSkip + +.flying + ld a,BANK(cloud0_bg) + ld hl,cloud0_bg + call LoadCinemaBG + ld a,1 + call Delay + + ld a,15 + call ((.setupFadeToClouds-L1503_Load2)+levelCheckRAM) + + ld b,50 + ld c,1 +.cloudAnim + ;load next cloud frame + ld d,0 ;de = c*4 + ld e,c + sla e + rl d + sla e + rl d + ld hl,((.cloudFrames-L1503_Load2)+levelCheckRAM) + add hl,de + ld a,[hl+] ;mem bank of cloud frame + inc hl + push af + ld a,[hl+] + ld h,[hl] + ld l,a + pop af + call LoadCinemaBG + ;ld a,1 + ;call Delay + call ((.animateWave-L1503_Load2)+levelCheckRAM) + + ld a,c + inc a + and 7 + ld c,a + + ld a,b + cp 20 + jr nz,.afterStartFadeOutInClouds + + ld a,15 + call ((.setupFadeToSky-L1503_Load2)+levelCheckRAM) + +.afterStartFadeOutInClouds + dec b + jr nz,.cloudAnim + + ld a,3 + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1503_Load2)+levelCheckRAM) + +;----Load picture of new landing zone--------------------------------- + ld hl,levelVars+VAR_DESTBANK + ld a,[hl-] + push af + ld a,[hl-] + ld l,[hl] + ld h,a + pop af + call LoadCinemaBG + ld a,1 + call Delay + + ld a,FADEBANK + ld [$ff70],a + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld a,1 + call FadeInit + call WaitFade + ld a,2 + call Delay + + ld a,190 + ldio [jiggleDuration],a + + ld a,1 + ldio [jiggleType],a ;take-off jiggle + + ld a,18 + ld [camera_j],a + + ld a,$11 + ldio [scrollSpeed],a + + ld a,[amLinkMaster] + bit 7,a + jr nz,.afterRemoteAppx + +.addRemoteAppx + ld a,LCHANGEAPPXMAP + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.addRemoteAppx ;must repeat + ld a,[appomattoxMapIndex] + call TransmitByte +.afterRemoteAppx + + ld hl,musicEnabled ;disable track 4 + res 3,[hl] + + ld hl,((.engineSound1-L1503_Load2)+levelCheckRAM) + call PlaySound + + ld a,40 + call ((.delayAdjustHorizon-L1503_Load2)+levelCheckRAM) + + ld a,2 + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1503_Load2)+levelCheckRAM) + + ld a,15 + call ((.delayAdjustHorizon-L1503_Load2)+levelCheckRAM) + + ld a,1 + ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1503_Load2)+levelCheckRAM) + + ;ld hl,((.engineSound2-L1503_Load2)+levelCheckRAM) + ;call PlaySound + + ;ld a,30 + ;call ((.delayAdjustHorizon-L1503_Load2)+levelCheckRAM) + + ;xor a + ;ld [levelVars+VAR_SELSTAGE],a + ;call ((.setPowerBar-L1503_Load2)+levelCheckRAM) + + ;ld a,30 + ;call ((.delayAdjustHorizon-L1503_Load2)+levelCheckRAM) + + ;ld hl,musicEnabled ;enable track 4 + ;set 3,[hl] + + ;call ((.powerDown-L1503_Load2)+levelCheckRAM) + + ;----------------landing on kiwi----------------------- +.landingOnKiwi + xor a + ldio [jiggleDuration],a + call ((.delay2-L1503_Load2)+levelCheckRAM) + call BlackoutPalette + call ClearDialog + call ResetSprites + call ((.delay2-L1503_Load2)+levelCheckRAM) + + ld a,BANK(landing_bg_bg) + ld hl,landing_bg_bg + call LoadCinemaBG + ld a,BANK(landing_sprites_sp) + ld hl,landing_sprites_sp + call LoadCinemaSprite + + ld d,16 + call ScrollSpritesRight + ld d,48 + call ScrollSpritesUp + + ;set landing gear sprites and flame to off + ld hl,spriteOAMBuffer+6 + ld c,8 + xor a +.init_landing_loop + ld [hl+],a + inc hl + inc hl + inc hl + dec c + jr nz,.init_landing_loop + + ld de,((.ramp-L1503_Load2)+levelCheckRAM) + call SetDialogForward + + ;----------------animate descent of appomattox + + ;landing gear stowed + ld a,1 + call SetupFadeFromBlack + ld b,60 +.descent1 + push bc + ld a,1 + call Delay + ld d,1 + call ((.scrollAllSpritesDown-L1503_Load2)+levelCheckRAM) + pop bc + + dec b + jr nz,.descent1 + + ;landing gear half-out + ld hl,spriteOAMBuffer+(9*4)+2 + ld c,4 + ld a,2 +.gear_half_loop + ld [hl+],a ;change tile index + inc hl + inc hl + inc hl + add 2 + dec c + jr nz,.gear_half_loop + + ld b,5 +.descent2 + push bc + call ((.delay2-L1503_Load2)+levelCheckRAM) + ld d,1 + call ((.scrollAllSpritesDown-L1503_Load2)+levelCheckRAM) + pop bc + + dec b + jr nz,.descent2 + + ;landing gear full out + ld hl,spriteOAMBuffer+(9*4)+2 + ld c,4 + ld a,10 +.gear_full_loop + ld [hl+],a ;change tile index + inc hl + inc hl + inc hl + add 2 + dec c + jr nz,.gear_full_loop + + ld b,20 +.descent3 + push bc + call ((.delay2-L1503_Load2)+levelCheckRAM) + ld d,1 + call ((.scrollAllSpritesDown-L1503_Load2)+levelCheckRAM) + pop bc + + dec b + jr nz,.descent3 + + ;engine noise fade to off + ld hl,((.engineSound2-L1503_Load2)+levelCheckRAM) + call PlaySound + + ld b,10 +.descent4 + push bc + ld a,3 + call Delay + ld d,1 + call ((.scrollAllSpritesDown-L1503_Load2)+levelCheckRAM) + pop bc + + dec b + jr nz,.descent4 + + ld a,30 + call Delay + +;----Walking down the landing ramp------------------------------------ +.ramp + call BlackoutPalette + call ResetSprites + + ld a,BANK(downramp_bg) + ld hl,downramp_bg + call LoadCinemaBG + + ld a,BANK(downramp_sprites_sp) + ld hl,downramp_sprites_sp + call LoadCinemaSprite + + call ((.quickFromBlack-L1503_Load2)+levelCheckRAM) + + ld de,((.establishing-L1503_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,BANK(lady_flower_gbm) + ld hl,lady_flower_gbm + call InitMusic + + ld a,30 + call Delay + + ld c,9 +.walkDownRamp + ;second frame + ld a,8 + call ((.animateRampSprites-L1503_Load2)+levelCheckRAM) + ld d,2 + call ScrollSpritesRight + ld d,1 + call ScrollSpritesDown + ld a,5 + call Delay + + ;first frame + xor a + call ((.animateRampSprites-L1503_Load2)+levelCheckRAM) + ld d,2 + call ScrollSpritesRight + ld d,1 + call ScrollSpritesDown + ld a,5 + call Delay + dec c + jr nz,.walkDownRamp + + ld a,30 + call Delay + +.establishing + call BlackoutPalette + call ResetSprites + call LoadFont + + ld a,BANK(flower_and_flour_establishing_bg) + ld hl,flower_and_flour_establishing_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1503_Load2)+levelCheckRAM) + + ld de,((.talking-L1503_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,60 + call Delay + +.talking + ld a,$21 + ldio [scrollSpeed],a + call BlackoutPalette + + ld a,BANK(flour_and_flower_bg) + ld hl,flour_and_flower_bg + call LoadCinemaBG + + call ((.quickFromBlack-L1503_Load2)+levelCheckRAM) + + ld de,((.nostuff-L1503_Load2)+levelCheckRAM) + call SetDialogForward + + ld a,BANK(lady_stay_gtx) + ld [dialogBank],a + + ld c,0 + DIALOGBOTTOM lady_stay_gtx + ld d,3 + LONGCALLNOARGS AnimateLadyFlowerRamp + +.nostuff + call ((.panToCaptain-L1503_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM captain_nostuff_gtx + ld de,((.please-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld d,3 + LONGCALLNOARGS AnimateCaptainRamp + +.please + call ((.panToLady-L1503_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM lady_please_gtx + ld de,((.nothanks-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld d,3 + LONGCALLNOARGS AnimateLadyFlowerRamp + +.nothanks + call ((.panToCaptain-L1503_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM captain_nothanks_gtx + ld de,((.must-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld d,2 + LONGCALLNOARGS AnimateCaptainRamp + +.must + ;call StopMusic + ;ld hl,((.buzzerSound-L1503_Load2)+levelCheckRAM) + ;call PlaySound + ld a,$41 + ldio [scrollSpeed],a + call ((.panToLady-L1503_Load2)+levelCheckRAM) + ;ld a,30 + ;call Delay + ;ld a,15 + ;ldio [jiggleDuration],a + ld c,0 + DIALOGBOTTOM lady_must_gtx + ld de,((.no-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld d,2 + LONGCALLNOARGS AnimateLadyFlowerRamp + +.no + call ((.panToCaptain-L1503_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM captain_no_gtx + ld de,((.insist-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld d,2 + LONGCALLNOARGS AnimateCaptainRamp + +.insist + ld a,$82 + ldio [scrollSpeed],a + call ((.panToLady-L1503_Load2)+levelCheckRAM) + ld c,0 + DIALOGBOTTOM lady_insist_gtx + ld de,((.okay-L1503_Load2)+levelCheckRAM) + call SetDialogForward + ld d,2 + LONGCALLNOARGS AnimateLadyFlowerRamp + +.okay + +.endCinema + call BlackoutPalette + call ClearDialog + call ResetSprites + + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,EXIT_N + ld [hl],a + ld hl,$1504 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,2 + ld [timeToChangeLevel],a + ret + +.panToCaptain + ld a,21 + ld [camera_i],a + ld a,23 + ld [camera_j],a + ret + +.panToLady + xor a + ld [camera_i],a + ld [camera_j],a + ret + +.animateRampSprites + push bc + ld hl,spriteOAMBuffer+2 + ld de,4 + ld c,4 +.animateRampSpritesLoop + ld [hl],a + add hl,de + add 2 + dec c + jr nz,.animateRampSpritesLoop + pop bc + ret + +.powerDown + ;xor a + ;ld [levelVars+VAR_SELSTAGE],a + call ((.setPowerBar-L1503_Load2)+levelCheckRAM) + call ((.recticleOff-L1503_Load2)+levelCheckRAM) + call ((.horizonOff-L1503_Load2)+levelCheckRAM) + call ((.diagramOff-L1503_Load2)+levelCheckRAM) + ld a,30 + call ((.delayAnimateWave-L1503_Load2)+levelCheckRAM) + ret + +.setPowerBar + ld a,[levelVars+VAR_SELSTAGE] + inc a + ld [musicRegisters+0],a + dec a + rlca ;sprite = stage*4 + 44 + rlca + add 44 + ld hl,spriteOAMBuffer+22*4+2 + ld [hl+],a + inc hl + inc hl + inc hl + add 2 + ld [hl],a + + ret + +.horizonOff + ld de,4 + xor a + ld hl,spriteOAMBuffer+16*4 + ld c,4 +.horizonOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.horizonOffLoop + ret + +.recticleOff + ld de,4 + xor a + ld hl,spriteOAMBuffer+8*4 + ld c,8 +.recticleOffLoop + ld [hl],a + add hl,de + dec c + jr nz,.recticleOffLoop + ret + +.diagramOff + ld hl,spriteOAMBuffer+20*4 + ld [hl],160 + ld hl,spriteOAMBuffer+21*4 + ld [hl],160 + ret + + +.delayAdjustHorizon + ld c,a + ld hl,spriteOAMBuffer+16*4 + ld de,4 +.delayLoop + call ((.animateWave-L1503_Load2)+levelCheckRAM) + + ld a,1 + call Delay + + ;horizon = 58 - ((mapTop*8+desiredPixelOffset_y)/4) + ld a,[mapTop] + rlca + rlca + rlca + ld b,a + ld a,[desiredPixelOffset_y] + add b + srl a + srl a + cpl + add 59 + + push hl + ld b,4 +.alterHorizonSpriteLoop + ld [hl],a + add hl,de + dec b + jr nz,.alterHorizonSpriteLoop + pop hl + dec c + jr nz,.delayLoop + ret + + +.setupFadeFromSky + push af + + ld a,FADEBANK + ld [$ff70],a + + ;set final palette bg7 to be bg7 color 0 + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + ld hl,fadeFinalPalette+8*7 + ld a,$80 + ld c,a + ld b,$7d + ld hl,fadeFinalPalette+8*7 + call ((.setBG7-L1503_Load2)+levelCheckRAM) + + pop af + call FadeInit + ret + +.setBG7 + ;copy bc to 4 entries at palette hl + ld hl,fadeFinalPalette+8*7 + ld a,4 +.setBG7Loop + ld [hl],c + inc hl + ld [hl],b + inc hl + dec a + jr nz,.setBG7Loop + ret + +.setupFadeToSky + push bc + push de + push hl + + push af + + ld hl,gamePalette + ld de,fadeCurPalette + call FadeCommonCopyPalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ld hl,levelVars+VAR_DESTZONE + ld a,[hl+] + ld [appomattoxMapIndex],a + ld a,[hl+] + ld b,[hl] + ld c,a + ld hl,fadeCurPalette+8*7 + call ((.setBG7-L1503_Load2)+levelCheckRAM) + pop af + call FadeInit + pop hl + pop de + pop bc + ret + +.defaultSkyColor + ld bc,$7e20 + ret + +.setupFadeToClouds + push af + + ld a,FADEBANK + ld [$ff70],a + + ld hl,gamePalette + ld de,fadeFinalPalette + call FadeCommonCopyPalette + + ;set all colors to be $7d80 + ld hl,fadeCurPalette + ld c,64 +.setAll7d80 + ld [hl],$80 + inc hl + ld [hl],$7d + inc hl + dec c + jr nz,.setAll7d80 + + pop af + call FadeInit + ret + +.cloudFrames + DW BANK(cloud0_bg), cloud0_bg, BANK(cloud1_bg), cloud1_bg + DW BANK(cloud2_bg), cloud2_bg, BANK(cloud3_bg), cloud3_bg + DW BANK(cloud4_bg), cloud4_bg, BANK(cloud5_bg), cloud5_bg + DW BANK(cloud6_bg), cloud6_bg, BANK(cloud7_bg), cloud7_bg + +.engineSound1 + DB 4,$00,$df,$a9,$80 ;looping/infinite + +.engineSound2 + DB 4,$00,$d7,$a9,$80 ;fades + +.byte8 + DB 8 + +.delayAnimateWave + push af + call ((.animateWave-L1503_Load2)+levelCheckRAM) + ld a,1 + call Delay + pop af + dec a + jr nz,.delayAnimateWave + ret + +.animateWave + push bc + push de + push hl + PUSHROM + ld a,BANK(appwaves0_dat) + call SetActiveROM + ld a,[levelVars+VAR_SELSTAGE] ;a=stage*8 + frame*2 + rlca + rlca + rlca + ld b,a + ldio a,[vblankTimer] + and %11000 + rrca + rrca + or b + add (((.waveFrameTable-L1503_Load2)+levelCheckRAM) & $ff) + ld l,a + ld a,0 + adc ((((.waveFrameTable-L1503_Load2)+levelCheckRAM)>>8) & $ff) + ld h,a + ld a,[hl+] + ld h,[hl] + ld l,a + ld de,$9420 + ld c,40 + ld a,1 + call VMemCopy + POPROM + pop hl + pop de + pop bc + ret + +.waveFrameTable + DW appwaves0_dat,appwaves0_dat+640,appwaves0_dat+640*2,appwaves0_dat+640*3 + DW appwaves1_dat,appwaves1_dat+640,appwaves1_dat+640*2,appwaves1_dat+640*3 + DW appwaves2_dat,appwaves2_dat+640,appwaves2_dat+640*2,appwaves2_dat+640*3 + DW appwaves3_dat,appwaves3_dat+640,appwaves3_dat+640*2,appwaves3_dat+640*3 + DW appwaves4_dat,appwaves4_dat+640,appwaves4_dat+640*2,appwaves4_dat+640*3 + +.scrollAllSpritesDown + push bc + push de + push hl + + ld hl,spriteOAMBuffer + ld c,35 +.scrollDownLoop + ld a,[hl] + add d + ld [hl+],a + inc hl + inc hl + inc hl + dec c + jr nz,.scrollDownLoop + + pop hl + pop de + pop bc + ret + +.quickFromBlack + ld a,1 + jp SetupFadeFromBlack + +.delay2 + ld a,2 + jp Delay + +L1503_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1503_Map: + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1503_Init: + DW ((L1503_InitFinished - L1503_Init2)) ;size +L1503_Init2: + ret + +L1503_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1503_Check: + DW ((L1503_CheckFinished - L1503_Check2)) ;size +L1503_Check2: + ret + +L1503_CheckFinished: +PRINTT "1503 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1503_LoadFinished - L1503_Load2) +PRINTT " / " +PRINTV (L1503_InitFinished - L1503_Init2) +PRINTT " / " +PRINTV (L1503_CheckFinished - L1503_Check2) +PRINTT "\n" + diff --git a/Source/l1504.asm b/Source/l1504.asm new file mode 100644 index 0000000..4e65460 --- /dev/null +++ b/Source/l1504.asm @@ -0,0 +1,355 @@ +; l1504.asm kidnap +; Generated 03.09.2001 by mlevel +; Modified 03.09.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +LIGHTINDEX EQU 49 +LADY_INDEX EQU 60 +CAPTAIN_INDEX EQU 61 + +VAR_LIGHT EQU 0 + +STATE_WAITFOREXIT EQU 2 +STATE_FIRSTEXITED EQU 3 +STATE_BOTHEXITED EQU 4 + + + + + +;--------------------------------------------------------------------- +SECTION "Level1504Gfx1",ROMX +;--------------------------------------------------------------------- +at_gunpoint_bg: + INCBIN "../fgbpix/distress/at_gunpoint.bg" + +at_gunpoint_sprites_sp: + INCBIN "../fgbpix/distress/at_gunpoint_sprites.sp" + +;--------------------------------------------------------------------- +SECTION "Level1504Section",ROMX +;--------------------------------------------------------------------- + +L1504_Contents:: + DW L1504_Load + DW L1504_Init + DW L1504_Check + DW L1504_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1504_Load: + DW ((L1504_LoadFinished - L1504_Load2)) ;size +L1504_Load2: + call State0To1 + cp 1 + jr z,.cinema + + ;map + jp ParseMap + +.cinema + ld a,1 + ld [displayType],a + xor a + ld [scrollSprites],a + ld a,BANK(captain_okay_gtx) + ld [dialogBank],a + + call LoadFont + + ;call StopMusic + ld a,BANK(lady_flower_gbm) + ld hl,lady_flower_gbm + call InitMusic + +;----Points gun at flour---------------------------------------------- + ld a,BANK(at_gunpoint_bg) + ld hl,at_gunpoint_bg + call LoadCinemaBG + + ld a,BANK(at_gunpoint_sprites_sp) + ld hl,at_gunpoint_sprites_sp + call LoadCinemaSprite + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld de,((.okay-L1504_Load2)+levelCheckRAM) + call SetDialogForward + ld de,((.endCinema-L1504_Load2)+levelCheckRAM) + call SetDialogSkip + + + ld c,80 +.scrollGun + ld d,1 + call ScrollSpritesRight + ld a,1 + call Delay + dec c + jr nz,.scrollGun + + ld a,60 + call Delay + +.okay + call ((.showGunForSure-L1504_Load2)+levelCheckRAM) + ld de,((.endCinema-L1504_Load2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM captain_okay_gtx + + ld d,2 + LONGCALLNOARGS AnimateCaptainGunpoint + +.endCinema + call ClearDialog + call ResetSprites + ld a,15 + call SetupFadeToStandard + + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,EXIT_D + ld [hl],a + ld a,2 + ldio [mapState],a + dec a + ld [timeToChangeLevel],a + + ret + +.showGunForSure + ld hl,spriteOAMBuffer + 1 + ld a,[hl] ;negative of first sprite x pos + 8 + cpl + add 9 + ld d,a + call ScrollSpritesRight ;is amount to scroll sprites + + ret + +L1504_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1504_Map: + INCBIN "Data/Levels/L1504_landing.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1504_Init: + DW ((L1504_InitFinished - L1504_Init2)) ;size +L1504_Init2: + ld a,0 + ld hl,((.heroInvisible - L1504_Init2) + levelCheckRAM) + call CheckEachHero + + ld a,1 + ld [heroesIdle],a + + ld a,[bgTileMap+LIGHTINDEX] + ld [levelVars+VAR_LIGHT],a + + ld c,CAPTAIN_INDEX + call GetFirst + ld hl,$d04A + call SetActorDestLoc + + ld c,LADY_INDEX + call GetFirst + ld hl,$d04A + call SetActorDestLoc + + ld a,16 + ld [mapLeft],a + ld a,$11 + ldio [scrollSpeed],a + + ret + +.heroInvisible + or a + ret z + ld c,a + call GetFirst + call GetFacing + ld c,a + call RemoveFromMap + ret + +L1504_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1504_Check: + DW ((L1504_CheckFinished - L1504_Check2)) ;size +L1504_Check2: + call ((.animateLandingLights-L1504_Check2)+levelCheckRAM) + + ldio a,[mapState] + cp STATE_BOTHEXITED + jr z,.bothExited + + ld c,CAPTAIN_INDEX + call ((.checkActorExit-L1504_Check2)+levelCheckRAM) + + ld c,LADY_INDEX + call ((.checkActorExit-L1504_Check2)+levelCheckRAM) + ret + +.bothExited + ld de,((.downramp-L1504_Check2)+levelCheckRAM) + call SetDialogForward + ld de,((.endCinema-L1504_Check2)+levelCheckRAM) + call SetDialogSkip + + ld c,60 +.delayAfterExitGate + ld a,1 + call Delay + push bc + call ((.animateLandingLights-L1504_Check2)+levelCheckRAM) + pop bc + dec c + jr nz,.delayAfterExitGate + + +.downramp + call ResetSprites + call BlackoutPalette + + ld a,BANK(downramp_bg) + ld hl,downramp_bg + call LoadCinemaBG + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld de,((.ba_awhile-L1504_Check2)+levelCheckRAM) + call SetDialogForward + + ld a,90 + call Delay + +.ba_awhile + call BlackoutPalette + + ld a,BANK(ba_bg) + ld hl,ba_bg + call LoadCinemaBG + + ld a,1 + call SetupFadeFromBlack + call WaitFade + + ld de,((.endCinema-L1504_Check2)+levelCheckRAM) + call SetDialogForward + + ld c,0 + DIALOGBOTTOM ba_goneawhile_gtx + + ld d,3 + LONGCALLNOARGS AnimateBA + + ;ld a,15 + ;call SetupFadeToStandard + ;call WaitFade + +.endCinema + call ClearDialogSkipForward + ;ld a,15 + ;call SetupFadeToBlack + ;call WaitFade + + ld hl,$1100 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a + + ret + +.checkActorExit + call GetFirst + or a + ret z ;already exited + + call GetCurLocation + call ConvertLocHLToXY + + ld a,l ;y coord + cp 1 + ret nz ;not at gate exit + + ld b,METHOD_DIE + call CallMethod + + ld hl,disappearSound + call PlaySound + + ld hl,mapState ;at exit, mapState++ + inc [hl] + ld a,[hl] + cp STATE_BOTHEXITED + ret nz + + ;close the gate + ld bc,$0202 ;blit the closed gate + ld de,$0901 + ld hl,$2409 + call BlitMap + + ld a,5 + call Delay + ld hl,closeGateSound + call PlaySound + ret + + +.animateLandingLights + ldio a,[updateTimer] + rrca + rrca + and %11 + ld b,a + + ld a,[levelVars+VAR_LIGHT] + ld c,a + ld d,0 + + ld hl,bgTileMap+LIGHTINDEX + call ((.animateLight-L1504_Check2)+levelCheckRAM) + call ((.animateLight-L1504_Check2)+levelCheckRAM) + call ((.animateLight-L1504_Check2)+levelCheckRAM) + call ((.animateLight-L1504_Check2)+levelCheckRAM) + ret + +.animateLight + ld a,d + add b + and %11 + add c + ld [hl+],a + inc d + ret + + +L1504_CheckFinished: +PRINTT "1504 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1504_LoadFinished - L1504_Load2) +PRINTT " / " +PRINTV (L1504_InitFinished - L1504_Init2) +PRINTT " / " +PRINTV (L1504_CheckFinished - L1504_Check2) +PRINTT "\n" + diff --git a/Source/l1512.asm b/Source/l1512.asm new file mode 100644 index 0000000..75e0c60 --- /dev/null +++ b/Source/l1512.asm @@ -0,0 +1,210 @@ +; l1512.asm Crouton Homeworld 4 +; Generated 04.19.2001 by mlevel +; Modified 04.19.2001 by Abe Pralle + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + +VFENCE_INDEX EQU 19 + +VAR_BGKILLED EQU 15 + + +;--------------------------------------------------------------------- +SECTION "Level1512Section",ROMX +;--------------------------------------------------------------------- + +L1512_Contents:: + DW L1512_Load + DW L1512_Init + DW L1512_Check + DW L1512_Map + +;--------------------------------------------------------------------- +; Load +;--------------------------------------------------------------------- +L1512_Load: + DW ((L1512_LoadFinished - L1512_Load2)) ;size +L1512_Load2: + call ParseMap + ret + +L1512_LoadFinished: +;--------------------------------------------------------------------- +; Map +;--------------------------------------------------------------------- +L1512_Map: +INCBIN "Data/Levels/L1512_crouton_hw4.lvl" + +;--------------------------------------------------------------------- +; Init +;--------------------------------------------------------------------- +L1512_Init: + DW ((L1512_InitFinished - L1512_Init2)) ;size +L1512_Init2: + xor a + ld [levelVars+VAR_BGKILLED],a + ret + +L1512_InitFinished: +;--------------------------------------------------------------------- +; Check +;--------------------------------------------------------------------- +L1512_Check: + DW ((L1512_CheckFinished - L1512_Check2)) ;size +L1512_Check2: + call ((.animateFence-L1512_Check2)+levelCheckRAM) + call ((.checkBlowGenerators-L1512_Check2)+levelCheckRAM) + ret + +.checkBlowGenerators + ld a,[levelVars+VAR_BGKILLED] + or a + ret z + + ld a,[hero0_index] + or a + jr z,.checkHero1 + + ;change hero 0 to actor & walk to teleport + ld c,a + call GetFirst + ld hl,$d0e4 + call SetActorDestLoc + call GetClassMethodTable + ld b,h + ld c,l + ld de,classActor + call ChangeClass + +.checkHero1 + ld a,[hero1_index] + or a + jr z,.startExplosions + + ;change hero 1 to actor & walk to teleport + ld c,a + call GetFirst + ld hl,$d104 + call SetActorDestLoc + call GetClassMethodTable + ld b,h + ld c,l + ld de,classActor + call ChangeClass + +.startExplosions + ld hl,$d0cb + call ((.explodeGenerator-L1512_Check2)+levelCheckRAM) + call ((.animateDelay-L1512_Check2)+levelCheckRAM) + ld hl,$d0ce + call ((.explodeGenerator-L1512_Check2)+levelCheckRAM) + call ((.animateDelay-L1512_Check2)+levelCheckRAM) + ld hl,$d0d1 + call ((.explodeGenerator-L1512_Check2)+levelCheckRAM) + ld hl,$d12e + call ((.explodeGenerator-L1512_Check2)+levelCheckRAM) + call ((.animateDelay-L1512_Check2)+levelCheckRAM) + + ld hl,$d0d4 + call ((.explodeGenerator-L1512_Check2)+levelCheckRAM) + ld hl,$d131 + call ((.explodeGenerator-L1512_Check2)+levelCheckRAM) + call ((.animateDelay-L1512_Check2)+levelCheckRAM) + + ld a,EXIT_U + ld [hero0_enterLevelFacing],a + ld [hero1_enterLevelFacing],a + + ld hl,$0612 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + + ld a,EXIT_U + call YankRemotePlayer + + ld a,1 + ld [timeToChangeLevel],a + + ret + +.explodeGenerator + xor a + ld [bulletColor],a + ld bc,$0303 + ld de,$1407 + push hl + call CreateBigExplosion + ld hl,bigExplosionSound + call PlaySound + ld a,15 + ldio [jiggleDuration],a + pop hl + + ;remove generator from map + ld a,MAPBANK + ldio [$ff70],a + ld d,0 + ld a,[mapPitch] + ld e,a + xor a + ld [hl+],a + ld [hl+],a + ld [hl],a + add hl,de + ld [hl-],a + ld [hl-],a + ld [hl],a + add hl,de + ld [hl+],a + ld [hl+],a + ld [hl],a + ret + +.animateDelay + ld a,30 +.animateDelayLoop + push af + ld a,1 + call Delay + call ((.animateFence-L1512_Check2)+levelCheckRAM) + pop af + dec a + jr nz,.animateDelayLoop + ret + +.animateFence + ldio a,[updateTimer] + rrca + and 3 + ld b,a + ld hl,bgTileMap+VFENCE_INDEX + ld d,VFENCE_INDEX + call ((.animateFourFrames-L1512_Check2)+levelCheckRAM) + ret + +.animateFourFrames + ld c,4 + +.animateFourFrames_loop + ld a,b + add c + and 3 + add d + ld [hl+],a + dec c + jr nz,.animateFourFrames_loop + ret + + +L1512_CheckFinished: +PRINTT "1512 Script Sizes (Load/Init/Check) (of $500): " +PRINTV (L1512_LoadFinished - L1512_Load2) +PRINTT " / " +PRINTV (L1512_InitFinished - L1512_Init2) +PRINTT " / " +PRINTV (L1512_CheckFinished - L1512_Check2) +PRINTT "\n" + diff --git a/Source/levels.inc b/Source/levels.inc new file mode 100644 index 0000000..57dfeb3 --- /dev/null +++ b/Source/levels.inc @@ -0,0 +1,6 @@ +LVLOFFSET_LOAD EQU 0 +LVLOFFSET_INIT EQU 2 +LVLOFFSET_CHECK EQU 4 +LVLOFFSET_MAP EQU 6 + + diff --git a/Source/macro.inc b/Source/macro.inc new file mode 100644 index 0000000..d080d94 --- /dev/null +++ b/Source/macro.inc @@ -0,0 +1,157 @@ +;PADNOCARRY: MACRO + ;;if low byte of addr is > max addr for space required + ;;add pad bytes to bring low byte to 0 + ;IF ((\1 & $ff) > ((-\2) & $ff)) + ;DS ((-\1) & $ff) + ;ENDC +;ENDM + +SETDIALOGSKIP: MACRO + ld de,\1 + call SetDialogSkip +ENDM + +PREPLONGCALL: MACRO + ld hl,\1 + push hl ;push return addr + ldio a,[curROMBank] ;push current ROM bank + push af +ENDM + +LONGCALL: MACRO + add sp,-4 ;leave a blank spot + push af ;save parameter af + push de ;save parameter de + ld a,BANK(\1) + ld de,\1 + jp LongCall +ENDM + +LONGCALLNOARGS: MACRO + ld a,BANK(\1) + ld hl,\1 + call LongCallNoArgs +ENDM + +DEBUGTITLE: MACRO +IF DEBUG + DB \1 +ENDC +ENDM + +GTX: MACRO + DB $ff,0,0,1,1,STRLEN(\1) +COUNTER SET 1 +REPT STRLEN(\1) + DB ((STRSUB(\1,COUNTER,1)+145) & $ff) +COUNTER SET COUNTER+1 +ENDR +ENDM + +GTXSTRING: MACRO + DB 0,STRLEN(\1) +COUNTER SET 1 +REPT STRLEN(\1) + DB ((STRSUB(\1,COUNTER,1)+145) & $ff) +COUNTER SET COUNTER+1 +ENDR +ENDM + +GTXSTRINGC: MACRO + DB ((20-STRLEN(\1))/2),STRLEN(\1) +COUNTER SET 1 +REPT STRLEN(\1) + DB ((STRSUB(\1,COUNTER,1)+145) & $ff) +COUNTER SET COUNTER+1 +ENDR +ENDM + +ITEMSTRING: MACRO + DB 0,STRLEN(\2)+2,\1,0 +COUNTER SET 1 +REPT STRLEN(\2) + DB ((STRSUB(\2,COUNTER,1)+145) & $ff) +COUNTER SET COUNTER+1 +ENDR +ENDM + + +LDHL_CURHERODATA: MACRO + ld h,((hero0_data>>8) & $ff) + ld a,[curHeroAddressL] + add \1 + ld l,a +ENDM + +PUSHROM: MACRO + ld a,[curROMBank] + push af +ENDM + +POPROM: MACRO + pop af + call SetActiveROM +ENDM + +VECTORTOSTATE: MACRO + ld hl,\1 + call LCheckGetVectorToState + jp hl +ENDM + +DIALOGTOP: MACRO + ld de,\1 + call ShowDialogAtTopNoWait +ENDM + +DIALOGBOTTOM: MACRO + ld de,\1 + call ShowDialogAtBottomNoWait + +ENDM + +WAITDIALOG: MACRO + ld hl,((\1 << 8) | STATE_WAIT_DIALOG) + call StdWaitDialog +ENDM + +WAITDIALOGNOCLEAR: MACRO + ld hl,((\1 << 8) | STATE_WAIT_DIALOG) + call StdWaitDialogNoClear +ENDM + +STDWAITDIALOG: MACRO + call CheckDialogContinue + or a + ret z + + call RestoreIdle + ld hl,mapState+1 + ld a,[hl-] + ld [hl],a +ENDM + +COLOR: MACRO + DW (((\3>>3)<<10) | ((\2>>3)<<5) | (\1>>3)) +ENDM + +LOAD16HLXX: MACRO + ld a,[hl+] + ld \2,a + ld a,[hl+] + ld \1,a +ENDM + +SAVE16HLXX: MACRO + ld a,\2 + ld [hl+],a + ld a,\1 + ld [hl+],a +ENDM + +STDSETUPDIALOG: MACRO + ld a,BANK(dialog) + ld [dialogBank],a + call SetPressBDialog +ENDM + diff --git a/Source/map.asm b/Source/map.asm new file mode 100644 index 0000000..8ba0abf --- /dev/null +++ b/Source/map.asm @@ -0,0 +1,4135 @@ +;12.29.1999 + +INCLUDE "Source/defs.inc" +INCLUDE "Source/levels.inc" + + +;world map + + + + + + + + + + + +;miscellaneous areas + + + + + +SECTION "SysVariables",WRAM0[$c000] +backBuffer:: DS 608 ;32x19; automatically copied to VRAM every vblank + ;NOTE: addr must start on multiple of 16 + ;NOTE: attribute buffer starts 160 bytes later + ;at $c300 + +;0 - $c260 - map attributes & calculation helpers +mapOffsetNorth:: DS 2 ;this memory location + 6 must not +mapOffsetEast:: DS 2 ;have carry +mapOffsetSouth:: DS 2 +mapOffsetWest:: DS 2 + +;8 +mapWidth:: DS 1 ;8 $c268 +mapPitch:: DS 1 ;9 $c269 +mapPitchMinusOne:: DS 1 ;10 $c26a +mapPitchMinusOneComplement :: DS 1 ;11 $c26b +mapSkip:: DS 1 ;difference between width and pitch +mapHeight:: DS 1 ;13 $c26d +mapColor: DS 2 ;14 $c26e +firstHero:: DS 1 ;16 $c270 class index of first hero +numBGTiles: DS 1 ;17 $c271 +bgDestPtr: DS 2 ;18 $c272 +numFGTiles:: DS 1 ;20 $c274 +numFGTiles_save: DS 1 ;addr by offset in SaveFGTileInfo +numClasses:: DS 1 ;22 $ c276 +numClasses_save: DS 1 ; $c277 +fgDestPtr:: DS 2 ;ref by offset in SaveFGTileInfo +fgDestPtr_save: DS 2 ;for use in SaveFGTileInfo +loadTileL: DS 1 ; $c27c +loadTileH: DS 1 ; $c27d + +;30 +mapLeft:: DS 1 ; $c27e +mapRight:: DS 1 ; $c27f +mapRightPlusOne:: DS 1 ; $c280 +mapTop:: DS 1 ; $c281 +mapBottom:: DS 1 ; $c282 +mapBottomPlusOne:: DS 1 ; $c283 +mapMaxLeft:: DS 1 ; $c284 +mapMaxTop:: DS 1 ; $c285 +camera_i:: DS 1 ; $c286 +camera_j:: DS 1 ; $c287 +distToWall_N:: DS 1 ; $c288 +distToWall_E:: DS 1 ; $c289 +distToWall_S:: DS 1 ; $c28a +distToWall_W:: DS 1 ; $c28b + +;44 +mapTotalSize:: DS 2 ;location 1 beyond end, e.g. $dc00 ($c28c) +mapExitLinks:: DS 16 ; $c28e + +desiredMapLeft:: DS 1 ; $c29e +desiredMapTop:: DS 1 ; $c29f +curPixelOffset_x:: DS 1 ; $c2a0 +curPixelOffset_y:: DS 1 ; $c2a1 +desiredPixelOffset_x:: DS 1 ; $c2a2 +desiredPixelOffset_y:: DS 1 ; $c2a3 +scrollAccelState_x:: DS 1 ; $c2a4 +scrollAccelState_y:: DS 1 ; $c2a5 + +mapBank:: DS 2 ; $c2a6 +mapContents:: DS 2 ; $c2a8 +dialogBank:: DS 1 ; $c2aa xlink +curTrackStackL:: DS 1 ; $c2ab for music + +;----routine parameters---------------------------------------------- +;74 +methodParamL:: DS 1 ; $c2ac +methodParamH:: DS 1 ; $c2ad +bulletDirection:: DS 1 ; $c2ae +bulletLocation:: DS 2 ; $c2af +bulletColor:: DS 1 ; $c2b1 +tempL:: DS 1 ; $c2b2 +tempH:: DS 1 ; $c2b3 +delTempL:: DS 1 ; $c2b4 +delTempH:: DS 1 ; $c2b5 + +;84 +moveAlignPrecision:: DS 1 ; $c2b6 +fireBulletDirection:: DS 1 ; $c2b7 +bulletDamage:: +fireBulletDamage:: DS 1 ; $c2b8 +fireBulletSound:: DS 2 ; $c2b9 +fireBulletLocation:: DS 2 ; $c2bb +explosionInitialFrame:: DS 1 ; $c2bd +myGroup:: DS 1 ; $c2be +myFacing:: DS 1 ; $c2bf +secondChoiceDirection:: DS 1 ; $c2c0 + +;95 +fadeSteps:: DS 1 ; $c2c1 +fadeStepsToGo:: DS 1 ; $c2c2 + +dmaLoadSrc0:: DS 2 ; $c2c3 +dmaLoadDest0:: DS 2 ; $c2c5 +dmaLoadLen0:: DS 1 ; $c2c7 +dmaLoadSrc1:: DS 2 ; $c2c8 +dmaLoadDest1:: DS 2 ; $c2ca +dmaLoadLen1:: DS 1 ; $c2cc + +;97 +metaSprite_y:: DS 1 ; $c2cd +metaSprite_x:: DS 1 ; $c2ce +metaSprite_first_x:: DS 1 ; $c2cf + +bgFlags:: DS 1 ;set in some methods to look at later + ;$c2d0 + +;----environment info and control------------------------------------ +;101 +mapDialogClassIndex:: DS 10 ;$c2d1 +mapHeroZone:: DS 1 ;$c2db + +specialFX:: DS 1 ;$c2dc +displayType:: DS 1 ;0 for map, 1 for cinema $c2dd +scrollSprites:: DS 1 ;$c2de +heroesIdle:: DS 1 ;1=idle, 0=active ;$c2df + + +;----class stuff----------------------------------------------------- +;116 +oldZone:: DS 1 ;$c2e0 +firstFreeObj:: DS 1 ;index of first free node $c2e1 +curObjIndex:: DS 1 ;$c2e2 +iterateNext:: DS 2 ;$c2e3 +oamFindPos:: DS 1 ;$c2e5 +numFreeSprites:: DS 1 ;$c2e6 +nextObjIndex:: DS 1 ;$c2e7 +levelCheckStackPos:: DS 2 ;$c2e8 + +;126 +objTimerBase:: DS 1 ;$c2ea +objTimer60ths:: DS 1 ;$c2eb +heroTimerBase:: DS 1 ;$c2ec +heroTimer60ths:: DS 1 ;$c2ed + +;130 +baMoved:: DS 1 ;used in BA check $c2ee +bsMoved:: DS 1 ;used in BS check $c2ef + ;--set above to zero in LinkRemakeList +heroJoyIndex:: DS 1 ;bits 5:0 grenade, lady, captain, + ;haiku, bs, ba $c2f0 + +myJoy:: DS 1 ;$c2f1 +curInput0:: DS 1 ;$c2f2 +curInput1:: DS 1 ;$c2f3 +dialogJoyIndex:: DS 1 ;0 or 1 $c2f4 +getLocInitFacing:: DS 1 ;$c2f5 +losLimit:: DS 1 ;tiles to scan (0=infinite or 1) $c2f6 +dialogSpeakerIndex:: DS 1 ;in ChooseFromDialogAlterates $c2f7 + +levelCheckSkip:: DS 4 ;$c2f8 +jiggleLoc:: DS 1 ;random pos for async jiggle $c2fc +dialogSettings:: DS 1 ;[:0] show border, [:1] show continue + ;[:2] wait release (see defs.h DLG_*) +fadeRange:: DS 1 ;defaults to 64 (all colors) but + ;can be set to 32 (or the like) for + ;BG fades only (is reset to 64 after) +guardAlarm:: DS 1 ;guard sounded the alarm? +;next pos: $c2fe +;160/160 + +blankSpace: +PRINTT "blank space 1: " +PRINTV (768 - (blankSpace - backBuffer)) +PRINTT "\n" + +DS (768 - (blankSpace - backBuffer)) + +attributeBuffer:: DS 608 ;see notes on backBuffer above + +;game state variables $c560 +gameState:: +heroesAvailable:: DS 2 ;$c560 +heroesUsed:: DS 1 ;$c562 +heroesLocked:: DS 1 ;$c563 +appomattoxMapIndex:: DS 1 ;$c564 +respawnMap:: DS 2 ;$c565 ;map to go to after dying +joinMap:: DS 2 ;$c567 ;map to join for 2nd player + +;pad +allIdle:: DS 1 ;$c569 ;no one allowed to move +dialogIdleSettings:: DS 1 ;$c56a +canJoinMap:: DS 1 ;$c56b +checkTemp:: DS 1 ;$c56c + +amLinkMaster:: DS 1 ;$ff=no link/slave, $fe=no link/master + ;1=link/master, 0=link/slave $c56d +lastLinkAction:: DS 1 ;$00=receive, $01=transmit $c56e +checkInputInMainLoop:: DS 1 ;$c56f +amShowingDialog:: DS 1 ;$c570 +amSynchronizing: DS 1 ;$c571 +longCallTempA:: DS 1 ;$c572 +amChangingMap:: DS 1 ;$c573 +curHeroAddressL:: DS 1 ;LCByte of hero address $c574 +heroesPresent:: DS 1 ;%000000ba, b=hero1, a=hero0 $c575 + +curLevelIndex:: DS 2 ;in BCD $c576 +curLevelStateIndex:: DS 1 ;0-255 $c578 +timeToChangeLevel:: DS 1 ;$c579 + +musicOverride1:: DS 1 ;$c57a +musicOverride4:: DS 1 ;$c57b + +linkBailOut:: DS 4 ;$c57c + +fadeCurPalette:: DS 128 ;$c580 +;128 + +bgTileMap:: DS 256 ;$c600 +bgAttributes:: DS 256 ;$c700 + +;$c800-$c81f hero data +hero0_data:: +curJoy0:: DS 1 ;NOTE: MSByte of address should not +hero0_index:: DS 1 ;change between here and the end of +hero0_object:: DS 2 ;the hero stuff +hero0_bullet_index:: DS 1 +hero0_class:: DS 2 +hero0_enterLevelFacing:: DS 1 ;misnomer, actually exit direction +hero0_enterLevelLocation:: DS 2 +hero0_i:: DS 1 +hero0_j:: DS 1 +hero0_type:: DS 1 ;HERO_BA_FLAG etc +hero0_health:: DS 1 +hero0_moved:: DS 1 +hero0_puffCount:: DS 1 +;NOTE change HERODATASIZE if adding more than 16 vars here + +;$c810 +hero1_data:: +curJoy1:: DS 1 +hero1_index:: DS 1 +hero1_object:: DS 2 +hero1_bullet_index:: DS 1 ;See NOTE above +hero1_class:: DS 2 ;e.g. 1030 = BA +hero1_enterLevelFacing:: DS 1 ;misnomer, actually exit direction +hero1_enterLevelLocation:: DS 2 +hero1_i:: DS 1 +hero1_j:: DS 1 +hero1_type:: DS 1 ;HERO_BA_FLAG etc +hero1_health:: DS 1 +hero1_moved:: DS 1 +hero1_puffCount:: DS 1 +;NOTE change HERODATASIZE if adding more than 16 vars here + +;$c820 variables for level check in RAM +levelVars:: DS 64 + +;$c860 music vars +musicBank:: DS 1 ;c860 +musicNoteCountdownInit:: DS 1 ;c861 +musicNoteCountdown:: DS 1 ;c862 +musicTrack1Pos:: DS 2 ;c863 +musicTrack2Pos:: DS 2 ;c865 +musicTrack3Pos:: DS 2 ;c867 +musicTrack4Pos:: DS 2 ;c869 +musicInstrument1:: DS 5 ;c86b +musicInstrument2:: DS 4 ;c870 +musicInstrument3:: DS 4 ;c874 +musicInstrument4:: DS 4 ;c878 +musicWaveform:: DS 16 ;c87c +musicStackL1:: DS 1 ;c88c +musicStackL2:: DS 1 ;c88d +musicStackL3:: DS 1 ;c88e +musicStackL4:: DS 1 ;c88f +musicRegisters:: DS 16 ;c890 r[15] = flags, :0 = z + +numFreeObjects:: DS 1 ;$c8a0 +fgFlags:: DS 1 ;$c8a1 temp variable, set in GetFGAttributes +lineZeroHorizontalOffset:: DS 1 ;$c8a2 +musicAddress:: DS 2 ;$c8a3-c8a4 +hblankVector:: DS 3 ;c8a5-c8a7 +exitTileIndex:: DS 1 ;c8a8 +bulletClassIndex:: DS 1 ;c8a9 +inventory: DS 16 ;c8aa-c8b9 +dialogNPC_speakerIndex:: DS 1 ;c8ba who's talking +dialogNPC_heroIndex:: DS 1 ;c8bb hero being talked to +dialogBalloonClassIndex:: DS 1 ;c8bc class that has dialog balloons +envEffectType:: DS 1 ;c8bd type of env effect in use +bsUpgrades:: DS 1 ;c8be +baUpgrades:: DS 1 ;c8bf +haikuUpgrades:: DS 1 ;c8c0 +iterateNumObjects:: DS 1 ;c8c1 try to keep frame rate at 30fps (UNUSED, screws synch) +standardFadeColor:: DS 1 ;c8c2 +inLoadMethod:: DS 1 ;c8c3 +loadStackPosL:: DS 1 ;c8c4 +loadStackPosH:: DS 1 ;c8c5 + +;$c8c2 - $c8ff free space + +SECTION "LevelCheckMethodSection",WRAM0[$c900] +levelCheckRAM:: DS $500 ;1.25 k of data + +SECTION "SpriteMemory",WRAM0[$ce00] +spriteOAMBuffer:: DS $A0 ;must start on even $100 + +;In the following definitions note that some of the labels that are defined +;as the same address will be used to store values in different +;memory banks +SECTION "MapAndObjVars",WRAMX[$d000] +map:: +objects:: +headTable:: +tileShadowBuffer:: +attributeShadowBuffer:: +zoneBuffer:: +wayPointList:: + DS 256 ;bank 1, first 256 bytes of map + ;bank 2, start of 256 bytes of linked list head indices + ;bank 3, start of 4k of object storage + ;bank 4, start of 4k of tile shadow buffer + ;bank 5, start of 4k of attribute shadow buffer + ;bank 6, start of 4k of zone info + ;bank 7, start of 512 byte wayPointList + +tailTable:: + DS 256 ;bank 1, bytes 256-512 of map + ;bank 2, indices of objects at tail of list + ;bank 3, bytes 256-512 of object storage + ;bank 7, wayPointList continued + +pathList:: +rainbowColors:: + ;$d200 + DS 256 ;bank 1, bytes 512-1024 of map (512 bytes) + ;bank 2, free + ;bank 3, bytes 512-1024 of object storage (512 bytes) + ;bank 7, start of 1024-byte pathList (512 bytes) + +horizontalOffset:: + DS 144 ;bank 1, bytes 768-1024 of map (256) + ;bank 2, horizontal scroll position for each line (144) + ;bank 3, bytes 768-1024 of object storage (256) + ;bank 7, pathList continued (256) + + DS 112 ;bank 2, free + +objExists:: + ;$d400 + DS 256 ;bank 1, bytes 1024-1535 of map + ;bank 2, 256 bytes validity of object index n + ;bank 3, bytes 1024-1535 of object storage + ;bank 7, pathList continued + +FOFTable:: + ;$d500 + DS 256 ;bank 1, bytes 1024-1279 of map + ;bank 2, Group FOF table + ;bank 3, bytes 1024-1279 of object storage + ;bank 7, pathList continued + +pathMatrix:: + ;$d600 + DS 256 ;bank 1, bytes 1536-1791 of map + ;bank 2, free + ;bank 3, bytes 1536-1791 of object storage + ;bank 7, 256 byte pathMatrix[16][16] + +levelState:: +fgTileMap:: ;bank 1, bytes 1792-2047 of map + ;$d700 + DS 256 ;bank 2, index of first tile for each class + ;bank 3, bytes 1792-2047 of object storage + ;bank 7, 256 byte map state save levelState[256] + +objClassLookup:: +heroState:: ;UNUSED! + ;$d800 + DS 256 ;bank 1, bytes 2048-2303 of map + ;bank 2, 256 byte lookup table for class type + ;bank 3, bytes 2048-2303 of object storage + ;bank 7, 256 byte heroState storage (16 bytes/hero) UNUSED! + +musicStack:: + ;$d900 + DS 256 ;bank 1, bytes 2304-2559 of map + ;bank 2, unused + ;bank 3, bytes 2304-2559 of object storage + ;bank 7, 128 byte stack for music code + +associatedIndex:: +flightCode:: + ;$da00 + DS 256 ;bank 1, bytes 2560-2815 of map + ;bank 2, 256 byte table of associated class indices + ;bank 3, bytes 2560-2815 of object storage + ;bank 7, 1-byte count + 85 3-byte flight codes + +spritesUsed:: + ;$db00 + DS 128 ;bank 1, bytes 2816-3071 of map + ;bank 2, 40-byte lookup (1=sprite used, 0=free) + ;bank 3, bytes 2816-3071 of object storage +fadeFinalPalette:: + DS 128 ;bank 7, 128-byte fade final palette + + +;bgAttributes:: + ;$dc00 + DS 256 ;bank 2, free + +fgAttributes:: + ;$dd00 + DS 256 ;bank 2, tile attributes for FG tiles + ;bank 1, bytes 3328-3583 of map + ;bank 3, bytes 3328-3583 of object storage + +classLookup:: +fadeDelta:: ;bank 1, bytes 3584-4095 of map + ;$de00 + DS 192 ;bank 2, 512 byte table for class info + ;bank 3, bytes 3584-4095 of object storage + ;bank 7, 192 bytes of fade info +fadeError:: + DS 192 ;bank 7, 192 bytes of fade info + +gamePalette:: + ;$df80 + DS 128 ;bank 7, 128 bytes of "true" game palette + + + +SECTION "MapLoader",ROM0 +;--------------------------------------------------------------------- +; Routine: LoadMap +; Arguments: hl - index of map xxyy 0000 - 1515 in BCD +; Alters: af +; Description: Loads specified map +;--------------------------------------------------------------------- +LoadMap:: + push bc + push de + push hl + + push hl + + ;clear out zone & exit memory + ld a,ZONEBANK + ld [$ff70],a + ld hl,$d000 + xor a + ld [displayType],a + + ld c,0 ;256 +.clr1_o ld b,16 ;*16 +.clr1_i ld [hl+],a + dec b + jr nz,.clr1_i + dec c + jr nz,.clr1_o + + pop hl + + call MapCoordsToIndex + ld l,a + ld h,0 + + ;load in the level state for this level + ld a,l + ld [curLevelStateIndex],a + ld a,LEVELSTATEBANK + ld [$ff70],a + push hl + ld h,((levelState>>8) & $ff) + ld a,[hl] + ldio [mapState],a + xor a + ldio [mapState+1],a + pop hl + + ;multiply map index by 4 to find offset into address lookup + sla l ;shift <<= 2 + rl h + sla l + rl h + ld de,MapLookupTable + add hl,de + + ld a,BANK(MapLookupTable) + call SetActiveROM + + ld de,mapBank ;start of 4 bytes of info storage + ld c,4 +.loop ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.loop + + xor a + ld [amSynchronizing],a + ld [hero0_index],a + ld [hero1_index],a + ld [heroJoyIndex],a + + ;set up one hero for now, hero 0 if we're master and hero 1 + ;if we're slave. + ld a,[amLinkMaster] + or a + jr z,.setMyHeroAs1 + + ld a,1 + ld [hero0_index],a + ld a,[hero0_type] + ;note joy index remains zero if we're master + jr .afterSetMyHero + +.setMyHeroAs1 + ld hl,heroJoyIndex + ld a,1 + ld [hero1_index],a + ld a,[hero1_type] + or [hl] + ld [hl],a + +.afterSetMyHero + + ;Check if we're linked up to another game + ld a,[amLinkMaster] + bit 7,a + jr z,.amLinked + jp .afterLinkCheck + +.amLinked + ;am linked up. See if I'm trying to join the same map + ;as is already playing on the remote machine. +.checkSameMap + ld a,LGETMAPINDEX + call ExchangeByte + cp LGETMAPINDEX + jr z,.linkMachineChangingMapAlso + call CheckSimultaneousLCC + jr nz,.checkSameMap ;must repeat + jr .compareMapIndex + +.linkMachineChangingMapAlso + ;Proceed if I'm the Link Master, wait and try again + ;if I'm the slave. + ld a,[amLinkMaster] + or a + jr z,.checkSameMapTryAgain + + ;call KillWaitScreen + jp .afterLinkCheck + +.checkSameMapTryAgain + call ShowWaitScreen + + ;kill some time to allow host to do its thing + ld c,10 +.checkSameMapDelay + ld a,LNULL + call ExchangeByte + call HandleRemoteInput + dec c + jr nz,.checkSameMapDelay + jr .checkSameMap + +.compareMapIndex + call ReceiveByte ;next byte will be the map index + cp $ff ;wait code? + jr z,.checkSameMapTryAgain + ld b,a + ;call KillWaitScreen + ld a,[curLevelStateIndex] + cp b + jr z,.isSameMap + jp .afterLinkCheck ;not the same map + +.isSameMap + ;same map; go ahead and synchronize to it +.requestSynchronize + ld a,LSYNCHRONIZE + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.requestSynchronize + + call ReceiveByte ;get the response + cp LSYNCHREADY + jr z,.readyToSynchronize + + ;Not ready. Send a few null control codes to allow the other + ;machine to continue game-play and then try again. + call ShowWaitScreen + +.nullDelay_init + ld c,10 +.nullDelay + ld a,LNULL + call ExchangeByte + call HandleRemoteInput + dec c + jr nz,.nullDelay + ;jr .requestSynchronize + jr .checkSameMap + +.readyToSynchronize + ld hl,BailOutAddress + xor a + call SetLinkBailOutAddress + + call KillWaitScreen + + ;send my desired entry direction so host can evaluate if there's + ;a free spot + ld a,1 ;just a precaution for slave, host MUST do this + ldio [curObjWidthHeight],a + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,[hl] + call TransmitByte + + call ReceiveByte ;go/nogo signal from host + or a + jr nz,.goSignal + + ;nogo + jr .nullDelay_init + +.goSignal + call ReceiveByte + ldio [mapState],a + call ReceiveByte + ldio [mapState+1],a + + call GuestExchangeHeroData + + ld hl,heroJoyIndex + ld a,[hero1_type] + or [hl] + ld [hl],a + + ld a,1 + ld [amSynchronizing],a + +.afterLinkCheck + call KillWaitScreen + + ;Let the map figure out how to load itself. Typically + ;will be just a call to ParseMap, but it could be different + ;to do some cinematic stuff + call ClearBackBuffer + + ld a,LVLOFFSET_LOAD + call CopyMapMethodToRAM + ld a,OBJROM + call SetActiveROM + + ld hl,[sp+0] + ld a,l + ld [loadStackPosL],a + ld a,h + ld [loadStackPosH],a + ld a,1 + ld [inLoadMethod],a + + call levelCheckRAM +AfterLoadLevelMethod:: + xor a + ld [inLoadMethod],a + + ld a,[timeToChangeLevel] + or a + jr z,.stillOkay + + ;need to redo (perhaps cinematic) + ;save the map state back where it came from + ;if zero set to one to indicate we've been here + ld a,LEVELSTATEBANK + ld [$ff70],a + ld a,[curLevelStateIndex] + ld l,a + ld h,((levelState>>8) & $ff) + ldio a,[mapState] + or a + jr nz,.stateNotZero + ld a,1 +.stateNotZero + ld [hl],a + jr .done + +.stillOkay + ld a,OBJROM + call SetActiveROM + call AddObjectsToObjList + call InitFOF + + ;Add the heroes to the map. Add Host's hero first. + ld a,[amSynchronizing] + or a + jr z,.addZeroThenOne + + ld a,[amLinkMaster] + or a + jr z,.addZeroThenOne + + ;add one then zero + ld hl,hero0_index + push hl + ld hl,hero1_index + jr .decidedHeroLoadOrder + +.addZeroThenOne + ld hl,hero1_index + push hl + ld hl,hero0_index + +.decidedHeroLoadOrder + call PrepSetupHero + pop hl + call PrepSetupHero + + call PrepareForInitialMapDraw ;adjust camera & calc offsets + + ld a,LVLOFFSET_INIT + call CopyMapMethodToRAM + ld a,OBJROM + call SetActiveROM + call levelCheckRAM + + call ClearBackBuffer + + ld a,LVLOFFSET_CHECK + call CopyMapMethodToRAM + ld a,OBJROM + call SetActiveROM + + ;----continue synchronizing if warranted---------------------- + ld a,[amSynchronizing] + or a + jr z,.afterSynchronization + +.continueSynchronization + LONGCALLNOARGS GuestContinueSynchronization + +.afterSynchronization + xor a + ld [amSynchronizing],a + + ;turn LCD on and stuff + ld a,%11000011 + ld [$ff40], a ;lcdc control + +.done +LoadMapDone: + pop hl + pop de + pop bc + ret + +BailOutAddress: + ld hl,0 + xor a + call SetLinkBailOutAddress + ld a,1 + ld [timeToChangeLevel],a + jr LoadMapDone + +ShowWaitScreen: + ld a,[displayType] ;shown the "waiting" screen yet + or a + ret nz + + ;load the "Waiting To Join" screen + ld a,BANK(waitingToJoin_bg) + ld hl,waitingToJoin_bg + call LoadCinemaBG + ld a,1 + call Delay + + ld a,15 + call SetupFadeFromStandard + call WaitFade + ret + +KillWaitScreen: + ;was I showing the "waiting to join" screen? + ld a,[displayType] + or a + ret z + + push bc + push de + push hl + ld a,15 + call SetupFadeToStandard + call WaitFade + ;call DisplayOff + xor a + ld [displayType],a + pop hl + pop de + pop bc + ret + +.afterRemoveWaitScreen + + +.addHeroToMap +PrepSetupHero:: + ld a,[hl+] ;get hero index + or a + ret z ;hero not present + + ld a,l ;get hero number 0 or 1 +IF HERODATASIZE!=16 + jr fix this +ENDC + and 16 + swap a + ld d,a ;d is 0 or 1 + + inc hl ;skip object L,H + inc hl + inc hl ;skip bullet_index + ld a,[hl+] ;bc = heroClass + ld c,a + ld a,[hl+] + ld b,a + ld a,[hl+] ;enter level direction + push af + ld a,[hl+] ;hl = entry location in XY + ld h,[hl] + ld l,a + pop af ;retrieve entry direction + call SetupHero + ret + +PrepSetupHeroBC:: + ld h,b + ld l,c + jr PrepSetupHero ;ret will return to my caller + +GuestExchangeHeroData: + ;get the host's hero data + ld a,[amLinkMaster] + or a + jr z,.recvHero0_sendHero1 ;slave exchange + +.recvHero1_sendHero0 ;master exchange + ;turn on hero 1 + ld a,1 + ld [hero1_index],a + + ;set hero 1 joy index + ld hl,hero0_data ;send this second + push hl + + ld hl,hero1_data ;recv this first + jr .afterExchangeHeroData + +.recvHero0_sendHero1 + ;turn on hero 0 + ld a,1 + ld [hero0_index],a + + ld hl,hero1_data + push hl + ld hl,hero0_data ;recv dest + +.afterExchangeHeroData + ld bc,HERODATASIZE + xor a + call ReceiveData + + ;send my hero data + pop hl + ld bc,HERODATASIZE + xor a + call TransmitData + + ret + + +;--------------------------------------------------------------------- +; Routine: MapCoordsToIndex +; Arguments: hl - map number in bcd (e.g. 0205) +; Returns: a - converted number (e.g. 82) +; Alters: af +; Description: Returns FromBCD(L) * 16 + FromBCD(H) +;--------------------------------------------------------------------- +MapCoordsToIndex:: + push hl + + ;Change bytes hl from BCD to normal + ld a,h + call BCDToNumber + ld h,a + ld a,l + call BCDToNumber + ld l,a + + ;a = l*16 + h (h & l must be 0-15 for this code) + ld a,l + swap a + add h + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: BCDToNumber +; Arguments: a - a number in BCD (e.g. hex $19 = dec 19) +; Returns: a - converted number +; Alters: af +;--------------------------------------------------------------------- +BCDToNumber: + push bc + push hl + + ;convert back to normal with: + ; a = a[7:4] * 10 + a[3:0] + ld b,a ;save A + swap a + and %00001111 + ld hl,.lookupTimes10 + add l + ld l,a + ld a,0 + adc h + ld h,a + ld a,[hl] ;Upper nibble times 10 + ld c,a + ld a,b + and %00001111 + add c + + pop hl + pop bc + ret + +.lookupTimes10 + DB 0,10,20,30,40,50,60,70,80,90 + +;--------------------------------------------------------------------- +; Routine: NumberToBCD +; Arguments: a - a number (e.g. 19) +; Returns: a - converted number (e.g. $19) +; Alters: af +;--------------------------------------------------------------------- +NumberToBCD:: + ;a[7:4] = num / 10, a[3:0] = num % 10; + push bc + ld b,0 + +.divide10 + cp 10 + jr c,.dividedOut10 + + inc b + sub 10 + jr .divide10 + +.dividedOut10 + swap b + or b + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: LookupInMapContents +; Arguments: a - offset in contents table to look up +; [mapContents] must have been initialized +; Returns: hl - address stored at requested offset +; Alters: af, hl +; Description: Adds the offset to the start of the MapContents and +; returns the 16-bit value stored there +;--------------------------------------------------------------------- +LookupInMapContents: + push de + + ld d,0 + ld e,a + + ld a,[mapBank] + call SetActiveROM + + ld a,[mapContents] + ld l,a + ld a,[mapContents+1] + ld h,a + + add hl,de + ld a,[hl+] + ld h,[hl] + ld l,a + + pop de + ret + +;--------------------------------------------------------------------- +; Routine: SetupMapVarsFromWidthPitchAndHeight +; Arguments: [mapWidth],[mapPitch],[mapHeight] +; Description: Sets up: +; mapMaxLeft +; mapPitchMinusOne +; mapPitchMinusOneComplement +; mapSkip +; mapMaxTop +;--------------------------------------------------------------------- +SetupMapVarsFromWidthPitchAndHeight:: + push bc + + ;Get level dimensions width, pitch, and height + ld a,[mapWidth] + ld c,a + sub 21 + ld [mapMaxLeft],a + ld a,[mapPitch] + push af + dec a + ld [mapPitchMinusOne],a + cpl + ld [mapPitchMinusOneComplement],a + pop af + sub c + ld [mapSkip],a ;skip width calculated fr width & pitch + ld a,[mapHeight] + ld b,a ;height in b + sub 19 + ld [mapMaxTop],a + + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ParseMap +; Arguments: [mapBank]/[mapContents] +; Description: Loads a map +;--------------------------------------------------------------------- +ParseMap:: + ;set bank and ptr to map + ld a,LVLOFFSET_MAP + call LookupInMapContents ;point hl at map + + ld a,[hl+] ;get and discard version number + ld a,[hl+] ;get # of classes + ld [numClasses],a ;store # classes + + ;Clear/initialize memory locations + ;set initial # of bg/fg tiles + ld a,40 ;leave room for 2 sets of 4x4 hero + ld [numFGTiles],a ;tiles (20*2) + ld a,1 + ld [numBGTiles],a + + ;Set up ptrs to bg tile pattern mem and fg tile pattern mem + ld a,$80 + ld [fgDestPtr],a ;fg ptr gets $9280 (low byte) + ld a,$92 ;high byte + ld [fgDestPtr+1],a + ld a,$10 + ld [bgDestPtr],a ;bg ptr gets $9010 (low byte) + ld a,$90 ;high byte + ld [bgDestPtr+1],a + + ;Get index # of first monster + ld a,[hl+] + ldio [firstMonster],a + + ;discard first monster class (2 bytes) + ld a,[hl+] + ld a,[hl+] + + ;Load in class lookup table + ld a,[numClasses] + ld c,a ;set counter at # of classes + ld b,1 ;index currently loading + ;ld de,classLookup+2 ;lookup table to store classes in + +.loop ld a,[hl+] ;load in low byte of class + ld [loadTileL],a + ld a,[hl+] ;repeat with high byte + ld [loadTileH],a + + ;set classLookup[i] to point to addr of class methods + call SetClassLookupEntryForTile + + ;determine whether we're loading a BG tile or a monster tile + ldio a,[firstMonster] + cp b ;is firstMonster <= cur index? + push bc + jr z,.isMonsterTile + jr c,.isMonsterTile + +.isBackgroundTile + ld c,0 ;set c=0 to indicate BG tile + jr .nowLoadTile + +.isMonsterTile + ld c,1 ;set c=1 to indicate FG tile + +.nowLoadTile + call LoadTile + + ;make sure we're back to the map bank + ld a,[mapBank] + call SetActiveROM + + pop bc + inc b ;next class + + ldio a,[firstMonster] ;just loaded last bg tile? + cp b + jr nz,.terminationTest + ld a,[numBGTiles] ;already copied the remaining buffer? + and 31 + call nz,CopyBGWorkToVRAM ;not yet + +.terminationTest + dec c ;one less to go + jr nz,.loop + + ;current value of numClasses will be value of firstHero + ld a,[numClasses] + ld [firstHero],a + + ;final value of numClasses (past 2 heroes+bullets) + add 4 + ld [numClasses],a + + ;Get level dimensions width, pitch, and height + ld a,[hl+] ;width + ld [mapWidth],a + ld a,[hl+] ;pitch + ld [mapPitch],a + ld a,[hl+] ;height + ld [mapHeight],a + ld b,a ;height in b + call SetupMapVarsFromWidthPitchAndHeight + + ;Get width*height class indices + ld a,MAPBANK ;switch to map RAM bank + ld [$ff00+$70],a + ld d,h ;Switch to using de for retrieval + ld e,l + ld hl,map ;and hl for storage + + +.outer0 + ld a,[mapWidth] ;width in c + ld c,a + + ;Load a row into memory +.inner0 ld a,[de] ;get a tile class index + inc de + ld [hl+],a ;store it in RAM + + dec c + jr nz,.inner0 + + ;load excess with zero to make internal map power of two wide + ld a,[mapSkip] + or a + jr z,.afterFillExtra + ld c,a + xor a +.fillExtra + ld [hl+],a + dec c + jr nz,.fillExtra + +.afterFillExtra + dec b + jr nz,.outer0 + + ;hl contains location 1 beyond end of map + ld a,l + ld [mapTotalSize],a + ld a,h + ld [mapTotalSize+1],a + + ;Load background color + ld a,[de] ;bg color low byte + inc de + ld [mapColor],a + ld l,a + ld a,[de] ;bg color high byte + inc de + ld [mapColor+1],a + ld h,a + ld b,%10000000 + push de + ld d,h + ld e,l + call SetupCommonColor + pop de + + call ParseWayPointStuff + call ParseZones + call ParseExits + call SetBGSpecialFlags + + ld b,255 + ld hl,classExplosion + call SetClassLookupEntry + + ret + +;--------------------------------------------------------------------- +; Routine: ClearBackBuffer +; Arguments: None. +; Returns: Nothing. +; Alters: af +; Description: Clears the backBuffer and attributeBuffer so that +; horizontal offsets don't show any garbage +;--------------------------------------------------------------------- +ClearBackBuffer:: + push bc + push de + push hl + + ld bc,608 + ld d,0 + ld hl,backBuffer + xor a + call MemSet + + ld bc,608 + ld d,0 + ld hl,attributeBuffer + xor a + call MemSet + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetClassLookupEntryForTile +; Arguments: [loadTileL/H] - tile index being loaded +; b - index in classLookup to load into +; Alters: +; Description: +;--------------------------------------------------------------------- +SetClassLookupEntryForTile: + push bc + push de + push hl + + ld a,OBJLISTBANK + ld [$ff70],a + + ;set de to point to classLookup[b] (times two) + ld d,0 + ld e,b + sla e + rl d + ld hl,classLookup + add hl,de + ld d,h + ld e,l + + ld a,[loadTileH] + ld h,a + ld a,[loadTileL] + ld l,a + + sla l + rl h ;hl *= 2 + ld bc,classTable + add hl,bc + + ld a,BANK(classTable) + call SetActiveROM + ld a,[hl+] ;low byte of addr of class methods + ld [de],a + inc de + ld a,[hl+] ;high byte + ld [de],a + ld a,OBJROM + call SetActiveROM + ;inc de + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetClassLookupEntry +; Arguments: b - index in classLookup to set +; hl - ptr to class +; Alters: +; Description: +;--------------------------------------------------------------------- +SetClassLookupEntry: + push bc + push de + + ld a,OBJLISTBANK + ld [$ff70],a + + ;set de to point to classLookup[b] (times two) + push hl + ld d,0 + ld e,b + sla e + rl d + ld hl,classLookup + add hl,de + ld d,h + ld e,l + pop hl + + ld a,l ;low byte of addr of class methods + ld [de],a + inc de + ld a,h ;high byte + ld [de],a + + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ParseZones +; Arguments: hl - pointer to start of zone data +; Alters: all registers +; Description: loads in zone attributes (parallel buffer to map) +; Stored using 2:1 backed bytes and run-length encoding +;--------------------------------------------------------------------- +ParseZones: + ld a,ZONEBANK ;switch in RAM bank for zones + ld [$ff00+$70],a + + ld hl,zoneBuffer ;dest + + call .getNextRLEData + + ;loop as usual + ld a,[mapHeight] ;# of rows + ld b,a + +.outer ld a,[mapWidth] ;# of columns + ld c,a + srl c ;divide by two + + ;save two bytes for each count +.inner ld a,[loadTileL] ;what's our RLE count look like? + or a + jr nz,.continue + + push bc + call .getNextRLEData + pop bc + +.continue + ld a,[tempH] + ld [hl+],a + ld a,[tempL] + ld [hl+],a + + ld a,[loadTileL] ;decrement RLE count + dec a + ld [loadTileL],a + ;jr nz,.continue + + ;push bc + ;call .getNextRLEData + ;pop bc + +;.continue + + dec c + jr nz,.inner + + ;reached the end of a row, advance destptr to next row + push bc + xor a + ld b,a + ld a,[mapSkip] + ld c,a + add hl,bc + pop bc + + dec b + jr nz,.outer + + ret + +.getNextRLEData + ld a,[de] ;read in a run length + inc de + ld [loadTileL],a ;store remaining # of bytes + ld a,[de] ;read in run data + inc de + ld b,a + swap a + and $f ;zone for first byte + ld [tempH],a + ld a,b + and $f + ld [tempL],a ;zone for second byte + ret + + +;--------------------------------------------------------------------- +; Routine: ParseExits +; Arguments: hl - pointer to start of exit data +; Alters: all registers +; Description: loads in exit attributes (parallel buffer to map) +; Stored using 2:1 backed bytes and run-length encoding +;--------------------------------------------------------------------- +ParseExits: + ld a,ZONEBANK ;switch in RAM bank for zones + ld [$ff00+$70],a + + ld hl,zoneBuffer ;dest + + call .getNextRLEData + + ;loop as usual + ld a,[mapHeight] ;# of rows + ld b,a + +.outer ld a,[mapWidth] ;# of columns + ld c,a + srl c ;divide by two + + ;save two bytes for each count +.inner ld a,[loadTileL] ;what's our RLE count look like? + or a + jr nz,.continue + + push bc + call .getNextRLEData + pop bc + +.continue + ld a,[tempH] + or [hl] + ld [hl+],a ;exit in 7:4, zone in 3:0 + ld a,[tempL] + or [hl] + ld [hl+],a + + ld a,[loadTileL] ;decrement RLE count + dec a + ld [loadTileL],a + + dec c + jr nz,.inner + + ;reached the end of a row, advance destptr to next row + push bc + xor a + ld b,a + ld a,[mapSkip] + ld c,a + add hl,bc + pop bc + + dec b + jr nz,.outer + + ;read in 16 bytes of map links + ld c,16 + ld hl,mapExitLinks +.readLink + ld a,[de] + inc de + ld [hl+],a + dec c + jr nz,.readLink + + ret + +.getNextRLEData + ld a,[de] ;read in a run length + inc de + ld [loadTileL],a ;store remaining # of bytes + ld a,[de] ;read in run data + inc de + ld b,a + and $f0 ;exit for first byte (in 7:4) + ld [tempH],a + ld a,b + swap a + and $f0 + ld [tempL],a ;exit for second byte + ret + +;--------------------------------------------------------------------- +; Routine: SetBGSpecialFlags +; Arguments: none +; Alters: af +; Description: Loops through the loaded map and for each background +; tile with a special flag (WalkOver, ShootOver) sets +; bit 7 of the exit/zone map. +;--------------------------------------------------------------------- +SetBGSpecialFlags:: + push bc + push de + push hl + + ;clear out bit 7 in zone bank + ld a,ZONEBANK + ldio [$ff70],a + + ld hl,$d000 + ld a,$e0 +.clearZone + res 7,[hl] + inc hl + cp h + jr nz,.clearZone + + + ld hl,map + ld de,bgAttributes + + ld a,[mapHeight] + ld b,a + +.outer + push bc + ldio a,[firstMonster] + ld b,a + ld a,[mapPitch] + ld c,a + ld a,MAPBANK + ld [$ff00+$70],a + +.inner + ld a,[hl] ;get a tile + or a + jr z,.notSpecial + cp b + jr nc,.notSpecial + + ;might be a Special tile + ld e,a ;look up its BG attributes + ld a,TILEINDEXBANK + ld [$ff00+$70],a + ld a,[de] + and BG_FLAG_SPECIAL + jr z,.notSpecialResetRAMBank + + ;is Special type + ld a,ZONEBANK + ld [$ff00+$70],a + + set 7,[hl] + +.notSpecialResetRAMBank + ld a,MAPBANK + ld [$ff00+$70],a + +.notSpecial + inc hl + dec c + jr nz,.inner + + pop bc + dec b + jr nz,.outer + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: ResetMyBGSpecialFlags +; Arguments: hl - map location +; Alters: af +; Description: If this background tile has any special flags then +; bit 7 of the exit/zone map is set. +;--------------------------------------------------------------------- +ResetMyBGSpecialFlags:: + push bc + push de + + ldio a,[firstMonster] + ld b,a + + ld a,MAPBANK + ldio [$ff70],a + + ld a,[hl] ;get a tile + or a + jr z,.notSpecial + cp b + jr c,.maybeSpecial + +.isMonster + ;get tile under monster + ld a,TILESHADOWBANK + ld [$ff70],a + or a + jr z,.notSpecial + +.maybeSpecial + ;might be a Special tile + ld d,((bgAttributes>>8)&$ff) + ld e,a ;look up its BG attributes + ld a,TILEINDEXBANK + ld [$ff70],a + ld a,[de] + and BG_FLAG_SPECIAL + jr z,.notSpecial + + ;is Special type + ld a,ZONEBANK + ld [$ff00+$70],a + + set 7,[hl] + jr .done + +.notSpecial + ld a,ZONEBANK + ld [$ff70],a + res 7,[hl] + +.done + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: ParseWayPointStuff +; Arguments: hl - pointer to start of stored way point stuff +; Alters: all registers +;--------------------------------------------------------------------- +ParseWayPointStuff: + ld a,WAYPOINTBANK ;switch in waypoint RAM bank + ld [$ff00+$70],a + + ;zero out waypoint list + push hl + ld c,0 + xor a + ld hl,wayPointList +.zeroWayPoints + ld [hl+],a + ld [hl+],a + dec c + jr nz,.zeroWayPoints + pop hl + + ;512-byte wayPoint list (location*[256]) + ld a,[de] ;number of waypoints + inc de + ld [wayPointList],a + or a + jr nz,.continue + + ret ;no waypoints, no nothing + +.continue + ld c,a ;c is number of waypoints + ld a,[de] ;pad, discard + inc de + ld hl,wayPointList+2 ;&wayPointList[1] + +.wpLoad ld a,[de] ;copy high/low byte of waypoint + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + + dec c + jr nz,.wpLoad + + ;load paths + ld a,[de] ;num paths + inc de + ld [pathList],a + or a + jr z,.afterPaths + + ld c,a + ld hl,pathList+4 ;&pathList[1][0] + +.pathLoad + ld a,[de] ;each path has 4 waypoint indices + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + + dec c + jr nz,.pathLoad + +.afterPaths + ;load pathMatrix[16][16] + ld hl,pathMatrix + + ld b,16 + +.outer ld c,16 + +.inner ld a,[de] + inc de + ld [hl+],a + + dec c + jr nz,.inner + + dec b + jr nz,.outer + + ret + + +;--------------------------------------------------------------------- +; Routine: LoadTile +; Arguments: [loadTileL/H] - tile number +; b - index of class being loaded (0-255) +; c - 0=bg tile, 1=fg tile +; Description: Switches in the ROM bank containing the tile to be +; loaded, sets a ptr to the source address, and calls +; LoadBGTile or LoadFGTile appropriately +;--------------------------------------------------------------------- +LoadTile: + push af + push bc + push de + push hl + + ;figure out which bank the tile is in + ld a,[loadTileL] + ld l,a + ld a,[loadTileH] + ld h,a + cp $08 ;bg if tile # less than 2048 ($800)? + jr c,.bgTileSet + + ;fg tile set + ld a,BANK(FGTiles) ;Swap in the right bank + call SetActiveROM + ld de,FGTiles + ld a,h + sub $08 ;minus 2048 (fg tiles new bank) + ld h,a + + jp .loadTile + +.bgTileSet + cp $04 ;first or second bank? + jr c,.bgSet1 + +.bgSet2 + sub $04 + ld h,a + ld a,BANK(BGTiles1024) + ld de,BGTiles1024 + jr .gotBank + +.bgSet1 + ld a,BANK(BGTiles) ;Swap in the right bank + ld de,BGTiles + +.gotBank + call SetActiveROM + +.loadTile + ;Convert hl into a src address offset (hl<<=4) and add base addr de + ld a,h + sla l + rla + sla l + rla + sla l + rla + sla l + rla + ld h,a + add hl,de + + ;BG or FG class? + ld a,c + or a + jr nz,.fgTile + +.bgTile + call LoadBGTile + jr .done + +.fgTile + call LoadFGTile + +.done + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: LoadBGTile +; Arguments: b - index of class being loaded +; hl - src ptr to tile ROM +; Note: [bgDestPtr] - assumed to point to destination in VRAM +; tile bank 0 +; [numBGTiles] - index of tile in tile bank 0 +; Description: Loads in a tile to tile bank 0 at the given address. +; bgTileMap[index] is set to numBGTiles-1 +;--------------------------------------------------------------------- +LoadBGTile: + push af + push bc + push de + push hl + + ld a,TILEINDEXBANK ;select RAM bank of tile index maps + ld [$ff70],a + ld de,bgTileMap ;setup de with &bgTileMap[classIndex] + ld e,b ;b is class index + + ;set the attributes byte for this BG tile + PUSHROM + ld a,BANK(bg_colorTable) + call SetActiveROM + push de + push hl + push de + ld a,[loadTileL] + ld e,a + ld a,[loadTileH] + ld d,a + ld hl,bg_colorTable + add hl,de + pop de + ld d,((bgAttributes>>8)&$ff) + ld a,[hl] + ld [de],a + pop hl + pop de + POPROM + + ;Increment number of BG tiles counter + ld a,[numBGTiles] + ld [de],a ;cur tile index into bgTileMap[classIndex] + inc a + ld [numBGTiles],a + + ;Load in 16 bytes to the work buffer ($c000 + (bgDestPtr&511)) + ;(32 * 16 = 511) + ld a,[bgDestPtr] + ld e,a + ld a,[bgDestPtr+1] + ld d,a + push de + and 1 + add $c0 + ld d,a + + ld c,16 +.loop ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.loop + + pop de + call AddDE16 + + ;copy the work buffer to VRAM if numBGTiles is a multiple of 32 + ld a,[numBGTiles] + and 31 + call z,CopyBGWorkToVRAM + +IF 0 + ;Load in 16 bytes + ld a,0 + ld [$ff00+$4f],a ;load into bank 0 + ld a,[bgDestPtr] ;set de=destPtr + ld e,a + ld a,[bgDestPtr+1] + ld d,a + ld c,16 ;# of bytes to load + +.loop ld a,[hl+] + ld [de],a + inc de + + dec c + jr nz,.loop +ENDC + + ;store modified destptr + ld a,e + ld [bgDestPtr],a + ld a,d + cp $98 + jr c,.checkedNegative + sub $10 +.checkedNegative + ld [bgDestPtr+1],a + +.done + pop hl + pop de + pop bc + pop af + ret + +CopyBGWorkToVRAM: + push bc + push de + push hl + + ;set destptr to be bgDestPtr & (~511) + ld e,0 + ld a,[bgDestPtr+1] + and $fe + ld d,a + + ;if bgDestPtr is $9000 (1st tile) set $c000-$c00f to black + ;for the blank tile + ld a,e + or a + jr nz,.afterCopyBlank + ld a,d + cp $90 + jr nz,.afterCopyBlank + ld c,16 + ld hl,$c000 + xor a +.setBlankLoop + ld [hl+],a + dec c + jr nz,.setBlankLoop + +.afterCopyBlank + ld a,[numBGTiles] + dec a + and 31 + inc a + ld c,a + xor a + ld hl,$c000 + call VMemCopy + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: LoadFGTile +; Arguments: b - index of class being loaded +; hl - src ptr to tile ROM +; Note: [fgDestPtr] - assumed to point to destination in VRAM +; tile bank 1 +; [numFGTiles] - index of tile in tile bank 1 +; Description: Loads in a tile to tile bank 0 at the given address. +; fgTileMap[index] is set to numFGTiles-1 +; Duplicates any tiles loaded into $9000-$9800 into +; $8000-$8800 for tile<->sprite conversion purposes +;--------------------------------------------------------------------- +LoadFGTile: + push af + push bc + push de + push hl + + ld a,TILEINDEXBANK ;select RAM bank of tile index maps + ld [$ff00+$70],a + ld de,fgTileMap ;setup de with &fgTileMap[classIndex] + ld e,b ;b is class index + + ;set the attributes byte for this FG tile + push de + push hl + push de + ld a,[loadTileL] + ld e,a + ld a,[loadTileH] + and $03 + ld d,a + ld hl,fg_colorTable + add hl,de + pop de + ld d,((fgAttributes>>8)&$ff) + ld a,[hl] + ld [de],a + ld b,a ;save the attributes byte in b + ldio [curObjWidthHeight],a + pop hl + pop de + + ;Place tile index in fgTileMap + ld a,[numFGTiles] + ld [de],a ;cur tile index into fgTileMap[classIndex] + push af + + ;load in 2 tiles for a FG object + ;b has bit 5 set for 2x2 or cleared for 1x1; + ;manipulate b to have either 8 for 2x2 or 2 for 1x1. + bit 5,b + jr nz,.load8Tiles + ld b,2 + jr .setNumTilesToLoad +.load8Tiles + ld b,8 +.setNumTilesToLoad + ld de,$c000 ;load to work buffer + +.nextTile + ;Increment number of FG tiles counter + ld a,[numFGTiles] + inc a + ld [numFGTiles],a + + ;Load in 16 bytes + ld c,16 +.nextByte + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.nextByte + + dec b + jr nz,.nextTile + + ;retrieve index of first tile to generate facings with + pop af ;retrieve index of first tile + call GenerateFacings ;expand 2 tiles into 6 tiles + + ;Increment number of FG tiles counter to account for the new + ;tiles added in Generate Facings (4 for 1x1 or 12 for 2x2) + ldio a,[curObjWidthHeight] ;xxFxxxxx + rrca ;xxxFxxxx + rrca ;xxxxFxxx + and %00001000 ;0000F000 + or %00000100 ;0000F100 4 or 12 + ld b,a + ld a,[numFGTiles] + add b + ld [numFGTiles],a + + ;store modified destptr (plus n*16 extra tiles) + ld a,[fgDestPtr] + ld e,a + ld a,[fgDestPtr+1] + ld d,a + ld h,0 + ld l,b ;num extra tiles + swap l ;*16 + add hl,de + ld a,l + ld [fgDestPtr],a + ld a,h + cp a,$98 + jr c,.doneCheckNegative + + sub $10 +.doneCheckNegative + ld [fgDestPtr+1],a + +.done + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: LoadAssociatedClass +; Arguments: a - check if it exists already (1=yes, 0=no) +; c - class index of calling class method +; de - class ptr for new class (vector table address) +; hl - tile index of class to load +; Alters: af +; Description: Loads in the specified class IF NOT ALREADY PRESENT +; and regardless puts its index in the "associated" +; array of the calling class. +;--------------------------------------------------------------------- +LoadAssociatedClass:: + push bc + push hl + + or a + jr z,.notFound ;don't look for it + + push bc + ld b,d + ld c,e + call FindClassIndex + pop bc + or a + jr z,.notFound + +.foundMatch + ld b,a + jr .setAssociated + +.notFound + + ;------------------------------------------------------------- + ;Didn't find it; go ahead and load it into the next available + ;slot + ;------------------------------------------------------------- + ld a,l + ld [loadTileL],a + ld a,h + ld [loadTileH],a + + ld a,[numClasses] + inc a + ld [numClasses],a + ld b,a + + ld a,OBJLISTBANK + ld [$ff70],a + + ;----------Set classLookup to point to vector table---------- + ;set hl to point to classLookup[b] (times two) + push de + ld h,0 + ld l,b + sla l + rl h + ld de,classLookup + add hl,de + pop de + ld [hl],e + inc hl + ld [hl],d + + ;-----------Load in the tile-------------------------------- + push bc + ld c,1 ;loading fg tile + call LoadTile + pop bc + + ld a,OBJROM + call SetActiveROM + +.setAssociated + ;------------------------------------------------------------- + ;Expecting calling class index in c, new class index in b + ;------------------------------------------------------------- + call SetAssociated + pop hl + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: SaveFGTileInfo +; Arguments: None. +; Alters: af +; Description: Saves [numClasses], [fgDestPtr], and [numFGTiles] into +; temporary variables. +;--------------------------------------------------------------------- +SaveFGTileInfo:: + push de + push hl + + ld hl,numFGTiles + ld a,[hl+] ;get numFGTiles + ld [hl+],a ;put numFGTiles_save + ld a,[hl+] ;get numClasses + ld [hl+],a ;put numClasses_save + ld a,[hl+] ;get fgTilePtrL + ld e,a + ld a,[hl+] ;get fgTilePtrH + ld d,a + ld a,e + ld [hl+],a ;put fgTilePtrL + ld [hl],d ;put fgTilePtrH + + pop hl + pop de + ret + + +;--------------------------------------------------------------------- +; Routine: RestoreFGTileInfo +; Arguments: None. +; Alters: af +; Description: Restores [numClasses], [fgDestPtr] and [numFGTiles] +; from temp vars. +;--------------------------------------------------------------------- +RestoreFGTileInfo:: + push de + push hl + + ld hl,fgDestPtr_save+1 + ld a,[hl-] ;get fgDestPtrH + ld d,a + ld a,[hl-] ;get fgDestPtrL + ld e,a + ld a,d + ld [hl-],a ;put fgDestPtrH + ld a,e + ld [hl-],a ;put fgDestPtrL + ld a,[hl-] ;get numClasses + ld [hl-],a ;put numClasses + ld a,[hl-] ;get numFGTiles + ld [hl],a ;put numFGTiles + + pop hl + pop de + ret + +;--------------------------------------------------------------------- +; Routine: SetupHero +; Arguments: a - type of exit to place hero at: +; 1=N, 2=E, 3=S, 4=W, 5=U, 6=D, 7=X +; bc - tile index of hero class to load +; d - hero number (0 or 1) +; hl - suggested location to start searching for exit +; in XY format. +; Alters: af +; Description: Loads in the hero tile & class +; Sets up [heroX_index], [heroX_class], [heroX_object] +; Sets heroes health to be [heroX_health] unless that's +; zero then it leaves it as initialized. +; Sets heroes puffCount from [heroX_puffCount] +;--------------------------------------------------------------------- +SetupHero:: + push bc + push de + push hl + + ld e,a ;save exit type for a bit + + ;save tile to load into method parameters + ld a,c + ld [loadTileL],a + ld a,b + ld [loadTileH],a + + ;pick one of two reserved tile sets to load hero into + call SaveFGTileInfo + ld a,d ;hero number + or a + jr nz,.loadHero1 + + ld a,[firstHero] + ld [numClasses],a + xor a + ld bc,$9000 + jr .decidedOnTileSet + +.loadHero1 + ld a,[firstHero] + add 2 + ld [numClasses],a + ld a,20 + ld bc,$9140 +.decidedOnTileSet + ld [numFGTiles],a + ld a,c + ld [fgDestPtr],a + ld a,b + ld [fgDestPtr+1],a + ld a,1 + ldio [curObjWidthHeight],a + +.setupBC_heroX_index + ;setup bc with addr of hero0_index or hero1_index + ld bc,hero0_index + ld a,d ;want hero 0 or 1? + or a + jr nz,.wantHero1 + +.wantHero0 + ld a,[hero0_type] + cp HERO_GRENADE_FLAG + jr nz,.hero0_afterSetWH + + ld a,2 + ldio [curObjWidthHeight],a + +.hero0_afterSetWH + ld a,[heroesPresent] + or %01 + jr .heroDataPtrOkay + +.wantHero1 + ld a,[hero1_type] + cp HERO_GRENADE_FLAG + jr nz,.hero1_afterSetWH + + ld a,2 + ldio [curObjWidthHeight],a + +.hero1_afterSetWH + ld a,[heroesPresent] + or %10 + ld c,(hero1_index & $ff) + +.heroDataPtrOkay + ld [heroesPresent],a + + ld a,e ;retrieve desired exit + push bc ;save &heroX_index + + call FindExitLocation ;returns exit loc in hl + push hl ;save it for later + + ld h,b + ld l,c + ld a,[numClasses] + inc a + ld [numClasses],a + ld b,a + ld [hl+],a ;store class index in heroX_index + inc hl ;hl = &heroX_classL + inc hl + inc hl + push af ;save the hero class index + + call SetClassLookupEntryForTile + + ld c,1 ;loading fg tile + call LoadTile + + ld a,OBJROM + call SetActiveROM + + pop af ;retrieve hero class index + ld c,a + pop hl ;starting location + call CreateObject ;returns objPtr in de + + pop hl ;retrieve &heroX_index + inc hl ;hl = &heroX_objectL + ld [hl],e + inc hl + ld [hl],d + + call RestoreFGTileInfo + + ld b,METHOD_INIT + call CallMethod + + ;face opposite direction coming in + call GetFacing + and %11111000 + ld b,a + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,[hl] + cp EXIT_U + jr c,.cardinal + + ;we're coming in up, down, or X; let's just face east + ld a,DIR_EAST + jr .gotDir + +.cardinal + add 1 + and %11 +.gotDir + or b + call SetFacing + + ;reset health of hero + ;push de + ;ld a,l + ;and (255 - (HERODATASIZE-1)) ;set back to heroX_data + ;ld l,a + ;ld de,HERODATA_HEALTH + ;add hl,de + ;pop de + LDHL_CURHERODATA HERODATA_HEALTH + ld a,[hl] + or a + jr z,.afterInitHealth + + ;push hl + call SetHealth + ;pop hl + + ;reset hero puffs + LDHL_CURHERODATA HERODATA_PUFFCOUNT + ld a,[hl] + and %1111 + call SetPuffCount + + ;inc hl + ;inc hl ;hl = heroX_puffCount + ;ld a,[hl] + ;call SetPuffCount + +.afterInitHealth + ld b,METHOD_DRAW + call CallMethod + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FindExitLocation +; Arguments: a - type of exit to find: +; 1=N, 2=E, 3=S, 4=W, 5=U, 6=D, 7=X +; hl - "suggested" location to start searching for exit +; in XY format. +; [curObjWidthHeight] +; Returns: hl - location of first exit found or $0000 +; Alters: af +; Description: First adjusts suggested location to be opposite side +; if NESW and restricts it to map bounds. +; +; Searches forward through the map beginning at hl and +; stopping on an exit of the specified type. +; +; If there are no exits found once it reaches the end +; of the map it searches through once more starting at +; the first map cell. If there are STILL no exits found +; it returns location (1,1). +;--------------------------------------------------------------------- +FindExitLocation:: + push bc + push de + + ld b,a ;save exit type + + ;swap sides if exit type is NESW + ld a,b + dec a + and %11111100 + jr nz,.afterSwapExit + + ld a,b + dec a + bit 0,a + jr nz,.east_or_west + + ;north or south + bit 1,a + jr nz,.south + +.north ;looking for north entrance so coming from south, place at top + ld l,1 + jr .afterSwapExit + +.south ;entering south means coming from north, place at bottom + ld a,[mapHeight] + dec a + dec a + ld l,a + jr .afterSwapExit + +.east_or_west + bit 0,a + jr nz,.west + + ;entering east, place at right + ld a,[mapWidth] + dec a + dec a + ld h,a + jr .afterSwapExit + +.west ;entering west, place at left + ld h,1 + +.afterSwapExit + ;make sure x & y are within bounds + ld a,[mapWidth] + cp h ;width > x? + jr z,.xOutOfBounds + jr nc,.xInBounds + +.xOutOfBounds + sub 2 ;x out-of-bounds, set to width-2 + ld h,a + +.xInBounds + ld a,[mapHeight] + cp l + jr z,.yOutOfBounds + jr nc,.yInBounds + +.yOutOfBounds + sub 2 + ld l,a + +.yInBounds + call ConvertXYToLocHL ;location back to ptr + + swap b + ld c,$f0 ;put mask in register for faster ANDing + + ;setup de with first out-of-bounds index + ld a,[mapTotalSize] + ld e,a + ld a,[mapTotalSize+1] + ld d,a + + ld a,ZONEBANK + ld [$ff70],a + +.loop ld a,h + cp d + jr nz,.continue + ld a,l + cp e + jr nz,.continue + + ;reached end of map + jr .didntFind + +.continue + ld a,[hl+] + and c + cp b + jr nz,.loop + + ;found an exit location; see if it's empty + call .isValidExit + jr nz,.done + inc hl + jr .loop + +.didntFind ;look again starting at beginning + ld hl,map + ld a,[mapHeight] + ld d,a + +.outer ld a,[mapPitch] + ld e,a +.inner ld a,[hl+] + and c + cp b + jr nz,.notFoundYet + + ;maybe found; check if map location occupied + call .isValidExit + jr nz,.done + inc hl + +.notFoundYet + dec e + jr nz,.inner + dec d + jr nz,.outer + +;didnt find it after searching the WHOLE map + ld hl,$0000 + +.done + pop de + pop bc + ret + +.isValidExit + ld a,MAPBANK + ld [$ff70],a + dec hl + ld a,[hl] ;get this location in the map array + push af ;save it for a sec + ld a,ZONEBANK ;switch back to zones just in case + ld [$ff70],a + pop af + or a + jr nz,.validFalse + + ldio a,[curObjWidthHeight] + cp 1 + jr z,.validTrue + + ;2x2; must check locations to right, down-right, and down + ld a,MAPBANK + ld [$ff70],a + push hl + + inc hl + ld a,[hl] + or a + jr nz,.validFalseCleanUp + + push de + ld d,0 + ld a,[mapPitch] + ld e,a + add hl,de + pop de + + ld a,[hl] + or a + jr nz,.validFalseCleanUp + + dec hl + ld a,[hl] + or a + jr nz,.validFalseCleanUp + +.validTrueCleanUp + pop hl + ld a,ZONEBANK ;switch back to zones + ld [$ff70],a + jr .validTrue + +.validFalseCleanUp + pop hl + ld a,ZONEBANK ;switch back to zones + ld [$ff70],a + xor a + ret + +.validTrue + ld a,1 + or a + ret + +.validFalse + xor a + ret + +;--------------------------------------------------------------------- +; Routine: FindClassIndex +; Arguments: bc - class to find +; Returns: a - class index +; zflag - result of "OR a" +; Alters: af +; Description: Finds first class index of class "bc" & returns class +; index or 0 if it doesn't exist +;--------------------------------------------------------------------- +FindClassIndex:: + push de + push hl + + ld a,OBJLISTBANK + ld [$ff70],a + + ld a,[numClasses] + ld d,a + ld e,1 + + ld hl,classLookup+2 + +.loop ld a,[hl+] + cp c + jr nz,.afterCheck + ld a,[hl] + cp b + jr nz,.afterCheck + + ;found it! + ld a,e ;a is class index + or a + pop hl + pop de + ret + +.afterCheck + inc hl + inc e + dec d + jr nz,.loop + + pop hl + pop de + xor a ;didn't find it + ret + +;--------------------------------------------------------------------- +; Routine: ChangeClass +; Arguments: bc - class to change +; de - pointer to new class +; Alters: af,hl +; Description: Changes all objects of the "old" class type to the +; "new" class type +;--------------------------------------------------------------------- +ChangeClass:: + ld a,OBJLISTBANK + ld [$ff70],a + + ld a,$ff + ld hl,classLookup+2 + +.loop push af + ld a,[hl+] + cp c + jr nz,.afterCheck + ld a,[hl] + cp b + jr nz,.afterCheck + + ;replace old class with new + ld [hl],d + dec hl + ld [hl],e + inc hl + +.afterCheck + inc hl + pop af + dec a + jr nz,.loop + + ret + +;--------------------------------------------------------------------- +; Routine: ChangeFirstClass +; Arguments: bc - class to change +; de - pointer to new class +; Alters: af,hl +; Description: Changes of first class found to match the "old" class +; type to the "new" class type +;--------------------------------------------------------------------- +ChangeFirstClass:: + ld a,OBJLISTBANK + ld [$ff70],a + + ld a,$ff + ld hl,classLookup+2 + +.loop push af + ld a,[hl+] + cp c + jr nz,.afterCheck + ld a,[hl] + cp b + jr nz,.afterCheck + + ;replace old class with new + ld [hl],d + dec hl + ld [hl],e + inc hl + pop af + ret + +.afterCheck + inc hl + pop af + dec a + jr nz,.loop + + ret + +;--------------------------------------------------------------------- +; Routines: CopyMapMethodToRAM +; Arguments: a - offset of method in map contents +; [mapMethodContents] be set up +; Returns: nothing. +; Alters: nothing. +; Description: Copies the Map Check or Init Method to RAM so it can +; be called w/o switching ROM banks +;--------------------------------------------------------------------- +CopyMapMethodToRAM:: + push af + push bc + push de + push hl + + call LookupInMapContents ;set hl to point to source + + ;setup bc as # bytes to copy + ld c,[hl] ;low byte of size + inc hl + ld b,[hl] ;high byte of size + inc hl + + ld de,levelCheckRAM ;dest addr + + ;copy sets of 256 + ld a,b + or a + jr z,.copy_lt_256 + push bc +.outer ld c,0 +.inner ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.inner + dec b + jr nz,.outer + pop bc + +.copy_lt_256 + ;copy remaining < 256 bytes + ld a,c + or a + jr z,.done +.loop ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.loop + +.done + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: HandleExitFromMap +; Arguments: c - hero class index +; de - ptr to object +; Returns: Nothing. +; Alters: af +; Description: If the hero exiting is the one controlled by this +; machine, sets the paramaters which will cause a new +; map to be loaded (in user.asm) if the exit has a map +; associated with it. +; +; Deletes the remote hero if an exit is found. +;--------------------------------------------------------------------- +HandleExitFromMap:: + push bc + push de + push hl + + ;save exit type in B + call GetCurLocation + ldio a,[curObjWidthHeight] + cp 2 + jr nz,.locationSet + + call GetFacing + and %11 + cp DIR_NORTH + jr z,.locationSet + cp DIR_WEST + jr z,.locationSet + push af + call ConvertLocHLToXY + pop af + cp DIR_EAST + jr z,.incH + + inc l + jr .locationAltered + +.incH + inc h + +.locationAltered + call ConvertXYToLocHL + +.locationSet + ld a,ZONEBANK + ld [$ff70],a + ld a,[hl] + swap a + and %00000111 + ld b,a + + ;save exit location as entry location + call ConvertLocHLToXY + + push de + ld d,((hero0_data>>8) & $ff) + ld a,[curHeroAddressL] + add HERODATA_ENTERLOC + ld e,a + ld a,l + ld [de],a + inc de + ld a,h + ld [de],a + pop de + + ;lookup link in link table + ld a,b + sla a + add (mapExitLinks & $ff) + ld l,a + ld a,0 + adc ((mapExitLinks>>8) & $ff) + ld h,a + + ;store 16-bit BCD link value in hl + ld a,[hl+] + ld h,[hl] + ld l,a + + ld a,$40 + cp h + jr nz,.linkOkay + cp l + jr nz,.linkOkay + jp .done ;link is $4040 = (+0,+0) = no link + +.linkOkay + ;if remote hero exiting then don't change my map + push hl + LDHL_CURHERODATA HERODATA_INDEX + ld a,[hl] + pop hl + cp c ;cur hero index == cur index? + jr z,.localHero + jp .removeRemoteHero + +.localHero + call RemoveHero + ld a,h ;x link/offset + and %11000000 + jr nz,.xlinkRelative + + ld a,h + jr .doY + +.xlinkRelative + bit 6,h ;positive offset? + jr z,.negative_x_offset + + ;positive offset + call .setupH + call BCDToNumber + add h + call NumberToBCD + jr .doY + +.negative_x_offset + call .setupH + call BCDToNumber + sub h + call NumberToBCD + jr .doY + +.setupH + ld a,h + and %00111111 + ld h,a + ld a,[curLevelIndex+1] + ret + +.doY + ld [curLevelIndex+1],a + + ld a,l ;y link/offset + and %11000000 + jr nz,.ylinkRelative + + ld a,l + jr .finishedY + +.ylinkRelative + bit 6,l ;positive offset? + jr z,.negative_y_offset + + ;positive offset + call .setupL + call BCDToNumber + add l + call NumberToBCD + jr .finishedY + +.negative_y_offset + call .setupL + call BCDToNumber + sub l + call NumberToBCD + jr .finishedY + +.setupL + ld a,l + and %00111111 + ld l,a + ld a,[curLevelIndex] + ret + +.finishedY + ld [curLevelIndex],a + ld a,1 + ld [timeToChangeLevel],a + + ;switch NESW to be opposite + ld a,b + dec a + and %11111100 + jr nz,.switchUp + + ld a,b + inc a ;same as a--, a+=2 + and %00000011 + inc a + ld b,a + jr .afterSwitchToOpposite + +.switchUp + ld a,b + cp EXIT_U + jr nz,.switchDown + ld b,EXIT_D + ld a,b + jr .afterSwitchToOpposite + +.switchDown + cp EXIT_D + jr nz,.afterSwitchToOpposite + ld b,EXIT_U + ld a,b + +.afterSwitchToOpposite + LDHL_CURHERODATA HERODATA_ENTERDIR + ld a,b + ld [hl],a + +.updateState + ;don't update the state if it's an asynchronous can-join + ;map or a cinema + ld a,[canJoinMap] + cp 2 + jr z,.afterUpdateState + ld a,[displayType] + cp 1 + jr z,.afterUpdateState + + call UpdateState + +.removeRemoteHero + call RemoveHero + +.afterUpdateState +.zeroIndex + ld a,[hero0_index] + cp c + jr nz,.zeroIndex1 + + xor a + ld [hero0_index],a + jr .done + +.zeroIndex1 + ld a,[hero1_index] + cp c + jr nz,.done + xor a + ld [hero1_index],a + +.done + pop hl + pop de + pop bc + ret + +UpdateState:: + ld a,[amLinkMaster] + bit 7,a + ret nz ;no link + +.updateState + ld a,LUPDATESTATE + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.updateState ;must repeat + + ld a,[curLevelStateIndex] + call TransmitByte + ldio a,[mapState] + or a + jr nz,.stateNotZero + ld a,1 +.stateNotZero + call TransmitByte + ret + + +;--------------------------------------------------------------------- +; Routines: HasInventoryItem +; AddInventoryItem +; RemoveInventoryItem +; Arguments: bc - b=item byte, c=bitmask +; Alters: af +; Returns: a, zflag +; Description: Returns !0 if inventory item exists, 0 otherwise +;--------------------------------------------------------------------- +HasInventoryItem:: + push hl + call PointHLToInventory + pop hl + and c + ret + +AddInventoryItem:: + ;duplicate code also in user.asm + push hl + call PointHLToInventory + or c + ld [hl],a + + ld a,[amLinkMaster] + bit 7,a + jr nz,.afterUpdateRemote + +.updateRemote + ld a,LADDINVITEM + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.updateRemote ;must repeat + ld a,c + call TransmitByte + ld a,b + call TransmitByte +.afterUpdateRemote + + pop hl + ret + +RemoveInventoryItem:: + ;duplicate code also in user.asm + push hl + call PointHLToInventory + xor $ff + or c + xor $ff + ld [hl],a + + ld a,[amLinkMaster] + bit 7,a + jr nz,.afterUpdateRemote + +.updateRemote + ld a,LREMINVITEM + call ExchangeByte + call CheckSimultaneousLCC + jr nz,.updateRemote ;must repeat + ld a,c + call TransmitByte + ld a,b + call TransmitByte +.afterUpdateRemote + + pop hl + ret + +PointHLToInventory:: + ld h,((inventory>>8)&$ff) + ld a,(inventory & $ff) + add b + ld l,a + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routines: GetFirstInventoryIndex +; GetNextInventoryIndex +; Arguments: a - previous inventory index (for GetNextII) +; Alters: af +; Description: Returns $ff for none, index otherwise (0,1,2,....) +;--------------------------------------------------------------------- +GetFirstInventoryIndex: + ld a,$ff + +GetNextInventoryIndex: + inc a + cp 48 ;reached max inventory items? + jr c,.notDone + + ld a,$ff + ret + +.notDone + push bc + push de + push hl + ld b,a + + ;position hl at current byte of inventory + ld h,((inventory >> 8) & $ff) + rrca ;itemIndex /= 8 + rrca + rrca + and %00011111 + add (inventory & $ff) + ld l,a + + ;jump to routine checking appropriate bit of inventory + ld a,b + rlca + and %1110 + add (.vectorTable & $ff) + ld e,a + ld a,0 + adc ((.vectorTable>>8) & $ff) + ld d,a + ld a,[hl] + push de ;jump to [de] + ret + +.vectorTable + jr .bit0 + jr .bit1 + jr .bit2 + jr .bit3 + jr .bit4 + jr .bit5 + jr .bit6 + jr .bit7 + +.bit0 + bit 0,a + jr nz,.foundIt + inc b +.bit1 + bit 1,a + jr nz,.foundIt + inc b +.bit2 + bit 2,a + jr nz,.foundIt + inc b +.bit3 + bit 3,a + jr nz,.foundIt + inc b +.bit4 + bit 4,a + jr nz,.foundIt + inc b +.bit5 + bit 5,a + jr nz,.foundIt + inc b +.bit6 + bit 6,a + jr nz,.foundIt + inc b +.bit7 + bit 7,a + jr nz,.foundIt + inc b + inc hl + ld a,l + cp ((inventory+16)&$ff) + jr z,.didntFind + ld a,[hl] + jr .bit0 + +.didntFind + ld a,$ff + jr .done + +.foundIt + ld a,b ;index + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: State0To1 +; Arguments: [mapState] +; Alters: af, [mapState] +; Returns: a - [mapState] +; Description: If [mapState] is 0 it is changed to 1, otherwise it +; is unmodified. The new map state is returned in a. +;--------------------------------------------------------------------- +State0To1:: + ldio a,[mapState] + or a + ret nz + ld a,1 + ldio [mapState],a + ret + +;--------------------------------------------------------------------- +; map data +;--------------------------------------------------------------------- +SECTION "MapSupportSection",ROMX + +;--------------------------------------------------------------------- +; Routine: GuestContinueSynchronization +; Arguments: None. +; Alters: af +; Returns: Nothing. +; Description: +;--------------------------------------------------------------------- +GuestContinueSynchronization:: + push bc + push de + push hl + + xor a + ld [backBufferReady],a + + ld a,LSYNCHREADY + call TransmitByte + + ;receive fresh copy of all my hero data from host + ld hl,hero0_data + ld bc,HERODATASIZE*2 + xor a + call ReceiveData + + LONGCALLNOARGS ResetList + + call ReceiveByte + ld [randomLoc],a + + call ReceiveByte + ld [heroesIdle],a + + ld hl,map + ld bc,4096 + ld a,MAPBANK + call ReceiveData + + ;fadeCurPalette + ld hl,fadeCurPalette + ld bc,128 + xor a + call ReceiveData + + ;gamePalette + ld hl,gamePalette + ld bc,128 + ld a,FADEBANK + call ReceiveData + + ;first 16 bytes of level check RAM + ld hl,levelCheckRAM + ld bc,16 + xor a + call ReceiveData + + ;spriteOAMdata + ld hl,spriteOAMBuffer + ld bc,160 + xor a + call ReceiveData + + ld hl,headTable ;headTable - linked list head + ld bc,256 + ld a,OBJLISTBANK + call ReceiveData + + ld hl,objExists ;objExists, FOF table + ld bc,512 + ld a,OBJLISTBANK + call ReceiveCompressedData + + call ReceiveByte + ld [numClasses],a + ld b,0 ;bc = numClasses*2 + 2 + ld c,a + sla c + rl b + inc bc + inc bc + + ld hl,classLookup + ;ld bc,512 numClasses*2 + ld a,OBJLISTBANK + call ReceiveData + + ld hl,fgTileMap + ld a,[numClasses] + ld b,0 + ld c,a + ld a,OBJLISTBANK + call ReceiveData + + ld hl,objClassLookup ;class indices for each obj + ld bc,256 + ld a,OBJLISTBANK + call ReceiveData + + ld hl,associatedIndex + ld bc,256 + ld a,OBJLISTBANK + call ReceiveData + + ld hl,spritesUsed + ld bc,40 + ld a,OBJLISTBANK + call ReceiveCompressedData + + ;---------------receive used objects------------------------- + ld a,OBJLISTBANK + ld [$ff70],a + ld de,objExists+1 +.receiveUsedObject + ld a,[de] ;is this object used? + or a + jr z,.afterReceiveUsedObject ;not used + + PREPLONGCALL .afterCvtIndexToPtr + ld a,e ;get object index + LONGCALL IndexToPointerHL ;cvt to ptr +.afterCvtIndexToPtr + ld bc,16 + ld a,OBJBANK + call ReceiveData + ld a,OBJLISTBANK + ld [$ff70],a + +.afterReceiveUsedObject + inc de + ld a,e + or a + jr nz,.receiveUsedObject + + call ReceiveByte + ld [numFreeSprites],a + + call ReceiveByte + ld [firstFreeObj],a + + call ReceiveByte + ld [randomLoc],a + + call ReceiveByte + ld [guardAlarm],a + + ;call ReceiveByte + ;ld [dialogBank],a + + call ReceiveByte + ld [respawnMap],a + call ReceiveByte + ld [respawnMap+1],a + + call ReceiveByte + ldio [mapState],a + call ReceiveByte + ldio [mapState+1],a + + ld hl,levelVars + ld bc,64 + xor a + call ReceiveData + + ;my music to off + xor a + ld [musicEnabled],a + + ld hl,musicBank + ld bc,64 + xor a + call ReceiveData + + ;setup the wave table + ld c,16 + ld de,$ff30 + ld hl,musicWaveform +.setupWave + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.setupWave + + ;set default instruments + ld hl,musicInstrument1 + ld de,$ff10 + ld bc,4 + xor a + call MemCopy + ld hl,musicInstrument2 + ld de,$ff16 + ld bc,3 + call MemCopy + ld hl,musicInstrument3 + ld de,$ff31 + call MemCopy + ld hl,musicInstrument4 + ld de,$ff20 + call MemCopy + + ;disable sound + xor a + ldio [$ff26],a + + ldio [$ff12],a ;zero envelope all instruments + ldio [$ff17],a + ldio [$ff1c],a + ldio [$ff21],a + + ;enable sound + ld a,$80 + ldio [$ff26],a ;master + ld a,$ff + ldio [$ff24],a ;volume + ldio [$ff25],a ;sound output terminals + + ld hl,musicStack + ld bc,128 + ld a,MUSICBANK + call ReceiveData + + call ReceiveByte + ldio [musicEnabled],a + + + LONGCALLNOARGS LinkRemakeLists + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: RandomizeFlightCodes +; Arguments: None. +; Alters: all +; Returns: Nothing. +; Description: Randomizes the flight codes +;--------------------------------------------------------------------- +RandomizeFlightCodes:: + ;randomize 11/15 flight codes + ld a,FLIGHTCODEBANK + ldio [$ff70],a + + ldio a,[randomLoc] + push af + ldio a,[vblankTimer] + ldio [randomLoc],a + + ld hl,flightCode+1 + ld a,11 +.loop + push af + + ;get a random octal coordinate in bc + ld a,7 + call GetRandomNumMask + swap a + ld b,a + ld a,7 + call GetRandomNumMask + or b + ld b,a + ld a,7 + call GetRandomNumMask + swap a + ld c,a + ld a,7 + call GetRandomNumMask + or c + ld c,a +.validateCode + call .checkCodeExists + jr nz,.placeCode + call .incrementCode + jr .validateCode + +.placeCode + ld [hl],c + inc hl + ld [hl],b + inc hl + inc hl + pop af + dec a + jr nz,.loop + + ldio a,[randomLoc] + ldio [asyncRandLoc],a + pop af + ldio [randomLoc],a + ret + +.incrementCode + ;separate code bc into bcde + ld a,c + and 7 + ld e,a + ld a,c + swap a + and 7 + ld d,a + ld a,b + and 7 + ld c,a + ld a,b + swap a + and 7 + ld b,a + + inc e + ld a,e + cp 8 + jr nz,.incrementDone + + ld e,0 + inc d + ld a,d + cp 8 + jr nz,.incrementDone + + ld d,0 + inc c + ld a,c + cp 8 + jr nz,.incrementDone + + ld c,0 + inc b + ld a,b + cp 8 + jr nz,.incrementDone + + ld b,0 + +.incrementDone + ;reassemble bcde into bc + swap b + ld a,c + or b + ld b,a + swap d + ld a,e + or d + ld c,a + ret + +.checkCodeExists + push bc + push hl + + ld hl,flightCode + ld c,[hl] + inc hl +.checkCodeLoop + ld a,[hl+] + cp c + jr nz,.keepGoing + + ld a,[hl] + cp b + jr nz,.keepGoing + + ;found a match :( + xor a + pop hl + pop bc + ret + +.keepGoing + inc hl + inc hl + dec c + jr nz,.checkCodeLoop + + ;no match! + ld a,1 + or a + pop hl + pop bc + ret + +;WARNING not home section + +;--------------------------------------------------------------------- +; map data +;--------------------------------------------------------------------- +SECTION "MapLookupTableSection",ROMX +MapLookupTable: + +;calculate index number 0-255 from xxyy with "i = yy*16 + xx" +;e.g. l0205 = 5*16 + 2 = 82 +DW BANK(L0000_Contents),L0000_Contents ;0 The Hive +DW BANK(L0100_Contents),L0100_Contents ;1 +DW BANK(L0200_Contents),L0200_Contents ;2 +DW BANK(L0300_Contents),L0300_Contents ;3 +DW BANK(L0400_Contents),L0400_Contents ;4 +DW BANK(L0500_Contents),L0500_Contents ;5 +DW BANK(L0600_Contents),L0600_Contents ;6 +DW BANK(L0700_Contents),L0700_Contents ;7 +DW BANK(L0800_Contents),L0800_Contents ;8 +DW BANK(L0900_Contents),L0900_Contents ;9 +DW BANK(L1000_Contents),L1000_Contents ;10 +DW BANK(L1100_Contents),L1100_Contents ;11 (1100, char select) +DW BANK(L1200_Contents),L1200_Contents ;12 (1200, demo intro) +DW BANK(L1300_Contents),L1300_Contents ;13 +DW BANK(L1400_Contents),L1400_Contents ;14 +DW BANK(L1500_Contents),L1500_Contents ;15 +DW BANK(L0001_Contents),L0001_Contents ;16 +DW BANK(L0101_Contents),L0101_Contents ;17 +DW BANK(L0201_Contents),L0201_Contents ;18 +DW BANK(L0301_Contents),L0301_Contents ;19 +DW BANK(L0401_Contents),L0401_Contents ;20 +DW BANK(L0501_Contents),L0501_Contents ;21 +DW BANK(L0601_Contents),L0601_Contents ;22 +DW BANK(L0701_Contents),L0701_Contents ;23 +DW BANK(L0801_Contents),L0801_Contents ;24 +DW BANK(L0901_Contents),L0901_Contents ;25 +DW BANK(L1001_Contents),L1001_Contents ;26 +DW BANK(L1101_Contents),L1101_Contents ;27 (1101, Main Menu) +DW BANK(L1201_Contents),L1201_Contents ;28 (join game) +DW BANK(L1301_Contents),L1301_Contents ;29 +DW BANK(L1401_Contents),L1401_Contents ;30 +DW BANK(L1501_Contents),L1501_Contents ;31 +DW BANK(L0002_Contents),L0002_Contents ;32 +DW BANK(L0102_Contents),L0102_Contents ;33 +DW BANK(L0202_Contents),L0202_Contents ;34 +DW BANK(L0302_Contents),L0302_Contents ;35 +DW BANK(L0402_Contents),L0402_Contents ;36 +DW BANK(L0502_Contents),L0502_Contents ;37 +DW BANK(L0602_Contents),L0602_Contents ;38 +DW BANK(L0702_Contents),L0702_Contents ;39 +DW BANK(L0802_Contents),L0802_Contents ;40 +DW BANK(L0902_Contents),L0902_Contents ;41 +DW BANK(L1002_Contents),L1002_Contents ;42 +DW BANK(L1102_Contents),L1102_Contents ;43 (1102, main intro) +DW BANK(L1202_Contents),L1202_Contents ;44 (1202, dropship lv v.t.) +DW BANK(L1302_Contents),L1302_Contents ;45 (1302 ba corners gyro) +DW BANK(L1402_Contents),L1402_Contents ;46 (1402 b12 surrenders) +DW BANK(L1502_Contents),L1502_Contents ;47 +DW BANK(L0003_Contents),L0003_Contents ;48 +DW BANK(L0103_Contents),L0103_Contents ;49 +DW BANK(L0203_Contents),L0203_Contents ;50 +DW BANK(L0303_Contents),L0303_Contents ;51 +DW BANK(L0403_Contents),L0403_Contents ;52 +DW BANK(L0503_Contents),L0503_Contents ;53 +DW BANK(L0603_Contents),L0603_Contents ;54 +DW BANK(L0703_Contents),L0703_Contents ;55 +DW BANK(L0803_Contents),L0803_Contents ;56 +DW BANK(L0903_Contents),L0903_Contents ;57 +DW BANK(L1003_Contents),L1003_Contents ;58 +DW BANK(L1103_Contents),L1103_Contents ;59 +DW BANK(L1203_Contents),L1203_Contents ;60 +DW BANK(L1303_Contents),L1303_Contents ;61 +DW BANK(L1403_Contents),L1403_Contents ;62 +DW BANK(L1503_Contents),L1503_Contents ;63 +DW BANK(L0004_Contents),L0004_Contents ;64 +DW BANK(L0104_Contents),L0104_Contents ;65 +DW BANK(L0204_Contents),L0204_Contents ;66 +DW BANK(L0304_Contents),L0304_Contents ;67 0304 shroom +DW BANK(L0404_Contents),L0404_Contents ;68 +DW BANK(L0504_Contents),L0504_Contents ;69 +DW BANK(L0604_Contents),L0604_Contents ;70 +DW BANK(L0704_Contents),L0704_Contents ;71 +DW BANK(L0804_Contents),L0804_Contents ;72 +DW BANK(L0904_Contents),L0904_Contents ;73 +DW BANK(L1004_Contents),L1004_Contents ;74 +DW BANK(L1104_Contents),L1104_Contents ;75 +DW BANK(L1204_Contents),L1204_Contents ;76 +DW BANK(L1304_Contents),L1304_Contents ;77 +DW BANK(L1404_Contents),L1404_Contents ;78 +DW BANK(L1504_Contents),L1504_Contents ;79 +DW BANK(L0005_Contents),L0005_Contents ;80 +DW BANK(L0105_Contents),L0105_Contents ;81 path +DW BANK(L0205_Contents),L0205_Contents ;82 bridge +DW BANK(L0305_Contents),L0305_Contents ;83 +DW BANK(L0405_Contents),L0405_Contents ;84 +DW BANK(L0505_Contents),L0505_Contents ;85 +DW BANK(L0605_Contents),L0605_Contents ;86 +DW BANK(L0705_Contents),L0705_Contents ;87 +DW BANK(L0805_Contents),L0805_Contents ;88 +DW BANK(L0905_Contents),L0905_Contents ;89 +DW BANK(L1005_Contents),L1005_Contents ;90 +DW BANK(L1105_Contents),L1105_Contents ;91 +DW BANK(L1205_Contents),L1205_Contents ;92 +DW BANK(L1305_Contents),L1305_Contents ;93 +DW BANK(L1405_Contents),L1405_Contents ;94 +DW BANK(L1505_Contents),L1505_Contents ;95 +DW BANK(L0006_Contents),L0006_Contents ;96 +DW BANK(L0106_Contents),L0106_Contents ;97 path +DW BANK(L0206_Contents),L0206_Contents ;98 +DW BANK(L0306_Contents),L0306_Contents ;99 +DW BANK(L0406_Contents),L0406_Contents ;100 +DW BANK(L0506_Contents),L0506_Contents ;101 +DW BANK(L0606_Contents),L0606_Contents ;102 +DW BANK(L0706_Contents),L0706_Contents ;103 +DW BANK(L0806_Contents),L0806_Contents ;104 +DW BANK(L0906_Contents),L0906_Contents ;105 +DW BANK(L1006_Contents),L1006_Contents ;106 +DW BANK(L1106_Contents),L1106_Contents ;107 +DW BANK(L1206_Contents),L1206_Contents ;108 +DW BANK(L1306_Contents),L1306_Contents ;109 +DW BANK(L1406_Contents),L1406_Contents ;110 +DW BANK(L1506_Contents),L1506_Contents ;111 +DW BANK(L0007_Contents),L0007_Contents ;112 +DW BANK(L0107_Contents),L0107_Contents ;113 path +DW BANK(L0207_Contents),L0207_Contents ;114 +DW BANK(L0307_Contents),L0307_Contents ;115 +DW BANK(L0407_Contents),L0407_Contents ;116 +DW BANK(L0507_Contents),L0507_Contents ;117 +DW BANK(L0607_Contents),L0607_Contents ;118 +DW BANK(L0707_Contents),L0707_Contents ;119 +DW BANK(L0807_Contents),L0807_Contents ;120 +DW BANK(L0907_Contents),L0907_Contents ;121 +DW BANK(L1007_Contents),L1007_Contents ;122 +DW BANK(L1107_Contents),L1107_Contents ;123 +DW BANK(L1207_Contents),L1207_Contents ;124 +DW BANK(L1307_Contents),L1307_Contents ;125 +DW BANK(L1407_Contents),L1407_Contents ;126 +DW BANK(L1507_Contents),L1507_Contents ;127 +DW BANK(L0008_Contents),L0008_Contents +DW BANK(L0108_Contents),L0108_Contents +DW BANK(L0208_Contents),L0208_Contents +DW BANK(L0308_Contents),L0308_Contents +DW BANK(L0408_Contents),L0408_Contents +DW BANK(L0508_Contents),L0508_Contents +DW BANK(L0608_Contents),L0608_Contents +DW BANK(L0708_Contents),L0708_Contents +DW BANK(L0808_Contents),L0808_Contents +DW BANK(L0908_Contents),L0908_Contents +DW BANK(L1008_Contents),L1008_Contents +DW BANK(L1108_Contents),L1108_Contents +DW BANK(L1208_Contents),L1208_Contents +DW BANK(L1308_Contents),L1308_Contents +DW BANK(L1408_Contents),L1408_Contents +DW BANK(L1508_Contents),L1508_Contents +DW BANK(L0009_Contents),L0009_Contents +DW BANK(L0109_Contents),L0109_Contents +DW BANK(L0209_Contents),L0209_Contents +DW BANK(L0309_Contents),L0309_Contents +DW BANK(L0409_Contents),L0409_Contents +DW BANK(L0509_Contents),L0509_Contents +DW BANK(L0609_Contents),L0609_Contents +DW BANK(L0709_Contents),L0709_Contents +DW BANK(L0809_Contents),L0809_Contents +DW BANK(L0909_Contents),L0909_Contents +DW BANK(L1009_Contents),L1009_Contents +DW BANK(L1109_Contents),L1109_Contents +DW BANK(L1209_Contents),L1209_Contents +DW BANK(L1309_Contents),L1309_Contents +DW BANK(L1409_Contents),L1409_Contents +DW BANK(L1509_Contents),L1509_Contents +DW BANK(L0010_Contents),L0010_Contents +DW BANK(L0110_Contents),L0110_Contents +DW BANK(L0210_Contents),L0210_Contents +DW BANK(L0310_Contents),L0310_Contents +DW BANK(L0410_Contents),L0410_Contents +DW BANK(L0510_Contents),L0510_Contents +DW BANK(L0610_Contents),L0610_Contents +DW BANK(L0710_Contents),L0710_Contents +DW BANK(L0810_Contents),L0810_Contents +DW BANK(L0910_Contents),L0910_Contents +DW BANK(L1010_Contents),L1010_Contents +DW BANK(L1110_Contents),L1110_Contents +DW BANK(L1210_Contents),L1210_Contents +DW BANK(L1310_Contents),L1310_Contents +DW BANK(L1410_Contents),L1410_Contents +DW BANK(L1510_Contents),L1510_Contents +DW BANK(L0011_Contents),L0011_Contents +DW BANK(L0111_Contents),L0111_Contents +DW BANK(L0211_Contents),L0211_Contents +DW BANK(L0311_Contents),L0311_Contents +DW BANK(L0411_Contents),L0411_Contents +DW BANK(L0511_Contents),L0511_Contents +DW BANK(L0611_Contents),L0611_Contents +DW BANK(L0711_Contents),L0711_Contents +DW BANK(L0811_Contents),L0811_Contents +DW BANK(L0911_Contents),L0911_Contents +DW BANK(L1011_Contents),L1011_Contents +DW BANK(L1111_Contents),L1111_Contents +DW BANK(L1211_Contents),L1211_Contents +DW BANK(L1311_Contents),L1311_Contents +DW BANK(L1411_Contents),L1411_Contents +DW BANK(L1511_Contents),L1511_Contents +DW BANK(L0012_Contents),L0012_Contents +DW BANK(L0112_Contents),L0112_Contents +DW BANK(L0212_Contents),L0212_Contents +DW BANK(L0312_Contents),L0312_Contents +DW BANK(L0412_Contents),L0412_Contents +DW BANK(L0512_Contents),L0512_Contents +DW BANK(L0612_Contents),L0612_Contents +DW BANK(L0712_Contents),L0712_Contents +DW BANK(L0812_Contents),L0812_Contents +DW BANK(L0912_Contents),L0912_Contents +DW BANK(L1012_Contents),L1012_Contents +DW BANK(L1112_Contents),L1112_Contents +DW BANK(L1212_Contents),L1212_Contents +DW BANK(L1312_Contents),L1312_Contents +DW BANK(L1412_Contents),L1412_Contents +DW BANK(L1512_Contents),L1512_Contents +DW BANK(L0013_Contents),L0013_Contents ;208 intro_ba1 +DW BANK(L0113_Contents),L0113_Contents ;209 intro_ba2 +DW BANK(L0213_Contents),L0213_Contents ;210 intro_ba3 +DW BANK(L0313_Contents),L0313_Contents ;211 intro_ba4 +DW BANK(L0413_Contents),L0413_Contents ;212 +DW BANK(L0513_Contents),L0513_Contents ;213 +DW BANK(L0613_Contents),L0613_Contents ;214 +DW BANK(L0713_Contents),L0713_Contents ;215 +DW BANK(L0813_Contents),L0813_Contents ;216 +DW BANK(L0913_Contents),L0913_Contents ;217 +DW BANK(L1013_Contents),L1013_Contents ;218 +DW BANK(L1113_Contents),L1113_Contents ;219 +DW BANK(L1213_Contents),L1213_Contents ;220 +DW BANK(L1313_Contents),L1313_Contents ;221 +DW BANK(L1413_Contents),L1413_Contents ;222 +DW BANK(L1513_Contents),L1513_Contents ;223 +DW BANK(L0014_Contents),L0014_Contents ;224 intro haiku 1 +DW BANK(L0114_Contents),L0114_Contents ;225 intro haiku 2 +DW BANK(L0214_Contents),L0214_Contents ;226 intro haiku 3 +DW BANK(L0314_Contents),L0314_Contents ;227 intro haiku 4 (escape) +DW BANK(L0414_Contents),L0414_Contents ;228 +DW BANK(L0514_Contents),L0514_Contents ;229 +DW BANK(L0614_Contents),L0614_Contents ;230 +DW BANK(L0714_Contents),L0714_Contents ;231 +DW BANK(L0814_Contents),L0814_Contents ;232 +DW BANK(L0914_Contents),L0914_Contents ;233 +DW BANK(L1014_Contents),L1014_Contents ;234 +DW BANK(L1114_Contents),L1114_Contents ;235 +DW BANK(L1214_Contents),L1214_Contents ;236 +DW BANK(L1314_Contents),L1314_Contents ;237 +DW BANK(L1414_Contents),L1414_Contents ;238 +DW BANK(L1514_Contents),L1514_Contents ;239 +DW BANK(L0015_Contents),L0015_Contents ;240 intro bs 1 +DW BANK(L0115_Contents),L0115_Contents ;241 intro bs 2 +DW BANK(L0215_Contents),L0215_Contents ;242 intro bs 3 +DW BANK(L0315_Contents),L0315_Contents ;243 intro bs 4 +DW BANK(L0415_Contents),L0415_Contents ;244 +DW BANK(L0515_Contents),L0515_Contents ;245 +DW BANK(L0615_Contents),L0615_Contents ;246 +DW BANK(L0715_Contents),L0715_Contents ;247 +DW BANK(L0815_Contents),L0815_Contents ;248 +DW BANK(L0915_Contents),L0915_Contents ;249 +DW BANK(L1015_Contents),L1015_Contents ;250 +DW BANK(L1115_Contents),L1115_Contents ;251 +DW BANK(L1215_Contents),L1215_Contents ;252 +DW BANK(L1315_Contents),L1315_Contents ;253 +DW BANK(L1415_Contents),L1415_Contents ;254 +DW BANK(L1515_Contents),L1515_Contents ;255 + +;SECTION "BGTileSection",ROMX,BANK[BGTILEROM] +SECTION "BGTileSection",ROMX[$4000],BANK[BGTILEROM1] +BGTiles:: +DB 0,0,0,0, 0,0,0,0, 0,0,0,0,0,0,0,0 ;blank tile zero +INCBIN "Data/Tiles/bgTiles1-256.bin" +INCBIN "Data/Tiles/bgTiles257-512.bin" +INCBIN "Data/Tiles/bgTiles513-768.bin" +INCBIN "Data/Tiles/bgTiles769-979.bin" + +SECTION "BGTileSection2",ROMX[$4000],BANK[BGTILEROM2] +BGTiles1024:: +DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +INCBIN "Data/Tiles/bgTiles1024-1279.bin" +INCBIN "Data/Tiles/bgTiles1280-1535.bin" +INCBIN "Data/Tiles/bgTiles1536-1791.bin" +INCBIN "Data/Tiles/bgTiles1792-2047.bin" + +;DS 16*((1024-256)-1) ;pad tiles + +SECTION "BGColorTable",ROMX[$4000] +bg_colorTable:: ;defines a byte for the tile attribute (color) for each class +;0=Grey, 1=Red, 2=Blue, 3=Green, 4=Purple, 5=Yellow, 6=Brown/Orange, 7=Fuscia +;+8=can walk over +;+16=can shoot over +;+32=attackable + + ;bg tiles +; 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 + DB 0 ; 0 + DB 0, 0, 0, 4, 2, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 1- 20 + DB 0, 3, 3, 3, 3, 3,34,34,34,34,34,34,34,34,34,34,34,34,34,34 ; 21- 40 + DB 34,34,34,34,34,34,34,34,34,34, 1, 1, 1, 1, 2, 2, 2, 2, 6, 6 ; 41- 60 + DB 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ; 61- 80 + DB 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 81-100 + DB 0, 0, 0, 0, 0,38,38,38,38, 2,36,36,36,36,36,36,36,36,36,36 ;101-120 + DB 36,36,39, 6, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 5 ;121-140 + DB 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ;141-160 + DB 2, 2, 2, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;161-180 + DB 0, 0, 0, 6, 4, 1, 5, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ;181-200 + DB 4, 4, 4, 4, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ;201-220 + DB 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ;221-240 + DB 3, 3, 3, 3, 3, 3, 0,16, 0, 6, 6, 3, 3, 3, 3, 0,37,37,37,37 ;241-260 + DB 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37 ;261-280 + DB 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37 ;281-300 + DB 37,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;301-320 + DB 0, 0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18 ;321-340 + DB 18,18, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;341-360 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3 ;361-380 + DB 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0 ;381-400 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6 ;401-420 + DB 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 5, 5, 5, 5 ;421-440 + DB 5, 5, 5, 6,18,18,18,18,18,18,18,18,18,18,18,18, 0, 0, 0,18 ;441-460 ;water + DB 18,18,18,22,22,22,22,22,22,22,22,22,22,22,22,22,22, 7, 4, 4 ;461-480 ;bank + DB 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 3, 3 ;481-500 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3 ;501-520 + DB 3, 3, 3, 3, 3, 3, 3, 3, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2 ;521-540 + DB 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2 ;541-560 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;561-580 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;581-600 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 ;601 + DB 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ;621 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;641 + DB 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ;661 + DB 4, 4, 4, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 3 ;681 + DB 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3 ;701 + DB 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1 ;721 + DB 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ;741 + DB 1, 1, 1, 1, 1, 1, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;761 + DB 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;781 + DB 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;801 + DB 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;821 + DB 6, 6, 6, 6, 6,38, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,38, 6, 0 ;841 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6 ;861 + DB 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,32, 0, 3, 3, 3, 3,35, 3, 5, 5 ;881 + DB 5, 5,37, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6 ;901 + DB 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3 ;921 + DB 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;941 + DB 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,37, 5, 1, 1, 1, 1 ;961 + DB 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;981 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1001 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1021 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1041 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,34,34,34,34, 2, 2, 2, 2 ;1061 + DB 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ;1081 + DB 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,24,24,24,24 ;1101 + DB 24,24,24,24,24,24,24,24,24,24,24,24, 0, 0, 0, 2, 2, 0, 0, 0 ;1121 +; 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 +;0=Grey, 1=Red, 2=Blue, 3=Green, 4=Purple, 5=Yellow, 6=Brown/Orange, 7=Fuscia + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,32 ;1141 + DB 32, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1161 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1181 + DB 3, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;1201 + DB 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3 ;1221 + DB 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4 ;1241 + DB 4,32,32,32,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 6, 0 ;1261 + DB 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 0,32,32, 0, 0, 0, 0, 0, 0, 0 ;1281 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1301 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2 ;1321 + DB 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 5, 2, 2, 3 ;1341 + DB 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 6, 5, 5, 3, 3, 3, 2, 2, 2, 2 ;1361 + DB 2, 2, 2, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1381 + DB 0,35,35,35,35,35, 8, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1401 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1421 + DB 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 5, 6, 6 ;1441 + DB 1, 3, 2,33,33,33,33,34,34,34,34,38,38,38,38,32,32,32,32,32 ;1461 + DB 32,32,32,32,32,32,32,32,32,33,33,33,33,35,35,35,35,35,35,35 ;1481 + DB 35,35,35,35,35,35,35,35,35,35,35,29,37,37,37,37,37,37,37,37 ;1501 + DB 37,37,37,37,37,37,37,37,37,37,37,37,16,25,25,25,29,30,32,32 ;1521 + DB 32,32,32,32,32,32, 4, 4, 4, 4,53,53,53,53,53,53,53,53,53,53 ;1541 + DB 53,53,53,53,53,53,53,53, 0, 0, 0,30,29, 2, 2, 2, 2, 2, 2, 2 ;1561 + DB 2, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;1581 + DB 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0 ;1601 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1621 + DB 0, 0,32,32,32,32,32,32,32,32,32,30, 6, 6, 6, 6, 6, 6, 6, 6 ;1641 + DB 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0 ;1661 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ;1681 + DB 2, 2, 2, 0, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ;1701 + DB 6, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6 ;1721 + DB 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0 ;1741 + DB 0, 3, 3, 3, 0,32,32,32,32,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1761 + DB 0,32,32, 0, 0,32,32, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ;1781 + DB 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ;1801 + DB 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ;1821 + DB 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,33, 1,34, 2,33,33 ;1841 + DB 1, 1,34,34, 2, 2,33,33, 1, 1,34,34, 2, 2, 6, 0, 0, 0, 0,24 ;1861 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1881 + DB 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1901 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1921 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1941 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1961 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;1981 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;2001 + DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5 ;2021 + DB 0, 0,25, 0, 0, 5, 1 ;2041 +; 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 +;0=Grey, 1=Red, 2=Blue, 3=Green, 4=Purple, 5=Yellow, 6=Brown/Orange, 7=Fuscia +;+8=can walk over +;+16=can shoot over +;+32=attackable + +SECTION "FGTileSection",ROMX[$4800] +FGTiles: +INCBIN "Data/Tiles/fgTiles2048-2302.bin" ;monsta tiles +INCBIN "Data/Tiles/fgTiles2304-2559.bin" ;monsta tiles + + +fg_colorTable:: ;defines a byte for the tile attribute (color) for each class +;0=Grey, 1=Red, 2=Blue, 3=Green, 4=Purple, 5=Yellow, 6=Brown/Orange, 7=Fuscia +; + any combination of: +;16 = is bullet +;32 = 2x2 monster +;64 = no rotate when facing N/S +;128 = can't be thrown (probably stationary) + +;obj tiles +; +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +; 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 +DB 4, 4, 2, 2, 5, 5, 1, 1, 2, 2, 3, 3, 3, 3,64, 2, 2, 6, 6,64 ;2048 +0 +DB 0,133,5, 0, 0, 0, 0, 0, 0, 1, 0, 6, 6, 4, 0, 4, 0, 5, 5, 5 ;2068 +20 +DB 5,195,195,0,0,65,65, 6, 6,70,70,67, 0, 0,35,35,35,35,35,35 ;2088 +40 +DB 0, 0, 0, 0, 2, 2, 5, 5, 6, 6, 0, 0,38,38,38,38,38,38,38,38 ;2108 +60 +DB 6, 6,16,16,16,16,16,16, 3, 3, 0, 0,165,165,165,165,2,2,1,1 ;2128 +80 +DB 4, 0, 0, 0, 2, 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5 ;2148 +100 +DB 166,0, 0, 0, 0, 0,70,70,70,70,64,64,65,65,66,66,35,35,35,35 ;2168 +120 +DB 35,35, 0, 0, 6, 6, 6, 6,66,66,70,70, 6, 6,16,16, 6, 6,16,16 ;2188 +140 +DB 0, 0,16,16,16,16,16,16,16,16,16,16, 6, 6,38,38,38,38,38,38 ;2208 +160 +DB 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37 ;2228 +180 +DB 37,37,37,37,37,37, 3, 3, 5, 5,33,33,33,33,33,33,33,33, 1, 1 ;2248 +200 +DB 34,34,34,34,34,34,34,34, 5, 5, 4, 4, 0, 0, 5, 5, 5, 5, 0, 0 ;2268 +220 +DB 3, 3, 1, 1, 4, 4,16,16,34,34,34,34,19,19, 0, 0,64,64,65,65 ;2288 +240 +DB 3, 3, 5, 5, 0, 0, 0, 6, 6,21,21,38,38,38,38,38,38,38,38, 3 ;2308 +260 +DB 3, 7, 7, 5, 6, 6, 6,37, 5, 5, 5,37, 5, 5, 5,163,3, 3, 3, 6 ;2328 +280 +DB 6, 6, 6,35, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,32, 0, 0, 0, 0, 0 ;2348 +300 +DB 0, 0,32, 0, 0, 0,38, 0, 0, 0, 0, 0, 0, 0,16, 0, 1, 0, 2, 0 ;2368 +320 +DB 3, 0,35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,70, 0, 0, 0, 0, 0 ;2388 +340 +DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;2408 +360 +DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;2428 +380 +DB 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 5, 0, 1, 0, 0, 0, 0, 0 ;2448 +400 +DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;2468 +420 + +; +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +; 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 + +;--------------------------------------------------------------------- +SECTION "MapBGPix",ROMX +;--------------------------------------------------------------------- +waitingToJoin_bg: + INCBIN "../fgbpix/menu/waitingToJoin.bg" + diff --git a/Source/music.asm b/Source/music.asm new file mode 100644 index 0000000..bbd55ff --- /dev/null +++ b/Source/music.asm @@ -0,0 +1,709 @@ +;--------------------------------------------------------------------- +; music.asm +; 8.20.00 by Abe Pralle +;--------------------------------------------------------------------- + +INCLUDE "Source/defs.inc" + +;Routines +;-------------- +; InitMusic +; PlayMusic + +SECTION "MusicHome",ROM0 +;--------------------------------------------------------------------- +; Routine: IsCurMusic +; Arguments: a - bank of gbm data +; hl - address of compiled gbm music +; Alters: af +; Returns: a - 1 if same music is playing, 0 if not +; zflag - or a +; Description: Initializes a new piece of music *unless* it is +; already playing in which case it leaves it alone. +;--------------------------------------------------------------------- +IsCurMusic:: + push bc + ld b,a + ld a,[musicBank] + cp b + jr nz,.different + ld a,[musicAddress] + cp l + jr nz,.different + ld a,[musicAddress+1] + cp h + jr nz,.different + +.same + pop bc + ld a,1 + or a + ret + +.different + pop bc + xor a + ret + +;--------------------------------------------------------------------- +; Routine: InitMusic +; Arguments: a - bank of gbm data +; hl - address of compiled gbm music +; Alters: af +; Description: Initializes a new piece of music *unless* it is +; already playing in which case it leaves it alone. +;--------------------------------------------------------------------- +InitMusic:: + push bc + push de + push hl + + push af + ld b,a + ld a,[musicBank] + cp b + jr nz,.newMusic + ld a,[musicAddress] + cp l + jr nz,.newMusic + ld a,[musicAddress+1] + cp h + jr nz,.newMusic + pop af + jp .done ;currently playing this one + +.newMusic + pop af + di + ld [musicBank],a + xor a + ld [musicEnabled],a + ei + + ld a,l + ld [musicAddress],a + ld a,h + ld [musicAddress+1],a + + PUSHROM + ld a,[musicBank] + call SetActiveROM + + ;parse header + inc hl ;skip version + ld a,[hl+] ;notes per second + ld [musicNoteCountdownInit],a + ld [musicNoteCountdown],a + ld de,6 + add hl,de + + ld bc,musicTrack1Pos + call .getTrackOffset + ld bc,musicTrack2Pos + call .getTrackOffset + ld bc,musicTrack3Pos + call .getTrackOffset + ld bc,musicTrack4Pos + call .getTrackOffset + + ld a,BANK(instrumentDefaults) + call SetActiveROM + + ld c,33 + ld de,musicInstrument1 + ld hl,instrumentDefaults +.copyDefaultInstruments + ld a,[hl+] + ld [de],a + inc de + dec c + jr nz,.copyDefaultInstruments + + ;actually set default instruments + ld hl,musicInstrument1 + ld de,$ff10 + ld bc,4 + xor a + call MemCopy + ld hl,musicInstrument2 + ld de,$ff16 + ld bc,3 + call MemCopy + ld hl,musicInstrument3 + ld de,$ff31 + call MemCopy + ld hl,musicInstrument4 + ld de,$ff20 + call MemCopy + + ;disable sound + xor a + ldio [$ff26],a + + ldio [$ff12],a ;zero envelope all instruments + ldio [$ff17],a + ldio [$ff1c],a + ldio [$ff21],a + ;ldio [$ff14],a ;turn off instruments + ;ldio [$ff19],a + ;ldio [$ff1e],a + ;ldio [$ff23],a + + ;enable sound + ld a,$80 + ldio [$ff26],a ;master + ld a,$ff + ldio [$ff24],a ;volume + ldio [$ff25],a ;sound output terminals + + ;ld a,[musicInstrument1] + ;ldio [$ff10],a + ;ld a,[musicInstrument1+1] + ;ldio [$ff11],a + ;ld a,[musicInstrument2] + ;ldio [$ff16],a + ;ld a,[musicInstrument2] + ;ldio [$ff16],a + + ;setup waveform data + ld de,$ff30 + ld hl,musicWaveform + ld bc,16 + call MemCopy + xor a + + POPROM + + ;initialize music stacks + ld a,32 + ld hl,musicStackL1 + ld [hl+],a + ld a,64 + ld [hl+],a + ld a,96 + ld [hl+],a + ld a,128 + ld [hl+],a + +.done + ld a,%11111 + ldio [musicEnabled],a + + pop hl + pop de + pop bc + ret + +.getTrackOffset + ld a,[hl+] + ld e,a + ld a,[hl+] + ld d,a + push hl + add hl,de + ld a,l + ld [bc],a + inc bc + ld a,h + ld [bc],a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: StopMusic +; Arguments: None. +; Alters: af +; Description: Halts the music +;--------------------------------------------------------------------- +StopMusic:: + xor a + ldio [musicEnabled],a + ret + +;--------------------------------------------------------------------- +; Routine: PlayMusic +; Arguments: None. +; Alters: af +; Description: Plays the next note for each voice. Should only be +; called after [musicNoteCountdown] has reached zero +; (being decremented 60 times per second). +;--------------------------------------------------------------------- +PlayMusic:: + push bc + push de + push hl + + ;save the current RAM bank in use + ldio a,[$ff70] + push af + + ld a,MUSICBANK + ldio [$ff70],a + + PUSHROM + ld hl,musicBank + ld a,[hl+] + call SetActiveROM + ld a,[hl+] ;countdown init + ld [hl+],a ;reset cur countdown + + ;decrement sound effect override counters + push hl + xor a + ld hl,musicOverride1 + cp [hl] + jr z,.skipOverride1 + dec [hl] +.skipOverride1 + inc hl + cp [hl] + jr z,.skipOverride4 + dec [hl] +.skipOverride4 + pop hl + + ld a,[musicStackL1] + ld [curTrackStackL],a + call .playTrack + ld a,[curTrackStackL] + ld [musicStackL1],a + +.playTrack2 + ld a,[musicStackL2] + ld [curTrackStackL],a + call .playTrack + ld a,[curTrackStackL] + ld [musicStackL2],a + +.playTrack3 + ld a,[musicStackL3] + ld [curTrackStackL],a + call .playTrack + ld a,[curTrackStackL] + ld [musicStackL3],a + +.playTrack4 + ld a,[musicStackL4] + ld [curTrackStackL],a + call .playTrack + ld a,[curTrackStackL] + ld [musicStackL4],a + +.afterPlayTrack4 + POPROM + + ;restore RAM bank + pop af + ldio [$ff70],a + + pop hl + pop de + pop bc + ret + +.playTrack + ;hl - address of pc for current track + push hl + ld a,[hl+] ;set the pc + ld e,a + ld a,[hl+] + ld d,a +;ld a,d +;cp $ff +;jr nz,.okay +;ld b,b +;.okay + call ExecuteByteCode + pop hl + + ;save new pc for this track + ld a,e + ld [hl+],a + ld a,d + ld [hl+],a + ret + +ExecuteByteCode: + ld a,[de] ;get a bytecode + inc de + or a ;nop? + ret z + + ld b,a + and $f0 + jr nz,.check1xTo8x + + ld a,b + bit 3,a + jr nz,.check08To0f + + cp 2 + jp z,.return + cp 4 + jp z,.note1 + cp 5 + jp z,.note2 + cp 6 + jp z,.note3 + cp 7 + jp z,.note4 +.error02To07 jr .error02To07 + +.check08To0f + cp 8 + jp z,.hold1 + cp 9 + jp z,.hold2 + cp $0a + jp z,.hold3 + cp $0b + jp z,.hold4 + cp $0c + jp z,.instr1 + cp $0d + jp z,.instr2 + cp $0e + jp z,.instr3 + cp $0f + jp z,.instr4 +.error08To0f jr .error08To0f + +.check1xTo8x + cp $10 + jp z,.setDec + cp $20 + jp z,.setReg + cp $30 + jp z,.decReg + cp $40 + jp z,.cmpDec + cp $50 + jp z,.cmpReg + cp $60 + jp z,.jump + cp $70 + jp z,.call + cp $80 + jp z,.repeat +.error1xTo8x jr .error1xTo8x + +.return + ;pop return address off the current stack & execute another + ;command + ld h,((musicStack>>8)&$ff) + ld a,[curTrackStackL] + ld l,a + ld a,[hl+] + ld e,a + ld a,[hl+] + ld d,a + ld a,l + ld [curTrackStackL],a + jp ExecuteByteCode + +.hold1 + ld a,[de] + inc de + ld [musicInstrument1+2],a + jr .note1 + +.hold2 ld a,[de] + inc de + ld [musicInstrument2+1],a + jr .note2 + +.hold3 ld a,[de] + inc de + ld [musicInstrument3],a + jr .note3 + +.hold4 ld a,[de] + inc de + ld [musicInstrument4+1],a + jr .note4 + +.note1 + ld hl,musicInstrument1+3 + call .noteCommon +.repeat1 + ldio a,[musicEnabled] + and %00001 + ret z + ld hl,musicInstrument1 + jp PlaySoundChannel1 + +.note2 + ld hl,musicInstrument2+2 + call .noteCommon +.repeat2 + ldio a,[musicEnabled] + and %00010 + ret z + ld hl,musicInstrument2 + jp PlaySoundChannel2 + +.note3 + ld hl,musicInstrument3+2 + call .noteCommon +.repeat3 + ldio a,[musicEnabled] + and %00100 + ret z + ld hl,musicInstrument3 + jp PlaySoundChannel3 + +.note4 + ld hl,musicInstrument4 + call .noteCommon + call .noteCommon +.repeat4 + ldio a,[musicEnabled] + and %01000 + ret z + ld hl,musicInstrument4 + jp PlaySoundChannel4 + +.noteCommon + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ret + +.instr1 + ld hl,musicInstrument1 + ld c,3 + jp .instrCommon + +.instr2 + ld hl,musicInstrument2 + ld c,2 + jp .instrCommon + +.instr3 + ld hl,musicInstrument3 + ld a,[de] + inc de + ld [hl+],a + ld a,[de] + inc de + ld [hl+],a + ld hl,musicWaveform + ld c,16 + jp .instrCommon + +.instr4 + ld hl,musicInstrument4 + ld c,4 + jp .instrCommon + +.instrCommon + ld a,[de] + inc de + ld [hl+],a + dec c + jr nz,.instrCommon + jp ExecuteByteCode + +.setDec +ld b,b + ld a,b + call .setHLToReg + ld a,[de] + inc de + ld [hl],a + jp ExecuteByteCode + +.setReg +ld b,b + ld a,[de] + inc de + call .setHLToReg + ld c,[hl] + ld a,b + call .setHLToReg + ld [hl],a + jp ExecuteByteCode + +.decReg + ;ld a,b + ;call .setHLToReg + ;dec [hl] + ;TODO + jp ExecuteByteCode + +.cmpDec + ld b,a ;which register? + and $f + add (musicRegisters & $ff) + ld l,a + ld h,((musicRegisters>>8) & $ff) + ld a,[de] + cp [hl] + call nz,.nonZeroResult + call z,.zeroResult + +.cmpReg + ;TODO + inc de + jp ExecuteByteCode + +.nonZeroResult + ld a,0 + ld [musicRegisters+15],a + ret + +.zeroResult + ld a,1 + ld [musicRegisters+15],a + ret + +.setHLToReg + and $0f + add (musicRegisters & $ff) + ld h,((musicRegisters>>8) & $ff) + ld l,a + ret + +.jump + ld a,[de] ;hl = offset to new address + inc de + ld l,a + ld a,[de] + inc de + ld h,a + + ld a,b + and $7 + cp 6 + jr z,.jumpAlways + + ;assume cc=eq + ld a,[musicRegisters+15] + or a + jr z,.afterJump ;not eq + +.jumpAlways + add hl,de + ld d,h + ld e,l +.afterJump + jp ExecuteByteCode + +.call ;save return address on current music stack + ld h,((musicStack>>8)&$ff) + ld a,[curTrackStackL] + sub 2 + ld [curTrackStackL],a + ld l,a + ld a,e + add 2 + ld [hl+],a + ld a,d + adc 0 + ld [hl-],a + ld b,6 ;cc=jump always + jr .jump + +.repeat + ld a,b + and $0f + jp z,.repeat1 + cp 1 + jp z,.repeat2 + cp 2 + jp z,.repeat3 + cp 3 + jp z,.repeat4 +.error8x jr .error8x + + +;--------------------------------------------------------------------- +SECTION "MusicData1",ROMX +;--------------------------------------------------------------------- +instrumentDefaults: +.instrument1 +DB $07,$80,$f1,$43,$85 +.instrument2 +DB $80,$c2,$02,$86 +.instrument3 +DB $cf,$20,$00,$c5 +.instrument4 +DB $00,$f0,$00,$c0 +.waveform +DB $dd,$dd,$dd,$dd,$dd,$dd,$dd,$dd +DB $00,$00,$00,$00,$00,$00,$00,$00 + +alarm_gbm:: + INCBIN "Data/Music/alarm.gbm.bin" + +intro_cinema_gbm:: + INCBIN "Data/Music/intro_cinema.gbm.bin" + +bs_gbm:: + INCBIN "Data/Music/jazzy.gbm.bin" + +lady_flower_gbm:: + INCBIN "Data/Music/lady_flower.gbm.bin" + +main_in_game_gbm:: + INCBIN "Data/Music/main_in_game.gbm.bin" + +haiku_gbm:: + INCBIN "Data/Music/maybe_haiku.gbm.bin" + +;--------------------------------------------------------------------- +SECTION "MusicData2",ROMX +;--------------------------------------------------------------------- + +moon_base_ba_gbm:: + INCBIN "Data/Music/moon_base_ba.gbm.bin" + +moon_base_haiku_gbm:: + INCBIN "Data/Music/moon_base_haiku.gbm.bin" + +;shroom_gbm:: + ;INCBIN "Data/Music/shroom.gbm.bin" + +cowboy_gbm:: + INCBIN "Data/Music/cowboy.gbm.bin" + +frosty_gbm:: + INCBIN "Data/Music/frosty.gbm.bin" + +fgbwar_gbm:: + INCBIN "Data/Music/fgbwar.gbm.bin" + +wedding_gbm:: + INCBIN "Data/Music/wedding.gbm.bin" + +takeoff_gbm:: + INCBIN "Data/Music/takeoff.gbm.bin" + +;--------------------------------------------------------------------- +SECTION "MusicData3",ROMX +;--------------------------------------------------------------------- + +spaceish_gbm:: + INCBIN "Data/Music/spaceish.gbm.bin" + +beehive_gbm:: + INCBIN "Data/Music/beehive.gbm.bin" + +hoedown_gbm:: + INCBIN "Data/Music/hoedown.gbm.bin" + +death_gbm:: + INCBIN "Data/Music/death.gbm.bin" + +;--------------------------------------------------------------------- +SECTION "MusicData4",ROMX +;--------------------------------------------------------------------- +jungle_gbm:: + INCBIN "Data/Music/jungle.gbm.bin" + +mysterious_gbm:: + INCBIN "Data/Music/mysterious.gbm.bin" + diff --git a/Source/object.asm b/Source/object.asm new file mode 100644 index 0000000..53751c1 --- /dev/null +++ b/Source/object.asm @@ -0,0 +1,2263 @@ +; object.asm +; 1.2.2000 by Abe Pralle +; defines and handles the objects (data of classes) of FGB + +;see map.asm for location definitions of object RAM + +;object data: +;each object is 16 bytes long +; Byte Name Description +; ---- ------ ------------------------------------------------------------- +; 0 i_pos i index of left of object within map +; 1 j_pos j index of top of object within map +; 2 frame bits[2:0] - facing/frame of object. See (1) below. +; bits[4:3] - copy of timer's 2 LSB on upon last move +; bits[6:5] - index 0-3 on current path +; bit[7] - 1 if obj is currently a sprite, 0 if not +; 3 move Next move info +; bits[7:0] - counter 'till next move +; 4 limit Moves until AI switch + moves until fire again +; bits[3:0] - moveLimit. Decremented every move and +; sometimes used to switch states ("well this +; direction's not working"). +; - Used as direction of fire by hero +; - Used as bullet color by bullet. +; bits[7-4] - special flags +; 7 = travel straight, speed=1 (OBJBIT_THROWN) +; 5 health Amount of health left +; bits[5:0] - Amount of health / hit points left +; bits[7:6] - desired direction. When the AI is sliding +; to the side looking for forward progress +; these bits tell the original direction. +; bits[7:6] - Fire timer. When not equal to classes +; 6 destzone bits [7:4] Destination zone (0-15) (no zone zero) +; [3:0] Number of dandelion puffs on me +; 7 misc bits[7:0] - Used for class-specific AI +; 8 state Current state of movement/ai +; bits[5:0] - state. Commonly: +; 0 - Reset. Figure out from scratch what +; to do. +; 1 - Move straightforwardly towards waypoint. +; 2 - Move up to "moveLimit" (see byte 4 +; following) parallel to right of major +; axis, each time switching to state 3 to +; check for forward movement +; 3 - If can move forward along major axis do +; do and go back to state 1. If not go back +; to state 2. +; 4 - Same as (2) but moving left of major axis. +; 5 - Same as 3. +; 6 - Wander randomly. +; For heroes is spark timer +; bits[7:6] - attack dir state (direction to scan for +; attacking) +; 9 group bits[3:0] - group. Values: +; 0 - Free for all (shoot anything) +; 1 - Hero group +; 2-15 Monster A - Monster N +; 10 DESTL - actor dest low byte +; - eater low index +; - bullet damage +; - explosion initial frame +; 11 DESTH - actor dest high byte +; - eater high byte +; 12 SPRITELO - low ptr to sprite when obj is sprite +; 13 FIRETIMER - ticks before can fire again +; 14 unused +; 15 NEXT - index of next object or 0 for null + +; (1) Frames have the following definitions: +; 0 (%000) - Facing north, frame0 +; 1 (%001) - East, frame0 +; 2 (%010) - South, frame0 +; 3 (%011) - West, frame0 +; 4 (%100) - Facing north, frame1 (top of two tiles) +; 5 (%101) - East, frame1 (left of two tiles) +; 6 (%110) - South, frame1 (top of two tiles) +; 7 (%111) - West, frame1 (left of two tiles) + +; The object list works as follows: +; - All objects of the same class are stored as consecutive nodes in the +; linked list. +; - The following variables are used to keep track of the linked list: +; firstFree[1]: Index of first free object in objectExists[]. +; node is linked to the next free node and so on (stored +; in bank0 instead of bank3 like the others) +; headTable[256]: Indices of head of list of a certain class. Every two +; bytes marks the start of a LowByte, HighByte address +; tailTable[256]: Indices of tail of list of a certain class. + +INCLUDE "Source/defs.inc" +INCLUDE "Source/start.inc" + + +SECTION "ObjList",ROMX,BANK[CLASSROM] + +;--------------------------------------------------------------------- +; Routine: AddObjectsToObjList +; Arguments: none +; Description: Parses through the map (just loaded) and creates an +; object for each creature and adds it to the objList. +;--------------------------------------------------------------------- +AddObjectsToObjList:: + push bc + push de + push hl + + + ;initialize outer loop (b=0...mapHeight-1) + ld hl,map ;set hl to point to first tile in map + ld b,0 + + ;initialize inner loop (c=0...mapWidth-1) +.outer ld c,0 + ldio a,[firstMonster] + ld d,a + +.inner ld a,MAPBANK ;switch to map RAM bank + ld [$ff00+$70],a + ld a,[hl] ;get a class index from map + cp d ;is it < first monster index? + jr c,.notAnObject + + ;create an object for d monsta + push bc + push de + ;hl is ptr to location in map + ld c,a ;class index + call CreateObject ;returns de as ptr to object + pop de + pop bc + +.notAnObject + ;termination test for inner loop (is c==mapWidth?) + inc hl + inc c + ld a,[mapWidth] + cp c + jr nz,.inner + + ;skip excess width to make power of 2 pitch + ld a,[mapSkip] + ld d,0 + ld e,a + add hl,de + + ;termination test for outer loop (is b==mapHeight?) + inc b + ld a,[mapHeight] + cp b + jr nz,.outer + + ;call the INIT method of each object + ld b,METHOD_INIT + call IterateAllLists + + ;call the DRAW method of each object + ld b,METHOD_DRAW + call IterateAllLists + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routines: PointerDEToIndex +; PointerHLToIndex +; Arguments: de/hl - pointer $d010-$dff0 to object +; Returns: a - index 1-255 of object +;--------------------------------------------------------------------- +PointerDEToIndex:: + push de + ld a,d + and %00001111 + ld d,a + ld a,e + and %11110000 + or d + swap a + pop de + ret + +PointerHLToIndex:: + push hl + ld a,h + and %00001111 + ld h,a + ld a,l + and %11110000 + or h + swap a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: ResetList +; Arguments: none +; Description: Sets all elements of headTable[] and tailTable[] to +; point to null. Sets up all 256 objExists flags to +; zero and [firstFreeObj] to 1. A few other misc things +;--------------------------------------------------------------------- +ResetList:: + push af + push bc + push de + push hl + + ;Switch to the objectList RAM bank + ld a,OBJLISTBANK + ld [$ff00+$70],a + + ;Set object zero (which should never be accessed) to + ;all-null to help ID infinite loops. + ld hl,objects + ld b,16 + xor a +.setObjNullLoop + ld [hl+],a + dec b + jr nz,.setObjNullLoop + + ;Clear all elements of headTable[] and tailTable[] to + ;point to null. tailTable[] follows headTable[] in memory so + ;in total that's 512 bytes we need to set (or 256*2) + ld hl,headTable + xor a + ld c,0 ;e.g. counter of 256 + +.loop1 ld [hl+],a + ld [hl+],a + dec c + jr nz,.loop1 + + ;Switch to the object RAM bank + ld a,OBJBANK + ld [$ff00+$70],a + + ;Set firstFreeObj to point to the first object, 1 ($d010) + ld a,1 + ld [firstFreeObj],a + + ;255 objExists flags to zero + ld a,OBJLISTBANK + ld bc,255 + ld d,0 + ld hl,objExists+1 + call MemSet + + ;set objExists[0] to 1 to prevent it from being allocated + ld a,1 + ld [objExists],a + + ld a,((objExists+1) & $ff) + ld [iterateNext],a + ld a,(((objExists+1)>>8) & $ff) + ld [iterateNext+1],a + + ld a,255 + ld [numFreeObjects],a + + pop hl + pop de + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: ClearFGBGFlags +; Arguments: None. +; Returns: Nothing. +; Alters: af +; Description: Clears bgAttributes and fgAttributes +;--------------------------------------------------------------------- +ClearFGBGFlags:: + push bc + push de + push hl + + ld a,OBJLISTBANK + ld bc,256 + ld d,0 + ld hl,bgAttributes + call MemSet + + ld a,OBJLISTBANK + ld bc,256 + ld d,0 + ld hl,fgAttributes + call MemSet + +IF 0 + ;set all bgAttribute flags to zero + ld c,0 + ld hl,bgAttributes + xor a +.bgAttrLoop + ld [hl+],a + dec c + jr nz,.bgAttrLoop + + ;set all fgAttribute flags to zero + ld c,0 + ld hl,fgAttributes + xor a +.attrLoop + ld [hl+],a + dec c + jr nz,.attrLoop +ENDC + + ld a,OBJLISTBANK + ld bc,256 + ld d,0 + ld hl,associatedIndex + call MemSet + + ld a,OBJLISTBANK + ld bc,512 + ld d,0 + ld hl,classLookup + call MemSet + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CreateObject +; Arguments: c - class index of object to create +; hl - ptr to location in map +; Returns: de - address of object +; Alters: af,de +; Description: Creates and adds the specified object into the list +; providing there's room. Equivalent to the following +; C code: +; +; if(!firstFreeObj) return 0; +; newObj = firstFreeObj; +; firstFreeObj = (next free obj index); +; if(!headTable[c]){ +; headTable[c] = tailTable[c] = newObj; +; }else{ +; tailTable[c]->nextItem = newObj; +; tailTable[c] = newObj; +; } +; return newObj; +;--------------------------------------------------------------------- +CreateObject:: + push af + push bc + push hl + + ld a,OBJBANK ;switch in Object RAM + ld [$ff00+$70],a + + ;see if there's room for a new object + ;if(!firstFreeObj) return 0; + ld a,[firstFreeObj] + or a ;check it out + jr nz,.freeNodeExists + + ld de,0 ;return null + jp .doneHL + +.freeNodeExists + push bc ;save class index for a bit + ;newObj = firstFreeObj + ;setup de to point to free node + ld [curObjIndex],a + call IndexToPointerDE ;de is now ptr to free node + + ;store location ptr (hl) + ld a,l + ld [de],a ;OBJ_IPOS + inc de + ld a,h + ld [de],a ;OBJ_JPOS + dec de + + ld hl,numFreeObjects + dec [hl] + + ;firstFreeObj = (next free object index) + ld a,OBJLISTBANK + ld [$ff70],a + ld a,[firstFreeObj] + ld h,((objExists>>8) & $ff) + inc a + jr z,.foundNextFree ;no free objects + ld l,a +.lookAtNextObj + ld a,[hl+] + or a + jr nz,.thisObjNotFree + + dec hl + ld a,l + jr .foundNextFree + +.thisObjNotFree + ld a,l + or a + jr nz,.lookAtNextObj + ;no free objects (1st is zero) + +.foundNextFree + ld [firstFreeObj],a + + ;if(!headTable[c]){ + ld h,((headTable>>8) & $ff) + ld l,c + ld a,[hl] ;get object index + or a + jr nz,.headExists + +.noHead ;headTable[c] = curObjIndex + ld a,[curObjIndex] + ld [hl],a + + ;tailTable[c] = curObjIndex + ld h,((tailTable>>8) & $ff) ;hl is tailTable[c] + ld [hl],a + + ;switch in object RAM + ld a,OBJBANK + ld [$ff00+$70],a + + jr .setNextToNull + +.headExists + ;oldTail = tailTable[c] + ld h,((tailTable>>8) & $ff) + ld a,[hl] ;old tail index + push de + call IndexToPointerDE + ld b,d + ld c,e ;bc = oldTail + pop de + + ;tailTable[c] = curObjIndex + ld a,[curObjIndex] + ld [hl],a + + ;switch in object RAM + ld a,OBJBANK + ld [$ff00+$70],a + + ;oldTail->nextItem = newObj + ld hl,OBJ_NEXT ;offset to get to nextItem + add hl,bc ;hl = &oldTail->nextItem + ld a,[curObjIndex] + ld [hl],a ;oldTail->nextItem = newObj + +.setNextToNull + ;newObj->nextItem = null + ld hl,OBJ_NEXT ;offset to get to nextItem low byte + add hl,de ;hl = &newObj->nextItem + xor a + ld [hl],a ;newObj->nextItem = null + + ;objExists[objectIndex] = 1; + ld a,OBJLISTBANK + ld [$ff00+$70],a + call GetObjectIndex ;sets up hl + ld a,1 + ld [hl],a + + ;objClassLookup[objIndex] = classIndex + ld h,((objClassLookup>>8) & $ff) + pop bc ;get class lookup in c + ld [hl],c + +.doneHL pop hl + ;de is return value + pop bc + pop af + ret + +;--------------------------------------------------------------------- +; Routine: CreateInitAndDrawObject +; Arguments: c - class index to create +; hl - ptr to location in map +; Returns: de - address of object +; Alters: af,de +; Description: Creates and adds the specified object into the list +; providing there's room. +;--------------------------------------------------------------------- +CreateInitAndDrawObject:: + push bc + push hl + + call CreateObject + ld a,d + or a + jr z,.done + + ld b,METHOD_INIT + call CallMethod + ld b,METHOD_DRAW + call CallMethod + +.done + pop hl + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: DeleteObject +; Arguments: c - class index of object to delete +; de - address of object +; Alters: af +; Description: Deletes the specified object from the class index's +; object list and returns it to the free node list. +; Equivalent to the following C code: +; +; //find the object +; prev = 0; +; for(cur=headTable[c]; cur; cur=cur->nextItem){ +; if(cur==obj) break; +; prev = cur; +; } +; if(!cur) goto addToFreeList; //object not found +; +; //handle special cases of head and tail +; if(cur==headTable[c]){ +; headTable[c] = cur->nextItem; +; }else{ +; prev->nextItem = cur->nextItem; +; } +; if(cur==tailTable[c]){ +; tailTable[c] = prev; +; } +; +; addToFreeList: +; firstFreeObj = min(firstFreeObj, curIndex); +; objExists[objIndex] = 0; +;--------------------------------------------------------------------- +DeleteObject:: + push bc + push de + push hl + + ld hl,numFreeObjects + inc [hl] + + ;retrieve & save index of next object + ld a,OBJBANK + ld [$ff70],a + ld hl,OBJ_NEXT + add hl,de + ld a,[hl] + ld [nextObjIndex],a + + ;switch in objectList RAM + ld a,OBJLISTBANK + ld [$ff00+$70],a + + ;hl = &headTable[c] + ld h,((headTable>>8) & $ff) + ld l,c + + ;c = object index to remove + call PointerDEToIndex + ld [curObjIndex],a + ld c,a + ;push de ;save original ptr to object + + ; prev = 0 + ; for(cur=headTable[c]; cur!=obj; cur=cur->nextItem){ + ; prev = cur; + ; } + + ;b is prev index, a is cur index + ld b,0 ; prev = 0; + ld a,[hl] ; cur=headTable[c] + push hl ; save headTable + push hl ; save headTable again + + push af + ld a,OBJBANK + ld [$ff70],a + pop af + + ;cur equal to desired? +.findIt + cp c + jr z,.foundIt + + ;prev = cur + ld b,a + + ;cur=cur->nextItem + call IndexToPointerHL + ld de,OBJ_NEXT + add hl,de + + ld a,[hl] + jr .findIt + +.foundIt + pop hl ;retrieve headTable[c] + + ld a,OBJLISTBANK + ld [$ff70],a + + ;check value of prev to determine if cur is head or not + ld a,b + or a + + ;is head, set headTable[c] = cur->nextObj + jr z,.afterCheckHead + +.notHead + ;prev->nextObj = cur->nextObj + call IndexToPointerHL ;'a' is prevObj + ld de,OBJ_NEXT + add hl,de + ld a,OBJBANK + ld [$ff70],a + +.afterCheckHead + ld a,[nextObjIndex] + ld [hl],a + + ;-------------------------check tail----------------- + ; if(cur==tailTable[c]){ + ; tailTable[c] = prev; + ; } + ld a,OBJLISTBANK + ld [$ff70],a + pop hl ;retrieve headTable[c] + ld h,((tailTable>>8) & $ff) ;make it tailTable[c] + + ld a,c ;c is cur (found) obj + cp [hl] + jr nz,.afterCheckTail + + ld [hl],b ;change tail = prev + +.afterCheckTail + ;objExists[objIndex] = 0; + ld h,((objExists>>8) & $ff) ;hl = &objExists[objIndex] + ld a,[curObjIndex] + ld l,a + xor a + ld [hl],a + + ;firstFreeObj = min(firstFreeObj, curObjIndex) + ld a,[firstFreeObj] + cp l ;compare to curObjIndex + jr c,.afterSetFirstFree ;no change + + ld a,l + ld [firstFreeObj],a + +.afterSetFirstFree + + ;pop de ;retrieve original pointer to object + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: IterateAllLists +; Arguments: b - offset of method to call on a given object +; Description: Loops through all the objects in each class calling a +; specified method on each. Makes use of the IterateList +; routine to do so. +; +; Equivalent to the following C code: +; +; void IterateAllLists(void *fnptr()){ +; for(i=0; i<256; i++){ +; IterateList(headTable[i],fnptr); +; } +; } +; +;--------------------------------------------------------------------- +IterateAllLists:: + push bc + push de + push hl + + ld hl,headTable ;start of array of ptrs to heads of list + ld c,0 ;loop 0...numClasses - 1 + +.loop ld a,OBJLISTBANK ;switch in objectList RAM + ld [$ff00+$70],a + + ld a,[hl+] ;de = headTable[i] + or a + jr z,.afterIterate + + call IndexToPointerDE + call IterateList + +.afterIterate + inc c + jr nz,.loop + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: IterateList +; Arguments: b - offset of method to call on a given object +; c - class index of object +; de - ptr to current object +; Description: Given a pointer to a list node (presumably the head), +; loops though all linked nodes calling a specified method +; on each object. +; +; Equivalent to the following C code: +; +; void IterateList(Node*cur, void *fnptr()){ +; if(!cur) return; +; do{ +; cur->fnptr(); //not really a C cmd I know! +; cur = cur->nextItem; +; }while(cur); +; } +; +;--------------------------------------------------------------------- +IterateList:: + push bc + push de + push hl + + ldio a,[curObjWidthHeight] + push af + + ;pre-test curPtr to avoid unnecessary work if null + ld a,d ;test high byte of ptr + or a + jr z,.done + + ;save class index + ld a,c + ld [delTempL],a + ld a,b + ld [delTempH],a ;and method type + + ld a,OBJLISTBANK + ld [$ff70],a + + ;convert offset into actual address of class method to call + ld a,b ;save function offset + ld b,0 ;clear high byte of bc + sla c ;shift c one left + rl b ;bit shifted out of c into b + ld hl,classLookup + add hl,bc ;hl is &classLookup[classIndex*2] + + ld c,a ;method offset into c + ld a,[hl+] + ld b,a ;store LOW byte of addr in b + ld h,[hl] ;get high byte + ld l,b ;hl is now ptr to class + ld b,0 ;clear high byte of bc + add hl,bc ;hl is now ptr to ptr to class method + + call GetMethodAddrFromPointer + +.loop ;get ptr to next before calling method + ld a,OBJBANK ;switch in object RAM + ld [$ff00+$70],a + + push hl + ld hl,OBJ_NEXT + add hl,de + ld a,[hl] + call IndexToPointerHL + ld b,h + ld c,l + pop hl + push bc ;save ptr to next on stack + + push hl + ld bc,.returnAddress ;save return address on stack + push bc + ld a,[delTempL] ;class index into c + ld c,a + + ;----call super methods + push bc + push de + ld a,[delTempH] ;method index + cp METHOD_INIT + jr nz,.checkSuperDie + + call SuperInit + jr .afterSuperDie + +.checkSuperDie + cp METHOD_DIE + jr nz,.afterSuperDie + + call SuperDie + +.afterSuperDie + ld a,b + cp METHOD_CHECK + jr nz,.afterCheckIdle + ld a,[allIdle] + or a + jr z,.afterCheckIdle + ;can't be explosion + pop de + pop bc + ld a,c + cp $ff + jr z,.returnAddress + jr .afterPopDEBC +.afterCheckIdle + + pop de + pop bc +.afterPopDEBC + ;--------- + + push hl + call SetObjWidthHeight + pop hl + jp hl ;start class method (de is cur) +.returnAddress + + pop hl + pop de ;de = de->nextItem + ld a,d + or a ;we done? + jr nz,.loop + +.done pop af + ldio [curObjWidthHeight],a + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: FindObject +; Arguments: c - class index of object to find +; de - location of object +; Returns: de - ptr to object +; a - non-zero if object was found +; Alters: af,de +; Description: Given a class and a location, finds the corresponding +; object. +; Note: Leaves the RAM bank set to OBJECT mem +; +; cur = headTable[c]; +; while(cur){ +; if(cur->loc == loc) return cur; +; cur = cur->nextItem; +; } +;--------------------------------------------------------------------- +FindObject:: + push bc + ;de is return value + push hl + + ;find the head of the list + ld a,OBJLISTBANK ;switch in objectList RAM + ld [$ff00+$70],a + + ;find byte index into headTable array + ld h,((headTable>>8) & $ff) + ld l,c + ld a,[hl] + call IndexToPointerHL ;hl is head of list + + ld bc,OBJ_NEXT-1 ;offset to add to hl during loop + + ;loop while our pointer is non-null + ld a,OBJBANK ;switch in object RAM + ld [$ff00+$70],a + +.terminationTest + ld a,h ;high byte of ptr + or a ;null? + jr nz,.pointerOkay + +.pointerNull + ld de,0 ;return null + jr .done + +.pointerOkay + ;test to see if object->loc == loc + ld a,[hl+] ;compare low byte + cp e + jr nz,.continue + ld a,[hl] ;compare high byte + cp d + jr nz,.continue + +.foundMatch + dec hl + jr .returnMatch + +.continue + add hl,bc ;add offset to get to nextItem + ld a,[hl] + call IndexToPointerHL ;cur = cur->nextItem + jr .terminationTest + +.returnMatch + ld d,h + ld e,l + +.done pop hl + ;de is return value + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CallMethod +; Arguments: b - offset of method to call +; c - class index of object +; de - ptr to object +; Returns: a - return value +; Alters: af +; Description: Calls the a class method passing in the location of an +; associated object. +; If calling Init or Die then calls SuperInit or +; or SuperDie first. +;--------------------------------------------------------------------- +CallMethod:: + ld a,b + cp METHOD_CHECK + jr nz,.afterCheckIdle + + ld a,[allIdle] + or a + jr z,.afterCheckIdle + ;can't be explosion + ld a,c + cp $ff + ret nz + +.afterCheckIdle + push bc + push de + push hl + ldio a,[curObjWidthHeight] + push af + + call SetObjWidthHeight + + ld a,b + cp METHOD_INIT + jr nz,.checkSuperDie + + call SuperInit + jr .afterSuperDie + +.checkSuperDie + cp METHOD_DIE + jr nz,.afterSuperDie + + call SuperDie + +.afterSuperDie + ;find the base address of class and add method offset + ;get offset into classLookup + ld l,c + ld a,OBJLISTBANK + ld [$ff70],a + xor a + sla l + rla + add ((classLookup>>8) & $ff) + ld h,a ;hl is &classLookup[c] + ld a,[hl+] + add b ;add offset of method + ld h,[hl] + ld l,a ;hl is addr of class methods + ld a,0 + adc h + ld h,a ;hl is addr of specific method + + call GetMethodAddrFromPointer + + ld a,c ;store class index in A temporarily + ld bc,.returnAddress ;save return address on stack + push bc + ld c,a ;class index into c + jp hl ;start class method (de is cur) +.returnAddress + +.done + ld h,a ;save return value + pop af + ldio [curObjWidthHeight],a + ld a,h ;restore return value + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetObjWidthHeight +; Arguments: c - class index +; Returns: Nothing. +; Alters: af,hl +; Description: Sets up [curObjWidthHeight] with either 1 (for 1x1) +; or 2 (2x2) +;--------------------------------------------------------------------- +SetObjWidthHeight:: + ;set the tile width and height to either 1x1 or 2x2 + ld a,TILEINDEXBANK + ld [$ff70],a + ld h,((fgAttributes>>8) & $ff) + ld l,c + ld a,[hl] + rrca + swap a + and 1 + inc a ;one or two + ldio [curObjWidthHeight],a + ret + +;--------------------------------------------------------------------- +; Routine: GetObjectIndex +; Arguments: de - ptr to object +; Returns: hl - &objExists[objIndex] +; Alters: af,hl +;--------------------------------------------------------------------- +GetObjectIndex: + call PointerDEToIndex + ld h,((objExists>>8) & $ff) + ld l,a + ret + +;--------------------------------------------------------------------- +; Routine: IterateMaxObjects +; Arguments: b - offset of method to call on a given object +; c - max objects to iterate through +; Alters: af +; Description: Loops through the next 256 objects indices. If an +; object exists then the specified method is called on +; it and one is added to the maxObjects counter. When +; "maxObjects" have been handled the routine returns +; and picks up again next time where it left off. Each +; time the counter wraps around the object timers are +; incremented +;--------------------------------------------------------------------- +IterateMaxObjects:: + push bc + push de + push hl + + ld a,OBJLISTBANK + ld [$ff00+$70],a + + ld a,[iterateNext] + ld l,a + ld a,[iterateNext+1] + ld h,a + +.outer ld e,0 + +.inner ld a,[hl+] ;pick up the next flag + + or a ;non-zero? + jr z,.continue + + ;found an existing object + push de + push hl + + dec hl ;go back to where we found it + + ;convert objIndex hl into objAddress de + ld a,l + call IndexToPointerDE + + ;get the class index + ;hl = &objClassLookup[objIndex] + ld h,((objClassLookup>>8) & $ff) + ld a,[hl] ;what's the class index? + ld h,c ;stow c for a sec + ld c,a + + call CallMethod + + ld c,h ;retrieve c from storage + + pop hl + pop de + dec c ;used one of our max checks + + ld a,OBJLISTBANK ;be sure & point back to our + ld [$ff00+$70],a ;list RAM + +.continue + ;wrap around hl + ld a,h ;is hl < objExists + 256? + cp (((objExists>>8)&$ff)+1) + jr c,.hlOkay + + ld hl,objExists+1 ;wrap around to beginning + call UpdateObjTimers ;update timers + +.hlOkay + xor a + cp c + jr z,.skipUnused ;bust out if we've checked enough + + dec e + jr nz,.inner + +.skipUnused + +.done + ;save current value of hl + ld a,l + ld [iterateNext],a + ld a,h + ld [iterateNext+1],a + + pop hl + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: DeleteObjectsOfClass +; Arguments: bc - class to delete objects +; Alters: af +; Description: +;--------------------------------------------------------------------- +DeleteObjectsOfClass:: + push de + push hl + + ld a,OBJLISTBANK + ld [$ff70],a + + ld e,1 + ld hl,classLookup+2 + +.loop ld a,[hl+] + cp c + jr nz,.afterCheck + ld a,[hl] + cp b + jr nz,.afterCheck + + ld a,e + call DeleteObjectsOfClassIndex + +.afterCheck + inc hl + inc e + jr nz,.loop + + pop hl + pop de + ret + +;--------------------------------------------------------------------- +; Routine: DeleteObjectsOfClassIndex +; Arguments: a - class index to delete objects +; Alters: af,hl +; Description: Deletes all objects of the specified class index type +;--------------------------------------------------------------------- +DeleteObjectsOfClassIndex:: + push bc + push de + push hl + + ld c,a ;class index in c + + ld a,TILEINDEXBANK + ldio [$ff70],a + + ld h,((headTable>>8) & $ff) + ld l,c + +.loop ld a,[hl] ;get head object in de + or a + jr z,.done + call IndexToPointerDE + + ld b,METHOD_DIE + call IterateList + + ld a,OBJLISTBANK + ld [$ff70],a + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetFirst +; Arguments: c - class index +; Returns: de - head of list or null +; a - null if no first object +; zflag - or a +; Alters: af,de +;--------------------------------------------------------------------- +GetFirst:: + call GetHead + call IndexToPointerDE + ret + +;--------------------------------------------------------------------- +; Routine: GetNextObject +; Arguments: de - current object +; Returns: a - null if no next object +; de - next object +; zflag - or a +; Alters: af,de +;--------------------------------------------------------------------- +GetNextObject:: + call GetNext + call IndexToPointerDE + ld a,d + or a + ret + +;--------------------------------------------------------------------- +; Routine: GetNext +; Arguments: de - current object +; Returns: a - index of next object or null +; Alters: af +;--------------------------------------------------------------------- +GetNext:: + push hl + + ld a,OBJBANK + ld [$ff70],a + + ld hl,OBJ_NEXT + add hl,de + ld a,[hl] + + pop hl + or a + ret + +;--------------------------------------------------------------------- +; Routine: SetNext +; Arguments: a - index of next object +; de - current object +; Returns: Nothing. +; Alters: Nothing. +;--------------------------------------------------------------------- +SetNext:: + push hl + push af + ld a,OBJBANK + ldio [$ff70],a + pop af + + ld hl,OBJ_NEXT + add hl,de + ld [hl],a + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetHead +; Arguments: a - index to set head to +; c - class index +; Returns: None. +; Alters: af +;--------------------------------------------------------------------- +SetHead:: + push hl + push af + ld a,OBJLISTBANK + ld [$ff70],a + pop af + + ld h,((headTable>>8) & $ff) + ld l,c + + ld [hl],a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: GetHead +; Arguments: c - class index +; Returns: a - index of object at head or null if empty list +; Alters: af +;--------------------------------------------------------------------- +GetHead:: + push hl + ld a,OBJLISTBANK + ld [$ff70],a + + ld h,((headTable>>8) & $ff) + ld l,c + + ld a,[hl] ;get head object index + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: GetTail +; Arguments: c - class index +; Returns: a - index of object at tail or null if empty list +; de - list +; Alters: af +;--------------------------------------------------------------------- +GetTail:: + push hl + ld a,OBJLISTBANK + ld [$ff70],a + + ld h,((tailTable>>8) & $ff) + ld l,c + + ld a,[hl] ;get tail object index + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: SetTail +; Arguments: a - index to set head to +; c - class index +; Returns: Nothing. +; Alters: Nothing. +;--------------------------------------------------------------------- +SetTail:: + push hl + push af + ld a,OBJLISTBANK + ld [$ff70],a + pop af + + ld h,((tailTable>>8) & $ff) + ld l,c + + ld [hl],a + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: GetNumObjects +; Arguments: c - class index +; Returns: a - object count for class +; zflag - or a +; Alters: af +;--------------------------------------------------------------------- +GetNumObjects:: + push bc + push de + push hl + + ld b,0 + call GetFirst + jr z,.countFinished + +.getNext + inc b + call GetNextObject + jr z,.countFinished + jr .getNext + +.countFinished + ld a,b + or a + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetAssociated +; Arguments: c - class index +; Returns: a - associated class index +; Alters: af +;--------------------------------------------------------------------- +GetAssociated:: + push hl + ld a,TILEINDEXBANK + ld [$ff70],a + ld h,((associatedIndex>>8)&$ff) + ld l,c + ld a,[hl] + pop hl + ret + +;--------------------------------------------------------------------- +SECTION "ObjListHome",ROM0 +;--------------------------------------------------------------------- + +;--------------------------------------------------------------------- +; Routine: InitFOF +; Arguments: none +; Returns: nothing +; Alters: af +; Description: Initializes the Friend Or Foe Table so that each group +; is friends only with itself except for: +; - FFA group friends with no one (not even selves) +; - MONSTERM/N (groups M&N) set to friends with all +; but FFA +; - MONSTERB set to friends with hero +;--------------------------------------------------------------------- +InitFOF:: + push bc + push de + push hl + + ld a,OBJLISTBANK + ld [$ff70],a + + ld c,0 ;loop 256 times + ld hl,FOFTable + xor a + +.loop1 ld [hl+],a + dec c + jr nz,.loop1 + + ld hl,FOFTable+17 + ld c,15 + ld a,1 + ld de,16 ;offset + +.loop2 ld [hl+],a + add hl,de + dec c + jr nz,.loop2 + + ;set monster N to be friends with all but FFA + ;row + ld hl,FOFTable+30 ;row 2, second to last column + ld c,15 ;set next 15 rows +.loop30 ld [hl],a + add hl,de + dec c + jr nz,.loop30 + + ;column + ld hl,FOFTable+(14*16)+1 + ld c,15 +.loop40 ld [hl+],a + dec c + jr nz,.loop40 + + ;set monster N to be friends with all but FFA + ;row + ld hl,FOFTable+31 ;row 2, last column + ld c,15 ;set next 15 rows +.loop3 ld [hl],a + add hl,de + dec c + jr nz,.loop3 + + ;column + ld hl,FOFTable+(15*16)+1 + ld c,15 +.loop4 ld [hl+],a + dec c + jr nz,.loop4 + + ld a,1 + ld b,GROUP_HERO + ld c,GROUP_MONSTERB + call SetFOF + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: SetFOF +; Arguments: a - value to set to (0=enemies or 1=friends) +; b - group 1 +; c - group 2 +; Returns: nothing +; Alters: af +; Description: Sets an entry in the FOF table +;--------------------------------------------------------------------- +SetFOF:: + push hl + + ;combine b and c in l + push af + + ld a,OBJLISTBANK + ld [$ff70],a + + ld a,b + swap a + or c + ld l,a + ld h,((FOFTable>>8) & $ff) + pop af + + ;set the one entry + ld [hl],a + + ;set the reverse entry + swap l + ld [hl],a + + pop hl + ret + + +;--------------------------------------------------------------------- +; Routine: GetFOF +; Arguments: b - group 1 +; c - group 2 +; Returns: a - 1=friend, 0=foe +; Alters: af +; Description: Sets an entry in the FOF table +;--------------------------------------------------------------------- +GetFOF:: + push hl + + ld a,OBJLISTBANK + ld [$ff70],a + + ld a,b + swap a + or c + ld l,a + ld h,((FOFTable>>8) & $ff) + + ld a,[hl] + + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: LinkRemakeLists +; Arguments: None. +; Alters: af +; Returns: Nothing. +; Description: Initializes some values. +; objTimerBase = 0 +; objTimer60ths = 0 +; heroTimerBase = 0 +; heroTimer60ths = 0 +; oamFindPos = 0 +; baMoved = 0 +; bsMoved = 0 +; iterateNext = objExists + 1 +; +; Remakes the tailTable. +; Waits for a VBLANK +; Resets $ff+vblankTimer to zero +; Resets updateTimer to zero +;--------------------------------------------------------------------- +LinkRemakeLists:: + push bc + push de + push hl + + ;initialize some values + xor a + ld [objTimerBase],a + ld [objTimer60ths],a + ld [heroTimerBase],a + ld [heroTimer60ths],a + ld [oamFindPos],a + ld [baMoved],a + ld [bsMoved],a + ld de,objExists+1 + ld hl,iterateNext + ld [hl],e + inc hl + ld [hl],d + + ld a,OBJLISTBANK + ld [$ff70],a + + ;----remake tailTable----------------------------------------- + ;first go through and zero out contents of tailTable + ld hl,tailTable + ld c,0 ;loop 256 times + xor a +.zeroTailTable + ld [hl+],a + dec c + jr nz,.zeroTailTable + + ;start at the head of each list and follow each link until + ;a null link is found. That will be the tail. + ld de,headTable +.getNextListHead + ld a,[de] + or a ;this linked list null? + jr z,.afterMakeTail + + ld b,a + ld a,OBJBANK + ld [$ff70],a + ld a,b ;index of object + ld bc,OBJ_NEXT +.followLink + call IndexToPointerHL ;convert into object pointer + add hl,bc ;set HL to point to link + ld a,[hl] ;get link + or a + jr nz,.followLink + + ;HL is the tail + OBJ_NEXT + ;convert HL to obj index and use that to set up + ;entry into tailTable + ld a,OBJLISTBANK + ld [$ff70],a + ld a,l ;align hl on 16-byte boundary + and %11110000 + ld l,a + call PointerHLToIndex + ld d,((tailTable>>8) & $ff) ;de is &tailTable[class] + ld [de],a + ld d,((headTable>>8) & $ff) ;de is &headTable[class] + +.afterMakeTail + inc de + ld a,e + or a + jr nz,.getNextListHead + + xor a + ldio [vblankTimer],a + ldio [updateTimer],a + + ;count the number of free objects + ld c,$ff + ld hl,objExists+1 +.countFree + ld a,[hl+] + or a + jr z,.countContinue + dec c +.countContinue + ld a,h + cp $d5 + jr nz,.countFree + ld a,c + ld [numFreeObjects],a + + call SetBGSpecialFlags + + ld b,METHOD_DRAW + call IterateAllLists + + call ClearBackBuffer + + call RestrictCameraToBounds + call ScrollToCamera + call DrawMapToBackBuffer + + ;turn on sound master control + ld a,$80 + ld [$ff26],a + + ld a,$ff + ld [$ff24],a ;full volume both channels + ld [$ff25],a ;all sounds to both channels + + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: GetClass +; Arguments: de - current object +; Returns: c - class index of object +; Alters: af,c +;--------------------------------------------------------------------- +GetClass:: + push hl + ld a,OBJLISTBANK + ldio [$ff70],a + call PointerDEToIndex + ld h,((objClassLookup>>8) & $ff) + ld l,a + ld c,[hl] ;obj class + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: InstanceOf +; Arguments: c - class index of object +; hl - class (e.g. classWallCreature) +; Returns: a - 1 if this instanceof, 0 if not instanceof +; Alters: af,hl +;--------------------------------------------------------------------- +InstanceOf:: + push de + ld d,h + ld e,l + call GetClassMethodTable + ld a,d + cp h + jr nz,.false + ld a,e + cp l + jr nz,.false + ld a,1 + pop de + ret +.false + pop de + xor a + ret + +;--------------------------------------------------------------------- +; Routine: GetClassMethodTable +; Arguments: c - class index of object +; Returns: hl - ptr to method vector table +; Alters: af,hl +;--------------------------------------------------------------------- +GetClassMethodTable:: + ld a,OBJLISTBANK + ldio [$ff70],a + + ld h,0 + ld l,c + sla l + rl h + push bc + ld bc,classLookup + add hl,bc + pop bc + + ld a,[hl+] + ld h,[hl] + ld l,a + ret + + +;--------------------------------------------------------------------- +; Routine: GetFGMapping +; Arguments: c - class index +; Returns: a - tile index mapped to class +; Alters: af, hl +;--------------------------------------------------------------------- +GetFGMapping:: + ld a,TILEINDEXBANK + ldio [$ff70],a + ld h,((fgTileMap>>8) & $ff) + ld l,c + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routine: SetFGMapping +; Arguments: a - tile index to set to +; c - class index +; Returns: Nothing. +; Alters: af, hl +;--------------------------------------------------------------------- +SetFGMapping:: + push af + ld a,TILEINDEXBANK + ldio [$ff70],a + pop af + ld h,((fgTileMap>>8) & $ff) + ld l,c + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: GetBGMapping +; Arguments: c - class index +; Returns: a - tile index mapped to class +; Alters: af, hl +;--------------------------------------------------------------------- +GetBGMapping:: + ld a,TILEINDEXBANK + ldio [$ff70],a + ld h,((bgTileMap>>8) & $ff) + ld l,c + ld a,[hl] + ret + +;--------------------------------------------------------------------- +; Routine: SetBGMapping +; Arguments: a - tile index to set to +; c - class index +; Returns: Nothing. +; Alters: af, hl +;--------------------------------------------------------------------- +SetBGMapping:: + push af + ld a,TILEINDEXBANK + ldio [$ff70],a + pop af + ld h,((bgTileMap>>8) & $ff) + ld l,c + ld [hl],a + ret + +;--------------------------------------------------------------------- +; Routine: CheckEachHero +; Arguments: a - skip hero1 if hero0 return true (1=yes, 0=no) +; hl - routine to call +; Returns: a - 1 or 0 result of last function called +; Alters: all +; Description: loads {A} with hero0_index and then hero1_index, +; calling the routine pointer with each. +;--------------------------------------------------------------------- +CheckEachHero:: + push af + + ld a,[hero0_index] + or a + jr z,.checkHero1 + push hl + ld de,.returnPoint0 + push de ;return address + jp hl +.returnPoint0 + pop hl + or a + jr z,.checkHero1 + + ;second is optional + pop af + or a + ret nz ;optional okay + + push af +.checkHero1 + pop af + ld a,[hero1_index] + or a + ret z + + ld de,.returnAddress1 + push de + jp hl ;will return to my parent +.returnAddress1 + ret + +;--------------------------------------------------------------------- +; Routine: RemoveHero +; Arguments: c - hero class index +; Returns: Nothing. +; Alters: af +; Description: Saving heroes current health etc into heroX_data. +; If its health is zero: +; - restores health to full (incorrect) +; - changes map to [respawnMap] if local hero, leaves +; map be if remote hero. +; Does nothing if class index is null. +; Removes the hero from the map. +; If local, sets [heroesPresent] to zero. If remote +; then remote hero flag is removed by RemoveRemoteHero +;--------------------------------------------------------------------- +RemoveHero:: + ld a,c + or a + ret z + + push bc + push de + push hl + + call GetFirst ;get the hero object in de + call GetHealth + or a + jr nz,.afterDeath + +IF INFINITEHEALTH==0 + ;----dead, create an explosion---- + call GetFGAttributes + and %111 ;isolate color + ld [bulletColor],a + call GetCurLocation + ld a,l + ld [bulletLocation],a + ld a,h + ld [bulletLocation+1],a + ld b,16 ;initial frame + call CreateExplosion +ENDC + +.afterDeath + ld a,[hero0_index] + cp c + jr nz,.handleHero1 + + ;----hero 0 (local)----- + call GetPuffCount + ld [hero0_puffCount],a + call GetHealth + ld [hero0_health],a + ld b,a + ld hl,hero0_data + ld a,[amLinkMaster] + or a + jr z,.removeRemote + jr .removeLocal + +.handleHero1 + ;----hero 1 (remote)---- + call GetPuffCount + ld [hero1_puffCount],a + call GetHealth + ld [hero1_health],a + ld b,a + ld hl,hero1_data + ld a,[amLinkMaster] + or a + jr z,.removeLocal + jr .removeRemote + +.removeLocal + push bc + push hl + call GetFacing + ld c,a + call RemoveFromMap + xor a + ld [heroesPresent],a + pop hl + pop bc + + push bc + push de + push hl + ld de,classDoNothing + call GetClassMethodTable + ld b,h + ld c,l + call ChangeClass + pop hl + pop de + pop bc + + ld a,b + or a + jr nz,.done ;wasn't dying, just leaving + +IF INFINITEHEALTH==0 + ;pause for a second + ld a,30 + call Delay + + ;fade to black + ;ld a,30 + ;call SetupFadeToBlack + ;call WaitFade + + ;----respawn at the appropriate map---- + ld de,HERODATA_ENTERDIR + add hl,de + ld a,EXIT_D + ld [hl],a + + call UpdateState + + ld hl,$1500 + ld a,l + ld [curLevelIndex],a + ld a,h + ld [curLevelIndex+1],a + ld a,1 + ld [timeToChangeLevel],a +ENDC + jr .done + +.removeRemote + call RemoveRemoteHero + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: CallBGAction +; Arguments: a - action type (BGACTION_HIT) +; c - class +; hl - map location of bg tile +; Returns: 'a' zflag from action + a's zflag, normally: +; 0 - no explosion +; non-zero - explosion +; Alters: af +; Description: +;--------------------------------------------------------------------- +CallBGAction:: + push bc + push de + push hl + + ;ensure class IS a bg class + ld d,a + ldio a,[firstMonster] + ld e,a + ld a,c + or a + jr z,.returnAddress ;null tile + cp e + jr nc,.returnAddress ;is a monster (myself?) + ld a,d + + ;save return address on stack + ld de,.returnAddress + push de + + ;get tile class in c + push af + + push hl + call GetClassMethodTable + ld d,h + ld e,l + pop hl + pop af + push de ;addr of method on stack + + ret ;call method + +.returnAddress + pop hl + pop de + pop bc + or a + ret + +;--------------------------------------------------------------------- +; Routine: ChangeMyClass +; ChangeMyClassAndRedraw +; ChangeMyClassToAssociatedAndRedraw +; Arguments: a - new class type +; c - old class type +; de - this +; Returns: c - new class type +; Alters: af,c +; Description: Changes this object from the old to new class type. +;--------------------------------------------------------------------- +ChangeMyClassToAssociatedAndRedraw:: + call GetAssociated + jp ChangeMyClassAndRedraw + +ChangeMyClassAndRedraw:: + call ChangeMyClass + ld b,METHOD_DRAW + jp CallMethod + +ChangeMyClass:: + push af + call RemoveObjectFromList + pop af + ld c,a + call AddObjectToList + ret + +;--------------------------------------------------------------------- +; Routine: RemoveObjectFromList +; Arguments: c - class type +; de - this +; Returns: Nothing. +; Alters: af +; Description: Removes the object from its class's linked list but +; does not delete it. +;--------------------------------------------------------------------- +RemoveObjectFromList:: + push bc + push de + push hl + + call PointerDEToIndex + ld b,a + + ;head of list? + call GetHead + cp b + jr nz,.notHead + + ;make next item new head of list + call IndexToPointerDE + call GetNext + call SetHead + jr .done + +.notHead +.search + ;search through list for item that points to that to remove + call IndexToPointerDE + call GetNext + cp b + jr nz,.search + +.foundPrevious + ;set prev->next = prev->next->next + call PointerDEToIndex + push af ;save index of prev + ld a,b ;get searchObj + call IndexToPointerDE + call GetNext ;searchObj->next + ld b,a + pop af + call IndexToPointerDE ;prev = searchObj->next + ld a,b + call SetNext + + ;if next is null then removed obj was tail. Reset tail + ;to prev + ;ld b,a redundant; A already == B + or a + jr nz,.done + + call PointerDEToIndex + call SetTail + +.done + pop hl + pop de + pop bc + ret + +;--------------------------------------------------------------------- +; Routine: AddObjectToList +; Arguments: c - class type +; de - this +; Returns: Nothing. +; Alters: af +; Description: +;--------------------------------------------------------------------- +AddObjectToList:: + push de + + xor a + call SetNext ;obj->next = null in all cases + + call PointerDEToIndex + + push af + + ;objClassLookup[objIndex] = classIndex + ld d,((objClassLookup>>8) & $ff) + ld e,a + ld a,OBJLISTBANK + ldio [$ff70],a + ld a,c + ld [de],a + + ;head == null? + call GetHead + or a + jr nz,.addToTail + +.addToHead + pop af + call SetHead + call SetTail + pop de + ret + +.addToTail + call GetTail + call IndexToPointerDE + pop af + + call SetNext + call SetTail + + pop de + ret + +;--------------------------------------------------------------------- +; Routine: SetAssociated +; Arguments: b - class to associate +; c - current class +; Alters: af +;--------------------------------------------------------------------- +SetAssociated:: + push hl + ld a,OBJLISTBANK + ld [$ff70],a + + ld h,((associatedIndex>>8)&$ff) + ld l,c + ld [hl],b + pop hl + ret + +;--------------------------------------------------------------------- +; Routine: CountNumObjects +; Arguments: a - class index to count +; Returns: a - number of objects of this class +; Alters: af +;--------------------------------------------------------------------- +CountNumObjects:: + push bc + push de + + ld c,a + + ld b,0 + call GetFirst + or a + jr z,.done + + inc b + +.loop call GetNextObject + or a + jr z,.done + inc b + jr .loop + +.done ld a,b + pop de + pop bc + ret + + +;--------------------------------------------------------------------- +; Routine: ClassIndexIsHeroType +; Arguments: a - hero flag e.g. HERO_BS_FLAG +; c - class index +; Returns: a - 1 if matches +; zflag - or a +; Alters: af +;--------------------------------------------------------------------- +ClassIndexIsHeroType:: + push bc + ld b,a + + ld a,[hero0_index] + cp c + jr nz,.checkingHero1 + +.checkingHero0 + ld a,[hero0_type] + jr .checkType + +.checkingHero1 + ld a,[hero1_type] +.checkType + cp b + jr nz,.returnFalse + + ld a,1 ;return true + or a + pop bc + ret + +.returnFalse + xor a + pop bc + ret + diff --git a/Source/sample.asm b/Source/sample.asm new file mode 100644 index 0000000..0c2c9db --- /dev/null +++ b/Source/sample.asm @@ -0,0 +1,8 @@ +;--------------------------------------------------------------------- +; Eat +;--------------------------------------------------------------------- +SECTION "Section_eat_0",ROMX +eat_gbw:: + INCBIN "wave/eat/eat.gbw" + DB $80,$00 ;terminate sample + diff --git a/Source/start.inc b/Source/start.inc new file mode 100644 index 0000000..3b8e18c --- /dev/null +++ b/Source/start.inc @@ -0,0 +1,49 @@ +INFINITEHEALTH EQU 0 +UPGRADES EQU 1 + +MENUTOMAP EQU $1102 ;intro missions +;MENUTOMAP EQU $1100 ;straight to appomattox +;MENUTOMAP EQU $1104 ;other map + +FORCE_EXIT EQU 0 +FORCE_EXIT_MAP EQU $1000 + +INITIALMAP EQU $1200 ;(logo cinema) +;INITIALMAP EQU $1101 ;(main menu) +;INITIALMAP EQU $1300 ;(appomattox) +;INITIALMAP EQU $0808 +;INITIALMAP EQU $1401 ;(appomattox control panel) +;INITIALMAP EQU $1102 ;intro cinema / music test +;INITIALMAP EQU $1100 ;appomattox (no join menu) +;INITIALMAP EQU $1502 ;(approach kiwi cinema) +;INITIALMAP EQU $1402 ;(lady flower intervenes) + +INITEXIT0 EQU EXIT_D +;INITEXIT0 EQU EXIT_W + +APPOMATTOXMAPINDEX EQU $71 +;APPOMATTOXMAPINDEX EQU $0a + +;INITHERO0 EQU 2054 ;hero class (2054 = BA) +;INITHERO0 EQU 2056 ;hero class (2056 = BS) +INITHERO0 EQU 2058 ;hero class (2058 = Haiku) +;INITHERO0 EQU 2400 ;hero class (Captain Flour) +;INITHERO0 EQU 2398 ;hero class (Lady Flour) +;2390 = king grenade + +;INITTYPE0 EQU HERO_BA_FLAG +;INITTYPE0 EQU HERO_BS_FLAG +INITTYPE0 EQU HERO_HAIKU_FLAG +;INITTYPE0 EQU HERO_FLOUR_FLAG +;INITTYPE0 EQU HERO_FLOWER_FLAG + +INITLOC0 EQU $0909 +;INITLOC0 EQU $0e0f ;14,15 + +INITEXIT1 EQU EXIT_D +INITHERO1 EQU FREEVERSE_CINDEX +INITLOC1 EQU $0909 +;INITLOC1 EQU $0e10 ;14,16 +INITTYPE1 EQU HERO_BS_FLAG + +KGRENADE_CINDEX EQU 2390 diff --git a/Tools/MakeGBM/makegbm.cpp b/Tools/MakeGBM/makegbm.cpp new file mode 100644 index 0000000..bc74bd9 --- /dev/null +++ b/Tools/MakeGBM/makegbm.cpp @@ -0,0 +1,844 @@ +// makegbm.cpp +// 2000.08.19 by Abe Pralle +// Plasma Works Game Boy Music Compiler + +#include "makegbm.h" + +#include +#include +#include +#include + +#define PERCUSSION_VOLUME 0x51 +// ride rd 20 71 00 80 +// snare sn 3f 71 17 80 +// bass bs 00 71 90 80 +// tom1 ta 2b 71 57 80 +// tom2 tb 2b 71 47 80 + +Label::Label(){ + text = 0; + pc = 0; +} + +Label::~Label(){ + if(text) delete text; + text = 0; +} + +Label::SetLabel(char *st,int pcPos){ + if(text) delete text; + text = new char[strlen(st)+1]; + strcpy(text,st); + pc = pcPos; +} + +GBMParser::GBMParser(){ + notesPerSecond = 4; + + curBaseLabel = new char[5]; + strcpy(curBaseLabel,"main"); + + track = 2; + + pc = 0; //program counter + line = 1; //line number + + numLabels = 0; + + track1Start = track2Start = track3Start = track4Start = 0; + + outfile = 0; + + lastByteWritten = 2; + + envelope1 = 0xf1; //default envelopes for restoring after a hold + envelope2 = 0xc2; + duration3 = 0xcf; + envelope4 = 0xf0; + repeat1 = repeat2 = repeat3 = repeat4 = 0; +} + + +GBMParser::~GBMParser(){ + delete curBaseLabel; + curBaseLabel = 0; + if(outfile){ + delete outfile; + outfile = 0; + } +} + + +int GBMParser::Compile(char *sourcefile){ + ifstream infile(sourcefile,ios::in | ios::binary | ios::nocreate); + if(!infile){ + cout << "Error: Can't open input file " << sourcefile << endl; + return 0; + } + + transpose = 0; + + pc += 4; //space for infinite nop loop + lastByteWritten = 2; + + //pass 1: collect labels + cout << "Pass 1..."; + char *input; + for(input=GetInput(infile); !infile.eof(); input=GetInput(infile)){ + if(!AddLabel(input)){ + //not a label or comment + if(!HandleCommand(infile,input,0)) return 0; + } + } + + //open the output file + char outputFilename[256]; + ostrstream stout(outputFilename,256); + stout << sourcefile << ".bin" << ends; + outfile = new ofstream(outputFilename,ios::out|ios::binary); + if(!(*outfile)){ + delete outfile; + outfile = 0; + return Error("Can't open output file"); + } + + //write out header + track1Start += 6; + track2Start += 4; + track3Start += 2; + + Write(1); //version + Write(60 / notesPerSecond); + Write(0); //flags + Write(0); //pad1 + Write(0); //pad2 + Write(0); //pad3 + Write(0); //pad4 + Write(0); //pad5 + Write(track1Start & 0xff); + Write((track1Start>>8) & 0xff); + Write(track2Start & 0xff); + Write((track2Start>>8) & 0xff); + Write(track3Start & 0xff); + Write((track3Start>>8) & 0xff); + Write(track4Start & 0xff); + Write((track4Start>>8) & 0xff); + + //write infinite nop loop + pc = 0; + Write(0); //nop + Write(0x6e); //jump.l cc=always + Write(0xfc); //-4 offset + Write(0xff); + + lastByteWritten = 2; + + //pass 2: generate code + cout << "Pass 2..."; + infile.close(); + infile.open(sourcefile,ios::in | ios::binary); + line = 1; + delete curBaseLabel; + curBaseLabel = new char[5]; + strcpy(curBaseLabel,"main"); + track = 2; + + for(input=GetInput(infile); !infile.eof(); input=GetInput(infile)){ + + if(input[0]=='.'){ //sub label + //char st[1024]; + //ostrstream stout(st,1024); + //stout << curBaseLabel << input << '.' << track << ends; + //labelList[numLabels++].SetLabel(st,pc); + }else if(input[strlen(input)-1]==':'){ // base label + int len = strlen(input); + if(curBaseLabel) delete curBaseLabel; + curBaseLabel = new char[len+3]; + { + ostrstream stout(curBaseLabel,len+3); + stout << input; + stout.seekp(stout.tellp()-1); //erase ':' + stout << ends; + } + + //char st[1024]; + //ostrstream stout(st,1024); + //stout << curBaseLabel << '.' << track << ends; + //labelList[numLabels++].SetLabel(st,pc); + }else{ + //not a label or comment + if(!HandleCommand(infile,input,1)) return 0; + } + } + + //write a return at the end + Write(2); + + cout << "Compilation successful to " << sourcefile << ".bin" << endl; + + return 1; +} + +char *GBMParser::GetInput(istream &in){ + static char buffer[1024]; + int pos=0; + + //eat whitespace + char ch; + for(ch=in.get(); ; ch=in.get()){ + if(in.eof()) return 0; + if(ch==10) line++; + if(ch==' ' || ch==9 || ch==10 || ch==13) continue; + break; + } + + //eat comments + if(ch=='/'){ + if(in.get()!='/'){ + in.unget(); + }else{ + for(ch=in.get(); ch!=10; ch=in.get()){ + if(in.eof()) return 0; + } + line++; + return GetInput(in); + } + } + + //accumulate the word + for(;;){ + buffer[pos++]=ch; + ch = in.get(); + if(in.eof()){ + buffer[pos]=0; + return buffer; + } + if(ch==10) line++; + if(ch==','||ch==' '||ch==9||ch==10||ch==13) break; //end of word + } + buffer[pos] = 0; //null terminate the word + return buffer; +} + +int GBMParser::GetByte(istream &in){ + int togo = 2; + int value = 0; + while(togo>0){ + int ch = in.get(); + if(ch>='A' && ch<='F') ch+=32; + if(ch>='a' && ch<='f'){ + value = value*16 + ((ch-'a')+10); + togo--; + }else if(ch>='0' && ch<='9'){ + value = value * 16 + (ch - '0'); + togo--; + }else if(ch != ',' && ch!=' '){ + char st[80]; + ostrstream stout(st,80); + stout << "Expecting hex digit, got " << ch << ends; + Error(st); + return -1; + } + } + return value; +} + +int GBMParser::GetRegister(istream &in){ + //eat white space until we find an "r" + int ch; + for(ch=in.get(); ch!='r'; ch=in.get()){ + if(in.eof()) return -1; + if(ch!=' ' && ch!=9 && ch!=','){ + in.unget(); + return -1; + } + } + + int value = 0; + for(ch=in.get(); ch>='0' && ch<='9'; ch=in.get()){ + if(in.eof()) return -1; + value = value*10 + (ch - '0'); + } + in.unget(); + + return value; +} + +int GBMParser::GetDecimal(istream &in){ + //eat white space until we find a number + int ch; + int negative = 1; + for(ch=in.get(); ch<'0' || ch>'9'; ch=in.get()){ + if(in.eof()) return -1; + if(ch=='-'){ + negative = -1; + }else if(ch!=' ' && ch!=9 && ch!=','){ + in.unget(); + return -1; + } + } + + int value = ch - '0'; + for(ch=in.get(); ch>='0' && ch<='9'; ch=in.get()){ + if(in.eof()) return value*negative; + value = value*10 + (ch - '0'); + } + in.unget(); + + return value*negative; +} + +int GBMParser::GetHold(istream &in){ + //eat white space until we find an h or non-h + int ch; + for(ch=in.get(); ch!='h' && ch!='H'; ch=in.get()){ + if(in.eof()) return 0; + if(ch==10) line++; + if(ch!=' ' && ch!=9 && ch!=',' && ch!=10 && ch!=13){ + in.unget(); + return 0; + } + } + + //multiplier? + int num = GetDecimal(in); + if(num>0) return num + GetHold(in); + else return 1 + GetHold(in); +} + +int GBMParser::HandleCommand(istream &in, char *cmd, int genCode){ + + int ch0 = cmd[0],i; + if(ch0>='A' && ch0<='Z') ch0+=32; + + if(stricmp(cmd,"track")==0){ + char *trackNum = GetInput(in); + if(!trackNum) return Error("Expecting track number 1-4"); + + track = trackNum[0] - '0'; + if(track<1 || track>4){ + return Error("Track number must be 1-4"); + } + + //implied "ret" if last command not "ret" + if(lastByteWritten != 2) Write(2); + + if(track==1 && track1Start==0) track1Start = pc; + if(track==2 && track2Start==0) track2Start = pc; + if(track==3 && track3Start==0) track3Start = pc; + if(track==4 && track4Start==0) track4Start = pc; + + }else if(stricmp(cmd,"transpose")==0){ + transpose = GetDecimal(in); + }else if(stricmp(cmd,"rd")==0){ + Write(7); + Write(0x20); + Write(PERCUSSION_VOLUME); + envelope4 = 0xf1; + Write(0x00); + Write(0x80); + repeat4 = 1; + }else if(stricmp(cmd,"sn")==0){ + Write(7); + Write(0x3f); + Write(PERCUSSION_VOLUME); + envelope4 = 0xf1; + Write(0x17); + Write(0x80); + repeat4 = 1; + }else if(stricmp(cmd,"bs")==0){ + Write(7); + Write(0x00); + Write(PERCUSSION_VOLUME); + envelope4 = 0xf1; + Write(0x90); + Write(0x80); + repeat4 = 1; + }else if(stricmp(cmd,"ta")==0){ + Write(7); + Write(0x2b); + Write(PERCUSSION_VOLUME); + envelope4 = 0xf1; + Write(0x57); + Write(0x80); + repeat4 = 1; + }else if(stricmp(cmd,"tb")==0){ + Write(7); + Write(0x2b); + Write(PERCUSSION_VOLUME); + envelope4 = 0xf1; + Write(0x47); + Write(0x80); + repeat4 = 1; + }else if(stricmp(cmd,"notesPerSecond")==0){ + notesPerSecond = GetDecimal(in); + if(notesPerSecond==-1) + return Error("Expecting decimal notesPerSecond value"); + }else if(stricmp(cmd,"skip")==0 || cmd[0]=='-' || cmd[0]=='h'||cmd[0]=='H'){ + istrstream inst(cmd+1,strlen(cmd)-1); + int repeatCount = GetDecimal(inst); + Write(0); + if(repeatCount>0){ + for(i=1; i>8) & 0xff); + }else{ + pc += 2; + } + }else if(stricmp(cmd,"call")==0){ + int cc; + char *ccst = GetInput(in); + if(stricmp(ccst,"lt")==0) cc = 0; + else if(stricmp(ccst,"le")==0) cc = 1; + else if(stricmp(ccst,"eq")==0) cc = 2; + else if(stricmp(ccst,"ge")==0) cc = 3; + else if(stricmp(ccst,"gt")==0) cc = 4; + else if(stricmp(ccst,"ne")==0) cc = 5; + else cc = 6; //jump always + + Write(0x78 + cc); //opcode + + char *label; + if(cc!=6) label = GetInput(in); + else label = ccst; + + if(genCode){ + int pos = GetLabel(label); + if(pos==-1){ + Error("Undefined label referenced"); + return Error(label); + } + int offset = pos - (pc + 2); + Write(offset & 0xff); + Write((offset>>8) & 0xff); + }else{ + pc += 2; + } + }else if((ch0>='a' && ch0<='g') && (cmd[1]>='3' && cmd[1]<='8')){ + + int freq = LookupFrequency(cmd); + if(!freq) return 0; + freq |= 0x8000; //set play bit + + //note + int hold = GetHold(in); + //cout << cmd << " got hold " << hold << endl; + + //write out the note + if(track==1){ + Write(0x04); + if(!repeat1) freq |= 0x4000; + } + else if(track==2){ + Write(0x05); + if(!repeat2) freq |= 0x4000; + }else if(track==3){ + Write(0x06); + if(!repeat3) freq |= 0x4000; + } + Write(freq & 0xff); + Write((freq>>8) & 0xff); + + //write out "hold" number of nops + for(i=0; i1){ + //write a note without fade + if(track==1){ + Write(0x08); + Write(0xf0); + }else if(track==2){ + Write(0x09); + Write(0xf0); + }else if(track==3){ + Write(0x0a); + Write(0x00); + }else if(track==4){ + Write(0x0b); + Write(0xf0); + } + + //write note w/repeat flag set + Write(freq & 0xff); + Write(((freq|0x4000)>>8)&0xff); + + //repeat this note for the hold between the start and end + for(i=2; i>8) & 0xff); + }else{ + } + */ + + }else if(ch0>='a' && ch0<='z'){ //implied function call + if(genCode){ + int pos = GetLabel(cmd); + if(pos==-1){ + Error("Undefined label referenced"); + return Error(cmd); + } + Write(0x7e); //long call cc=always opcode + int offset = pos - (pc + 2); + Write(offset & 0xff); + Write((offset>>8) & 0xff); + }else{ + pc += 3; + } + }else{ + char st[80]; + ostrstream stout(st,80); + stout << "Unexpected input: " << cmd << ends; + return Error(st); + } + return 1; +} + +int GBMParser::Error(char *st){ + cout << "Error (" << line << "): " << st << endl; + return 0; +} + +int GBMParser::AddLabel(char *text){ + if(GetLabel(text)>=0) return Error("Label already exists"); + if(numLabels >= MAX_LABELS) return Error("Max labels reached!"); + if(text[0]=='.'){ //sub label + char st[1024]; + ostrstream stout(st,1024); + stout << curBaseLabel << text << '.' << track << ends; + labelList[numLabels++].SetLabel(st,pc); + + }else if(text[strlen(text)-1]==':'){ // base label + int len = strlen(text); + if(curBaseLabel) delete curBaseLabel; + curBaseLabel = new char[len+3]; + { + ostrstream stout(curBaseLabel,len+3); + stout << text; + stout.seekp(stout.tellp()-1); //erase ':' + stout << ends; + } + + char st[1024]; + ostrstream stout(st,1024); + stout << curBaseLabel << '.' << track << ends; + labelList[numLabels++].SetLabel(st,pc); + }else{ + return 0; //not a label + } + return 1; +} + +int GBMParser::GetLabel(char *st){ + char text[120]; + ostrstream stout(text,120); + + if(st[0]=='.') stout << curBaseLabel << st << '.' << track << ends; + else if(st[strlen(st)-1]==':'){ + stout << st; + stout.seekp(stout.tellp()-1); //get rid of the ':' + stout << '.' << track << ends; + }else stout << st << '.' << track << ends; + + int i; + for(i=0; i 71) return Error("Bad note computation"); + //if(stricmp(st,"a4")==0) cout << st << " " << frequencyTable[index] << endl; + + return frequencyTable[index]; +} + +void GBMParser::Write(int n){ + if(outfile){ + outfile->put((char) n); + //cout << pc << ": " << n << endl; + } + lastByteWritten = n; + pc++; +} + +//-------------------------------------------------------------------- +// +int main(int argc, char *argv[]){ + if(argc==1){ + cout << "Usage: makegbm filename.gtx [file2.gtx...]" << endl; + exit(1); + } + + int i; + for(i=1; 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 literal 0 HcmV?d00001 diff --git a/Tools/MakeGBM/makegbm.h b/Tools/MakeGBM/makegbm.h new file mode 100644 index 0000000..6bdd3eb --- /dev/null +++ b/Tools/MakeGBM/makegbm.h @@ -0,0 +1,60 @@ +// makegbm.h +// 2000.08.19 by Abe Pralle +// Plasma Works Game Boy Music Compiler + +#include +#include + +#define MAX_LABELS 4096 + +class Label{ + protected: + int pc; + char *text; + + public: + Label(); + ~Label(); + + SetLabel(char *st, int pcPos); + int GetPC(){ return pc; } + char *GetText(){ return text; } +}; + +class GBMParser{ +protected: + int notesPerSecond; + char *curBaseLabel; + int track; + int track1Start, track2Start, track3Start, track4Start; + int envelope1,envelope2,duration3,envelope4; + int repeat1,repeat2,repeat3,repeat4; + int pc; + int line; + Label labelList[MAX_LABELS]; + int numLabels; + int lastByteWritten; + ofstream *outfile; + int transpose; + +public: + GBMParser(); + ~GBMParser(); + + int Compile(char *sourcefile); + +protected: + char *GetInput(istream &in); + int GetByte(istream &in); + int GetRegister(istream &in); + int GetDecimal(istream &in); + int GetHold(istream &in); + int HandleCommand(istream &in, char *cmd, int genCode); + int Error(char *st); + + int AddLabel(char *text); + int GetLabel(char *st); + int LookupFrequency(char *st); + void Write(int n); +}; +