' +-----------------------------------------+
' |                                         |
' | Sim City Money Hack by MUG U.Kż in 1990 |
' |                                         |
' +-----------------------------------------+
'
IF XBIOS(4)<>1
  ALERT 0,"Medium resolution please !",1," Oh ... ",d|
  EDIT
ENDIF
'
DIM reg%(16)
screen%=XBIOS(2)
INLINE depack%,418
INLINE picture%,7067
INLINE music%,3965
INLINE savedpos%,27248
HIDEM
unpack(music%,&H72000)
m.on%=&H72000
m.of%=&H72006
'
FOR f|=0 TO 3
  SETCOLOR f|,7,7,7
NEXT f|
unpack(picture%,screen%)
CALL m.on%
'
DEFMOUSE 0
SETCOLOR 0,0,0,7
SETCOLOR 1,7,0,0
SETCOLOR 2,0,7,0
SETCOLOR 3,7,7,7
wait
'
' +-----------+
' | Main Loop |
' +-----------+
'
intro
start:
put_menu
IF key|=49
  instrux
ENDIF
'
IF key|=50
  credits
ENDIF
'
IF key|=51
  GOTO start_cheat
ENDIF
'
IF key|=52
  quote
ENDIF
'
IF key|=53
  ALERT 0,"Do you really want to|quit this program ?? ",1," Yes | No ",d|
  IF d|=1
    GOTO kwit
  ENDIF
ENDIF
'
GOTO start
'
' +--------------+
' | Load In File |
' +--------------+
'
start_cheat:
'
get_file:
CLS
PRINT AT(22,1);"p                                     q"
PRINT AT(22,2);"pSelect 'Sim City' saved file to hack.q"
PRINT AT(22,3);"p                                     q"
PRINT AT(22,24);"pSim City Money Hack by MUG U.Kż in 1990q"
FILESELECT CHR$(GEMDOS(25)+65)+":\*.CTY","",f$
'
IF f$=""
  ALERT 0,"Cancel was selected!",1," MENU! ",d|
  GOTO start
ENDIF
'
IF NOT EXIST(f$)
  ALERT 0,"File not found !!",1," MENU! ",d|
  GOTO start
ENDIF
'
BLOAD f$,savedpos%
'
' +----------------+
' | Hack the Money |
' +----------------+
'
hack:
old_money%=LPEEK(savedpos%+3108)     ! Sector 6, +34 bytes
city$=CHAR{(savedpos%+2)}            ! Sector 0, +02 bytes
tax|=PEEK(savedpos%+3121)            ! Sector 6, +49 bytes
CLS
PRINT "Sim City Money Hack by MUG U.Kż in 1990"
PRINT "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
PRINT
PRINT "City: ";UPPER$(city$)
PRINT
PRINT "Tax Rate: ";tax|
PRINT
PRINT "Money in coffers: ";old_money%
PRINT
PRINT
PRINT "Enter new amount (max. ";&HFFFFFF;") or {0} to cancel ";
INPUT new_money%
'
IF new_money%=0
  abort!=TRUE
ENDIF
'
IF new_money%>&HFFFFFF
  ALERT 0,"There is always one who tests|every input routine !!",1," Idiot !",d|
  GOTO hack
ENDIF
'
IF abort!=TRUE
  GOTO start
ELSE
  LPOKE (savedpos%+3108),new_money%
ENDIF
'
' +-------------------+
' | Save out new file |
' +-------------------+
'
store:
OPEN "U",#1,f$
BPUT #1,savedpos%,27248
CLOSE #1
'
' +------------+
' | Another Go |
' +------------+
'
exit:
ALERT 2,"Alter another file ?",2,"Yes | No ",d|
IF d|=1
  CLR abort!
  GOTO start
ELSE
  GOTO kwit
ENDIF
'
' +-----------------+
' | Quit to desktop |
' +-----------------+
'
kwit:
RESERVE 40000
SETCOLOR 0,7,7,7
SETCOLOR 3,0,0,0
CALL m.of%
EDIT
'
' +-------------------+
' | Introductory Page |
' +-------------------+
'
PROCEDURE intro
  CLS
  PRINT AT(1,5);
  centre(0,"+------------------------------------------------------------------------+")
  centre(0,"|               'SIM CITY MONEY HACK' by MUG U.Kż in 1990                |")
  centre(0,"|               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                |")
  centre(0,"|                                                                        |")
  centre(0,"| This was one of the quickest & easiest hacks I have ever had to write, |")
  centre(0,"| mainly because I have kept a library of routines ready so that coding  |")
  centre(0,"| these cheat routines is now a simple task of disk-doctoring the save   |")
  centre(0,"| position and then hand-crafting the twenty lines of code required to   |")
  centre(0,"| alter the saved position by cheats like YOU !!!                        |")
  centre(0,"+------------------------------------------------------------------------+")
  PRINT
  PRINT
  centre(0,"Press any key for main menu.")
  ~INP(2)
RETURN
'
' +-----------+
' | Menu Page |
' +-----------+
'
PROCEDURE put_menu
  header
  centre(1,"Main Menu.")
  PRINT
  PRINT SPC(22);"1. View Instructions for this cheat routine."
  PRINT
  PRINT
  PRINT SPC(22);"2. View Credits and other such stuff."
  PRINT
  PRINT
  PRINT SPC(22);"3. Cheat on a saved '.CTY' file."
  PRINT
  PRINT
  PRINT SPC(22);"4. Quotes from Steve Vai's album (??)."
  PRINT
  PRINT
  PRINT SPC(22);"5. Quit to desktop."
  PRINT
  PRINT
  PRINT "This program has been disributed through the Budgie U.K Licenceware scheme."
  PRINT "Only registered Budgie U.K distributors are allowed to sell this disk."
  '
keyloop:
  KEYTEST key|
  '
  IF key|>=49 AND key|<=53
    GOTO exit_menu
  ELSE
    GOTO keyloop
  ENDIF
  '
exit_menu:
RETURN
'
' +--------------+
' | Instructions |
' +--------------+
'
PROCEDURE instrux
  header
  centre(1,"The Instructions Page (pointless really I know, but what the hell !!)")
  PRINT
  PRINT "This quickly & easily written cheat routine will allow you to alter the amount"
  PRINT "of money in the coffers.  The more you put in, the greater the faith that"
  PRINT "the people will have in you, as a mayor (bunch of Tories if you ask me !!)."
  PRINT
  PRINT "Simply select the saved position you want to alter and you will see the current"
  PRINT "amount of money in your coffers.  Enter the new amount and the saved game"
  PRINT "will be altered.  If you do not wish to cheat (why did you load this up ??)"
  PRINT "then key in '0' at the input prompt."
  PRINT
  PRINT "This cheat routine is one of many that were started & finished within a matter"
  PRINT "of hours and then all this text stuff was added afterwards !!  At least it"
  PRINT "gives you lot something to read - you'd complain if it was one of those boring"
  PRINT "'Insert disk and press any key to cheat' kind of program !!!"
  PRINT
  PRINT
  PRINT
  PRINT "Anyway, you are probably bored of all this, so press any key for the menu."
  ~INP(2)
RETURN
'
' +--------------------+
' | Credits & messages |
' +--------------------+
'
PROCEDURE credits
  header
  PRINT
  centre(1,"Credits for this little help routine. (OK cheat routine)")
  PRINT
  PRINT
  PRINT "Programming:   MUG U.Kż (of course !!) in GFA BASIC v3.07 & Compiler."
  PRINT
  PRINT "Hacking:       MUG U.Kż (who else ??) with Antics' Disk Doctor (the oldest &"
  PRINT "               still the best/quickest to use !!)"
  PRINT
  PRINT "Ego-Tripping:  MUG U.Kż (I like writing my name everywhere - so what !!)"
  PRINT
  PRINT "Dedicated to:  'Caz'"
  PRINT
  PRINT "Inspiration:   'Passion & Warfare' by Steve Vai (Buy it - it's brilliant !!)"
  PRINT
  PRINT "Packer:        'ICE Packer v2.11' by Axe of Delight"
  PRINT
  PRINT
  PRINT "              Press any key for the contact address."
  ~INP(2)
  header
  PRINT
  PRINT "If you would like to get in touch with MUG U.Kż, write to the address below."
  PRINT "Please do not write if you are a pirate or if you require pirated software !!"
  PRINT
  PRINT "b2MUG U.Kżb3, (please do not forget to add this bit)"
  PRINT "c/o Broadsword Computers,"
  PRINT "141 High Street,"
  PRINT "Rhyl."
  PRINT "CLWYD.  LL18 5AG"
  PRINT
  PRINT "I will be releasing the 'b1MUG U.Kż Utiltiy Compilation Volume IIb3' as soon as"
  PRINT "I have written some more useful(?) utilities to fill up the disk.  I will only"
  PRINT "be distributing the disk through the Budgie U.K Licenceware scheme."
  PRINT
  PRINT "This means that registered distributors of Budgie U.K will only be able to"
  PRINT "sell copies of my disk !!"
  PRINT
  PRINT "         Press any key for civilization (the menu you lame-brain !!)"
  ~INP(2)
RETURN
'
' +--------------------------------+
' | Lazy routine to save file-size |
' +--------------------------------+
'
PROCEDURE header
  CLS
  centre(0,"+-------------------------------------------------------+")
  centre(0,"| Sim City Money Hack by MUG U.Kż - August 15/16th 1990 |")
  centre(0,"+-------------------------------------------------------+")
  PRINT
RETURN
'
' +----------+
' | Quotes ! |
' +----------+
'
PROCEDURE quote
  CLS
  centre(1,"Quotes from 'Passion & Warfare' by Steve Vai:-")
  PRINT
  centre(1,"'THE ANIMAL'")
  PRINT
  centre(0,"When you look deep into the mirror you can see it;")
  centre(0,"The face of danger, ferocious energy, barbaric brute strength;")
  centre(0,"Savage vitality and intense vital sensuality.")
  centre(0,"That's your animal.")
  PRINT
  PRINT
  centre(1,"'EROTIC NIGHTMARES'")
  PRINT
  centre(0,"It was a hypnotic state of lust and fantasy.  We were all")
  centre(0,"headed for some sort of galactical orgasm when we realized")
  centre(0,"that we needed physical bodies to achieve that climax.")
  centre(0,"Since we were in an etheral body, that climax was")
  centre(0,"impossible, but still, the desire for fullfillment grew stronger.")
  PRINT
  PRINT
  PRINT "The latter one is dedicated with all my heart to Carolyn Roberts - all the ST"
  PRINT "owners that I know are now going to disown me after reading this last line !!"
  ~INP(2)
RETURN
'
' +---------------------+
' | Centre Text routine |
' +---------------------+
'
PROCEDURE centre(mode|,text$)
  PRINT TAB(40-LEN(text$)/2);text$
  IF mode|
    PRINT TAB(40-LEN(text$)/2);STRING$(LEN(text$),"~")
  ENDIF
RETURN
'
' +-------------+
' | Simple wait |
' +-------------+
'
PROCEDURE wait
  DO
    EXIT IF INKEY$<>""
  LOOP UNTIL MOUSEK
RETURN
'
' +------------------+
' | Depack ICE files |
' +------------------+
'
PROCEDURE unpack(from%,too%)    ! start addr, destination addr
  reg%(8)=from%
  reg%(9)=too%
  RCALL depack%,reg%()
RETURN
