Main Menu

Hacking: Open Contribution Thread

Started by Hungry Horace, 03 Jun, 2007, 08:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hungry Horace

#75
you appear to be missing a number of banners? (i.e. those which have automatic colouring)

http://www.ultimateamiga.com/HostedProjects/GamesCorner/TheCryptOfBloodwych/Maps/bw_keep_3.jpg

^^ look in th efirst main room after the recruitment area... there are various signs i have shown as 'white' which are generated at random (or rather, seeded "random"...)

here is my stone-wall code, which includes banners and gems etc.

like before, it probably uses some modulo functions where it would be better using bit-test functions... sorry about that!


to read about how switches are defined, see also here:
http://www.ultimateamiga.com/index.php/topic,8908.msg39953.html#msg39953
because the below code refers to a function which reads-in the relevant switch operation.

_DESC1:

   OPTION(11)=True



   LINE$(10)="STONE WALL"


If CC=>8 : Rem - has something on it

   OPTION(12)=True

      If CC=$8 or CC=$C : Rem - north
         LINE$(11)="FACING NORTH         "
Else If CC=$9 or CC=$D : Rem - east
         LINE$(11)="FACING EAST          "
Else If CC=$A or CC=$E : Rem - south
         LINE$(11)="FACING SOUTH         "
Else If CC=$B or CC=$F : Rem - west
         LINE$(11)="FACING WEST          "
      End If


      If BB mod 4=0 : Rem Shelf
            LINE$(12)="SHELF         "

Else If BB mod 4=1 : Rem Sign

Rem --- sign colours

         LINE$(12)="SIGN"
         OPTION(13)=True

       If AA=0 and BB=1 : Rem - seed sign
            LINE$(13)="GENERATED COLOUR"
  Else If AA=0 and BB=5 : Rem - serp sign
            LINE$(13)="SERPENT        "
  Else If AA=0 and BB=9 : Rem - dragon sign
            LINE$(13)="DRAGON       "
  Else If AA=0 and BB=13 : Rem - moon sign
            LINE$(13)="MOON          "
  Else If AA=1 and BB=1 : Rem - chaos sign
            LINE$(13)="CHAOS         "
  Else If BB mod 4=1 : Rem -- remainders are wall text
            LINE$(13)="SCROLL"+Str$((((AA*16)+BB)/4)-4)
   End If


Else If BB mod 4=2 : Rem Switch

      OPTION(13)=True

         If(AA*16)+BB>=$7
             LINE$(12)="SWITCH"

                         If BB=$2 or BB=$A : Rem switch unused
                     LINE$(14)="LIT"
                   Else If BB=$6 or BB=$E : Rem switch used
                     LINE$(14)="DIM"
                    End If

                OPTION(14)=True

                EE=(AA*16)+BB
                SWITCH=(EE/8)-0
                LINE$(13)="REFERENCE:"+Str$(SWITCH)

   ' now lets talk about what the switch does

         SWITCHTYPE= Fn SWITCHTYPE
                  If SWITCHTYPE=0 : RESULT$="NO EFFECT"
             Else If SWITCHTYPE=2 : RESULT$="REMOVE"
             Else If SWITCHTYPE=4 : RESULT$="TOGGLE WALL"
             Else If SWITCHTYPE=6 : RESULT$="OPEN METAL DOOR"
             Else If SWITCHTYPE=8 : RESULT$="ROTATE WALL"
            Else If SWITCHTYPE=10 : RESULT$="TOGGLE PILLAR"
            Else If SWITCHTYPE=12 : RESULT$="PLACE PILLAR"
            Else If SWITCHTYPE=14 : RESULT$="ROTATE WOODEN"
                               Else RESULT$="INVALID"
             End If

         LINE$(16)=RESULT$
         LINE$(17)="X: "+Right$(Hex$( Fn SWITCHX+$100),2)+" Y: "+Right$(Hex$( Fn SWITCHY+$100),2)
            OPTION(16)=True
            OPTION(17)=True




      Else : LINE$(12)="SWITCH"
             LINE$(13)="EMPTY" : End If

Else If BB mod 4=3 : Rem crystal hole

         LINE$(12)="SOCKET"
         OPTION(13)=True
         OPTION(14)=True

     EE=(AA*16)+BB

       If EE>=$0 and EE<=$7 : Rem -- serpent
            LINE$(13)="SERPENT"

  Else If EE>=$8 and EE<=$F : Rem -- chaos
            LINE$(13)="CHAOS"

  Else If EE>=$10 and EE<=$17 : Rem -- dragon
            LINE$(13)="DRAGON"

  Else If EE>=$18 and EE<=$1F : Rem -- moon 
            LINE$(13)="MOON"

  Else If EE>=$20 and EE<=$27 : Rem -- grey 
            LINE$(13)="GREY"

  Else If EE>=$28 and EE<=$2F : Rem -- bluish
            LINE$(13)="BLUISH"

  Else If EE>=$30 and EE<=$37 : Rem -- brown
            LINE$(13)="BROWN"

  Else If EE>=$38 and EE<=$3F : Rem -- tan
            LINE$(13)="TAN"

  Else If EE>=$40 and EE<=$FF : Rem -- everything else that isnt
            LINE$(13)="INVALID"

   End If

      If BB=$3 or BB=$B : Rem --- if full
            LINE$(14)="FULL"

Else If BB=$7 or BB=$F : Rem -- if empty

            LINE$(14)="EMPTY"
  End If

  End If


Else
         LINE$(11)="PLAIN"

End If

Return
Quote from: KillerGorillabecause winuae is made of code and your amiga is made of stuff


MadMunky

#76
Good spot, missed that group off..



Also I'm looking into a new features which will let me support real time map editing in the Amiga/ST Versions when played on a emulator, also this will allow you to have a real time map which updates the player location :)

MadMunky

Real Time Player tracking is now working for Steem, I need to clean up the code and decide if I want to read all of the ST Memory so I can update the whole map (open/closed doors etc) then once this is all working nicely I'll add in a WinUAE option


MadMunky

#78
I got real time tracking working with winaue also.

Horace any chance you want to share the source of your editor so I can try add all the same features as I can see any reason why I cant make my version support the same + Atari/PC support also

Had to add the option for winuae to rescan the memory as sometimes it will find the data in the HDD image not the live game :)


MadMunky

Not sure if you guys know this but the Level Data is always 5122 Bytes apart

So MOD0 + 5122 bytes = Serpent Tower Data

This is the same on Atari and Amiga

MadMunky

#80
So live mapping is now working (read-only atm) but with the live data there is some different values have you seen these two before?

01 43
00 43

This is normally a Pillar/Bed but do you know what that 4 Means?

Also do you have any code for the different doors as I still need to fix this.

*UPDATE* Ah its cause there is items on the floor :)

Hungry Horace

i will upload the source for you when i get the chance :)

looking at map data as AB CD, in your example C = 4

bits are switched on/off in this value, to show what is 'occupying' the space. You will generally only see this when you look at 'live' data

this is entirely from memory, but i *think*....

bit 0 (usually C=1 ) is used for a door lock , bit 2 (C=4) you have just said is an object....   bit 3 (C=8) iirc is a person (monster or champion).... that leaves bit 1 (C=2) must be a spell in that location. e.g. a fireball that has been launched or similar.

obviously these can then also be combined if several of them are true!


what door code are you after? metal doors? i posted this already... :)

http://www.ultimateamiga.com/index.php/topic,8806.msg44182.html#msg44182
Quote from: KillerGorillabecause winuae is made of code and your amiga is made of stuff


MadMunky

Cheers again Horace not sure how i missed the door code :s

Doors now working :)

Hungry Horace

as promised, attached is the editor source code. i cant be 100% it's the latest version, but it has all of the map code (converting to both text, and AMOS style draw commands) in it.

I'm not sure there is much 'extra' to learn from it... i did try to create a "standard" input/output file format that could potentially become cross-platform (the .map and .obj files that it creats be substituted directly into the PC version for example) ... however, when i tried to put my new levels into the ST version, it didnt want to run - this may be related to the ST versions copy protection though. 


to answer your other PM question MM, i have never created any remake of BW... i have some basic wall-drawing code for AMOS but i didnt write it, and it isnt very good tbh!! (for map/editing purposes your ST/UAE plugins are far better!!)

anyway, hope this helps, and sorry for the delay - kind of been busy of late!!
Quote from: KillerGorillabecause winuae is made of code and your amiga is made of stuff


MadMunky

Thanks Horace, just taken a quick read though and its amazing how similar we have done things but I cant see any code about objects in the file which is what I was really after

Also did you have any of the graphics still like monster images/object images as all the ones I ripped where from the PC version so will need to redo them otherwise, any chance in your Bloodwych font saves me having to make it :)

I'll make sure your not reading any map data I've missed and then on that side we should be same, do you happen to know if the location of the Bloodwych data is different in different version of the Amiga disks/HDD version as I'll try add support to import/export as many formats as possible

Hungry Horace

there should be object code, because there is an object stack-editor and a way to place them.

they arent 'displayed' on the map though. i will check the most recent code for you later today if i can :)

there are definitely two different versions on the amiga, with different offsets for the data - i think they may have fixed a couple of bugs (like where some objects on the floor are displayed in front of the wrong things, like people's feet) .... not sure of the exact changes!!

i will also dig out the monster /character graphics for you, but the font was made by my brother, so i may have to simply 'draw' all of the font-characters onto an image file for you!!
Quote from: KillerGorillabecause winuae is made of code and your amiga is made of stuff


Hungry Horace

#86
ok, so it seems you were right - that code was quite out of date!

I have exported the code from the last version i had - you should find this more useful i hope!!


edit: all monsters / characters .gif attached also ;)

edit 2: and now the font image thing .... although you may need a 'pure' output, this is just a screen grab from OSX... let me know if you need it 'clean'

Quote from: KillerGorillabecause winuae is made of code and your amiga is made of stuff


copse

Quote from: MadMunky on 25 May, 2012, 11:03 AM
Real Time Player tracking is now working for Steem, I need to clean up the code and decide if I want to read all of the ST Memory so I can update the whole map (open/closed doors etc) then once this is all working nicely I'll add in a WinUAE option
Any chance you can open source your map viewer code?  Don't worry about clean up, everyone's code is a mess ;)  It'd be another resource for the rest of us that might want to spend time bringing Bloodwyche out of the darkness.  I know I've tried disassembling it several times, but unfortunately given up.

Hungry Horace

Quote from: copse on 13 Aug, 2012, 11:36 PM
Any chance you can open source your map viewer code?  Don't worry about clean up, everyone's code is a mess ;)  It'd be another resource for the rest of us that might want to spend time bringing Bloodwyche out of the darkness.  I know I've tried disassembling it several times, but unfortunately given up.

shame - i'd love to see the Amiga Bloodwych fully disassembled and commented.... then we could start thinking about adding new functions, switches, objects, etc :D

i can dream!!
Quote from: KillerGorillabecause winuae is made of code and your amiga is made of stuff


copse

Quote from: Hungry Horace on 16 Aug, 2012, 09:47 PMshame - i'd love to see the Amiga Bloodwych fully disassembled and commented.... then we could start thinking about adding new functions, switches, objects, etc :D

i can dream!!
10 grand and I'll disassemble it and provide you with portable C source code.  Maybe even an Android port.  Too many other things to do, otherwise.