Hilfe bei The Elder Scrolls
-
Guten Tag,
dies ist mein erster Besuch hier im Forum und ich habe eigentlich keine Ahnung vom Programmieren. Ich bastle aber gerne an PC Spielen herum und wollte wissen, ob es eine Möglichkeit gibt, The Elder Scrolls Arena (bitte keine Links zur Toolseite des UESP Wikis.Die kenne ich schon alle) neuen Content hinzu zu fügen? Da das Spiel schon sehr alt ist, gibt es mit den bisherigen Tools nur die Möglichkeit, Sprites, Texte etc. zu extrahieren und dann wieder zu einzufügen (also replacer). Doch ich dachte an so etwas wie ein Map Editor, mit Möglichkeit die Trigger zu verändern. Warum poste ich meine Anfrage nun hier?Nun, mit Hilfe der Tools des UESP Wikis und meinem Vorwissen, konnte ich herausfinden, dass Karteninformationen in den MIF Dateien gespeichert wurden.
Durch das spezielle Tool eines französischen Modders, wurden diese in Textedateien umgewandelt. Leider habe ich nun lediglich den Hex Code und möchte daraus etwas basteln, was mir die Möglichkeit bietet beispielsweise die Maps zu verändern, neue gif Dateien einzfügen oder bestimmte Tilesets einen Text triggern zu lassen? Oder kurz: Wie kann ich den Hex Code verändern, um neue Sachen einzufügen? Meines Wissens nach, kann ich nur bestehende Werte verändern, ohne die File crashen zu lassen.1. Ist das möglich?
2. Wie geht das? Wenn möglich für "noobs" beschrieben.
3. Wie könnte ich einen eigenen Editor dafür schreiben (welche Bücher müsste ich lesen, was benötige ich dafür)? Ich habe nur einen einfachen Dev Compiler.
Hier ein Beispielcode:
MHDR: 61 bytes (50x50) 0000: 80 01 C0 00 00 00 00 00 00 00 40 0D 00 00 00 00 ..........@..... 0010: 00 00 00 01 00 32 00 32 00 00 00 00 00 00 00 00 .....2.2........ 0020: 00 00 00 00 00 00 00 00 00 2E 00 7F 00 00 00 36 ...............6 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. LEVL: 2255 bytes NAME: "start level 1" INFO: "start.inf" NUMF: #7, 1 bytes TRIG: 160 bytes 0000: 03 14 00 FF 02 1A 01 FF 03 18 FF 10 02 16 FF 10 ................ 0010: 06 17 FF 10 10 18 FF 10 10 1E FF 11 0B 17 FF 11 ................ 0020: 1C 1E FF 11 26 27 FF 11 2E 29 FF 11 11 1B FF 0F ....&'...)...... 0030: 1C 24 FF 0F 05 17 02 12 0C 18 03 19 0F 08 03 19 .$.............. 0040: 0B 07 03 19 18 03 03 19 22 0B 03 19 2D 17 03 19 ........"...-... 0050: 22 28 03 19 14 0E 03 19 15 27 03 19 12 09 04 13 "(.......'...... 0060: 1F 0E 04 13 19 20 04 13 25 1E 04 13 1E 28 04 13 ..... ..%....(.. 0070: 11 27 04 13 04 27 04 13 06 08 04 13 2C 0E 04 13 .'...'......,... 0080: 2E 2B 05 12 08 18 06 12 06 10 06 12 19 1F 06 12 .+.............. 0090: 1A 09 06 12 20 27 06 12 1C 28 06 12 0F 18 06 12 .... '...(...... LOCK: 3 bytes 0000: 04 17 0A ... MAP1: 1496 bytes 0000: 88 13 D4 47 00 35 38 7A 58 C0 06 2D ED 3D F6 9A ...G.58zX..-.=.. 0010: E6 F5 F8 03 05 98 55 E4 40 B1 A1 9B 76 E3 C4 77 ......U.@...v..w 0020: A9 AF 66 D0 0F 6A 23 9E 8A 61 BA 40 39 E7 AA 0F ..f..j#..a.@9... 0030: 98 0B 4D 77 63 98 87 A0 0B 70 0D B0 45 C2 07 A8 ..Mwc....p..E... 0040: 9F 86 35 9E 79 E1 80 24 16 BC BD 80 C6 DE 66 CC ..5.y..$......f. 0050: 54 C4 0F 12 06 22 39 8C 37 1C 6F 27 E0 44 C8 9F T...."9.7.o'.D.. 0060: C6 62 00 24 41 D2 3A 64 59 C1 1F 53 FD 89 D8 1B .b.$A.:dY..S.... 0070: 2C 63 C0 8F 5C 76 F1 CA C8 6C 26 91 D3 9C 46 31 ,c..\v...l&...F1 0080: 2B D8 D7 42 DD D7 9F A3 9F 0C 7C 5B 42 A5 15 1A +..B......|[B... 0090: 18 EA 56 76 D8 15 78 0F 9C 6A 25 50 AD D5 4E A2 ..Vv..x..j%P..N. 00a0: 95 41 0E 50 FA 2D 57 93 73 02 77 6E 47 28 B1 D0 .A.P.-W.s.wnG(.. 00b0: 76 AC 55 08 16 2F 4C 29 45 72 C1 D5 23 59 84 99 v.U../L)Er..#Y.. 00c0: 3F 53 A5 8B 94 18 67 59 D9 DA AE 95 59 AA 2B 65 ?S....gY....Y.+e 00d0: 93 17 96 28 C5 99 AA B1 12 E9 D5 57 84 D6 14 F3 ...(.......W.... 00e0: 06 8C FF 65 93 46 DF 37 90 83 F1 7A 19 CF 07 5C ...e.F.7...z...\ 00f0: 09 2D C0 3C 02 50 23 41 CA 10 73 2F 7C 25 BB C2 .-.<.P#A..s/|%.. 0100: 4B 54 14 68 5B BE 6A 3C B2 CF 3E 46 52 5C 48 9E KT.h[.j<..>FR\H. 0110: 2C F9 CA F0 F7 CF 30 25 E2 FB 05 6F 11 5A 36 F0 ,.....0%...o.Z6. 0120: 6F B3 50 4D 85 B3 EA 77 DA C9 43 95 0F 09 3E 3B o.PM...w..C...>; 0130: 30 1D 09 38 62 E0 83 02 54 BB D9 BF A5 E0 F9 C2 0..8b...T....... 0140: 9A E0 9B F2 24 06 C2 A7 0D 67 CC 9F 1D F5 1B F0 ....$....g...... 0150: F9 8B 26 31 F0 91 FD 96 1E 99 64 BB 17 C5 FE 83 ..&1......d..... 0160: C1 29 A9 91 1F 18 97 32 59 48 26 E0 CB CC B4 8D .).....2YH&..... 0170: 16 DF 00 0F 5F A5 67 8F 65 FA 1D 7A 48 39 73 3E ...._.g.e..zH9s> 0180: 0D F7 E3 49 9A A3 6B D3 F3 EF DF 8A 67 45 70 7D ...I..k.....gEp} 0190: CC 9E E5 1D 8F E2 86 A8 4C 4D 48 FD 63 D2 8E C4 ........LMH.c... 01a0: 5C EF 3F 82 CD B4 FA 11 94 27 06 CE 5D 53 76 A7 \.?......'..]Sv. 01b0: C2 07 84 E5 CD 54 CD 37 D9 67 A9 15 BE 02 D9 09 .....T.7.g...... 01c0: 95 3F 6B 0F E7 BF DC 9F B6 DF 39 F4 7D D1 E7 E8 .?k.......9.}... 01d0: CF 53 9F 13 23 F7 C7 AA C7 44 5A DD 25 07 ED 4E .S..#....DZ.%..N 01e0: 34 C0 7B 36 3A B3 9D 60 B7 BA 7E 55 7B A7 25 BE 4.{6:..`..~U{.%. 01f0: 9C FA B2 9F AA 7D 02 FD D0 89 63 3C EA 9F 1E F2 .....}....c<.... 0200: 9D 1B 49 EA BB F1 0F 4C 4E 65 CF 62 F1 D3 AB 4A ..I....LNe.b...J 0210: 26 A8 D5 B5 7C C6 F0 87 37 7A 02 E8 9B A8 34 88 &...|...7z....4. 0220: A5 5A AA 72 F9 CE F7 14 74 98 EB FF 6F 4F 5B 6D .Z.r....t...oO[m 0230: 13 31 4D 1E C1 5D C9 21 A5 A7 C2 95 FA AC 7C C1 .1M..].!......|. 0240: F3 E5 C7 5F 54 1F D5 05 BB 5F D6 3B 1D 18 EB DB ..._T...._.;.... 0250: 98 23 7E 82 D9 EB 4A AF 38 37 15 F2 AB CE 87 61 .#~...J.87.....a 0260: EE 76 E7 A4 66 AC E5 D6 DA 45 83 9D D8 15 61 5D .v..f....E....a] 0270: 8A 5A 59 B9 64 DA 6B AD 7D BD 16 F5 74 F3 E6 F7 .ZY.d.k.}...t... 0280: A7 5F ED C5 79 EC 10 E9 4B A9 3F C5 2E C8 DE 05 ._..y...K.?..... 0290: DC 47 75 E7 79 1B B8 F3 A2 BD 62 38 5C 2D 35 A5 .Gu.y.....b8\-5. 02a0: 75 DE 6E C7 7F 38 6F 67 2E A2 FB 76 2E 75 DC CD u.n..8og...v.u.. 02b0: E3 1F 61 FD D9 3B 55 FC 67 5D D4 3D 9E 64 2F B6 ..a..;U.g].=.d/. 02c0: 4E CD 1A 18 61 54 92 F2 B6 EF 3C 65 4F AA A5 ED N...aT....<eO... 02d0: 47 B9 7B 77 C3 14 BA E1 DD C4 DC 7D A6 DE 5A EF G.{w.......}..Z. 02e0: 52 7E E1 FC A1 F7 93 58 9E BC E5 99 45 1A AF B8 R~.....X....E... 02f0: 91 92 FB CF DE CA 35 AF 1F B0 D4 90 55 5C 30 A3 ......5.....U\0. 0300: 32 76 68 85 6A 25 69 54 07 99 0F 75 A2 3F 9D 17 2vh.j%iT...u.?.. 0310: 33 C7 0F 3C 28 D0 F6 6D 71 35 43 E8 85 6D FC D1 3..<(..mq5C..m.. 0320: 1C C6 FC 9D FA A7 16 AA B5 7B 2F 1D 60 FE 28 FF .........{/.`.(. 0330: 75 7B FB 3B 5B F9 22 C9 29 EB 7F EC A5 EC CA 9E u{.;[.".)....... 0340: 41 F5 53 8B 1C 6E 6A 4D D4 FD 93 02 B1 B7 EE 4F A.S..njM.......O 0350: D4 07 36 62 6D 3F EA 8B 74 6B 8F 9D 44 F3 87 E6 ..6bm?..tk..D... 0360: 6F D6 F9 5B 87 33 17 6D 50 EB 82 7E D9 39 39 AB o..[.3.mP..~.99. 0370: 38 27 06 E4 C7 79 C9 D3 82 A8 4E 53 58 CD E9 66 8'...y....NSX..f 0380: 56 99 46 46 5F AD 06 10 95 6E 3E 06 DD 05 18 AE V.FF_....n>..... 0390: CE 49 8B 2E 87 9E E5 0F BB 81 38 65 6C 79 3F 62 .I........8ely?b 03a0: E7 E6 62 A8 C5 62 44 C4 2F CB 2A B5 04 1D 74 55 ..b..bD./.*...tU 03b0: 6D 56 6A 13 5B F1 FE 60 C5 D2 F5 E6 F8 17 E2 3E mVj.[..`.......> 03c0: C9 CA BD 23 D4 AC 7C EA 88 ED 43 E4 ED A9 CC 72 ...#..|...C....r 03d0: 98 CA 01 17 4B 6C F1 C3 BD 12 6E F0 F3 49 3A AB ....Kl....n..I:. 03e0: 8E BE 4A 27 71 7C 6B 32 ED C8 86 9C 99 7C 9F F1 ..J'q|k2.....|.. 03f0: 0C 7D FC 09 93 DD 79 B5 27 7D 70 1E 7D B1 77 4E .}....y.'}p.}.wN 0400: 5B 8B E2 A9 D6 D3 51 BE 7C AC BA 98 C1 79 DF FA [.....Q.|....y.. 0410: D8 35 46 EE 3C AD 75 CA 52 C4 5D B5 BE EF 97 16 .5F.<.u.R.]..... 0420: 25 B7 7E AF C4 1C F2 1C D4 A8 F0 CC 1B 8F 1D E9 %.~............. 0430: C6 6E E4 19 89 0B CB A9 75 AE 49 E7 7E E2 5A 47 .n......u.I.~.ZG 0440: 9E FE 03 4C DD 8C E2 39 A9 38 A2 67 99 27 09 7D ...L...9.8.g.'.} 0450: 63 9D 4D DF EF F4 F1 9E 78 46 FF 0D 63 6B 3C 0B c.M.....xF..ck<. 0460: 7D 82 9D 83 3D 0D 24 64 F7 94 FE 4F C6 A6 9C 6E }...=.$d...O...n 0470: 32 F8 C0 67 65 7F 3A 7B 30 A6 F2 4D DD 6C CC 4A 2..ge.:{0..M.l.J 0480: 1F 2D 36 D5 A6 C8 DB C8 CB 18 C5 7C 77 2F 7D 42 .-6........|w/}B 0490: 85 15 A6 3B BE 2C 15 CF 6C FA CF D5 8A D2 B8 F3 ...;.,..l....... 04a0: 9B A7 88 6E FC EB 6E C9 E2 0F 35 96 C5 C6 C7 43 ...n..n...5....C 04b0: 18 1F 27 7C C0 9D 1A 61 FF D6 F6 F7 7C 91 39 F7 ..'|...a....|.9. 04c0: 78 AC F7 93 7F 34 A1 B8 E1 9E EB CE 7A 77 CB 9B x....4......zw.. 04d0: 53 E3 C7 F7 2A 55 D9 02 F8 57 FD FF CA 1D F6 E6 S...*U...W...... 04e0: F1 9E FB 43 92 FD 78 66 4E 51 2A B0 76 A9 AC A1 ...C..xfNQ*.v... 04f0: 9E 78 42 B9 8A EB C8 FA 94 A3 50 97 37 5F BD F5 .xB.......P.7_.. 0500: E5 BE F7 A2 FD FA CC E3 6F 51 92 4B C9 9B 23 D9 ........oQ.K..#. 0510: 42 6D EC EE 94 BD 97 7D 91 D7 2B B1 0A D9 3F DB Bm.....}..+...?. 0520: F3 5C 45 D6 F0 C7 BA BF 78 9E 7B 77 00 77 94 EC .\E.....x.{w.w.. 0530: C6 EF BF 59 63 DB F5 7C 21 BE 42 F3 9F D9 3B 18 ...Yc..|!.B...;. 0540: DB F3 7F 46 2C F4 8A 67 DD 53 6D 9E EF FE E2 8E ...F,..g.Sm..... 0550: 27 EB E7 DC 4D EF D0 3D E1 49 9F 42 DC 07 EC 65 '...M..=.I.B...e 0560: ED BB F5 5B F4 F7 EB 61 C0 0C EF D4 67 70 54 41 ...[...a....gpTA 0570: F1 FD BA B6 F7 8F BB 4B 7B E3 77 C8 37 AE BE 95 .......K{.w.7... 0580: FD 60 EB 29 F5 18 E6 E6 E1 15 C4 29 17 D8 D7 FE .`.).......).... 0590: 50 3B A7 AF 75 DC 4F ED D1 EB 39 BC 1E F6 C7 C2 P;..u.O...9..... 05a0: 5D E4 AE 64 BB 0A B8 F3 60 0E B7 1D E5 1E BC D7 ]..d....`....... 05b0: CB 7D AD 7F 33 7D 5F 7B A5 66 9D C7 C7 30 DE 2D .}..3}_{.f...0.- 05c0: FB 16 FB BE 78 8D 73 2E E8 BF 7E 2E 90 F8 D5 DD ....x.s...~..... 05d0: A1 DE 9A FB 44 FD BF 40 ....D..@ FLOR: 525 bytes 0000: 88 13 C6 64 25 00 39 18 C0 0C 88 26 3C 07 52 01 ...d%.9....&<.R. 0010: A1 11 DF 90 F4 61 DC CD B0 06 AC BD 9D 2A 64 C6 .....a.......*d. 0020: F2 A1 DB 64 86 C8 AE E0 81 B7 51 F3 68 ED 69 B7 ...d......Q.h.i. 0030: 32 52 D9 1A 77 A8 8D 65 EB 2E 31 A6 8C DA 5A F4 2R..w..e..1...Z. 0040: C0 B4 C9 9B C5 6B 3D 63 DB 5B 8D 56 0B 80 56 D2 .....k=c.[.V..V. 0050: 5F B5 90 DA 70 4D 33 BF 8D 72 B4 95 EC 78 4E 44 _...pM3..r...xND 0060: A7 19 04 E6 00 6C 36 99 F1 9E 7B 7D 90 C5 A8 A3 .....l6...{}.... 0070: E2 66 35 55 57 29 47 4F 7B F0 9C F0 C2 9B E9 91 .f5UW)GO{....... 0080: 84 A3 82 EE E0 4D 3C AC 96 49 55 85 F7 C2 D8 60 .....M<..IU....` 0090: 4F 1D C9 F7 14 75 91 91 C3 28 E5 9C 38 1C EC 4C O....u...(..8..L 00a0: F6 BC 47 64 AB CE 53 1C 62 98 20 AB 05 36 FB 17 ..Gd..S.b. ..6.. 00b0: A0 83 BA 4C AD B3 99 B1 75 65 02 BD 73 C5 27 6C ...L....ue..s.'l 00c0: 95 79 97 5A D4 84 C2 51 DB EF DD DD F2 B9 5B E8 .y.Z...Q......[. 00d0: 93 95 B0 74 AA B7 F4 2E 95 F3 9E BE 50 B1 13 3C ...t........P..< 00e0: 16 B1 B6 C3 47 7D 6E F0 14 CE FA 5B 5C AB B6 70 ....G}n....[\..p 00f0: 1E 79 FF 7A FB 5C 39 6F 74 AF 87 5A 79 23 CF 25 .y.z.\9ot..Zy#.% 0100: 2E 5C A9 DF 24 C0 B2 72 AD EB B3 9F 13 BC 94 CB .\..$..r........ 0110: 69 2D CD 9D 3D 97 A1 55 E0 6D 98 31 74 A3 4D 91 i-..=..U.m.1t.M. 0120: 31 6C 25 9A B1 41 DF 3B 88 14 F1 FE 96 85 CB 88 1l%..A.;........ 0130: 77 17 5E D6 62 DB 9A 1B 98 05 48 6A AE 90 D9 2D w.^.b.....Hj...- 0140: 2E 79 4F 57 6B 24 9C F8 55 46 17 2B 42 96 91 C6 .yOWk$..UF.+B... 0150: A7 0F 60 C7 59 CC 16 AC B4 CF 59 22 E4 19 59 5F ..`.Y.....Y"..Y_ 0160: C0 80 57 9A F0 4A BA AA CF 81 E3 F4 D1 B7 A9 CF ..W..J.......... 0170: D6 5A 65 8A 3B 8B F3 AA E3 BC 67 FF C6 13 1C 64 .Ze.;.....g....d 0180: EF CF F7 35 61 C6 C8 E0 1F 8A A4 16 F7 7E C7 E9 ...5a........~.. 0190: 36 A6 5E 95 9F BE E2 27 FE FA E2 3F 2E C8 EB 1F 6.^....'...?.... 01a0: 3E 88 A1 07 17 E5 5B 8F DF FF FA 06 97 71 40 F3 >.....[......q@. 01b0: E4 2B 05 2F 96 7E 54 9A 6E 14 FD DD 7F FF 71 2B .+./.~T.n.....q+ 01c0: 55 0B 3C FF CE 69 BB 72 2E 28 CD E8 4F DF D5 A3 U.<..i.r.(..O... 01d0: 11 64 CC 78 31 67 E9 76 54 EC B6 36 A6 13 9F 77 .d.x1g.vT..6...w 01e0: 38 E8 08 3E 73 BE 59 47 64 A3 44 4F 9F 9D FA 01 8..>s.YGd.DO.... 01f0: 0B 29 BF F9 42 0F 03 F5 E0 FE F7 27 BE 68 60 7B .)..B......'.h`{ 0200: 33 26 83 45 A0 9F 66 BF F8 E2 61 D4 78 3&.E..f...a.x
Dazu gibt es i.d.R. noch eine .INF File. Bei Bedarf kann ich die auch noch hochladen. Mir ist einfach nicht ganz klar, was da für was gut ist. Ich habe nicht so viel Ahnung von Hex Editing, um solche Codes zu erweitern, ohne dass das Game crasht.
EDIT:
Wow 71 Hits und 0 antworten. Ist das Forum tot?
-
Monsieur Sol schrieb:
Oder kurz: Wie kann ich den Hex Code verändern, um neue Sachen einzufügen? Meines Wissens nach, kann ich nur bestehende Werte verändern, ohne die File crashen zu lassen.
Solche Dateien haben interne Indices, d.h. Verweise auf die verschiedenen Inhalte. Wenn du mitten drin was einfügst, müssten alle Verweise danach angepasst werden. Wenn das nicht kommt, gibt es einen Crash.
Vergleiche es mit einem Inhaltsverzeichnis eines Buches. Wenn du mitten drin drei Seiten einfügst, passen die Seitenzahlen im Verzeichnis danach nicht mehr.
Also muss man das Verzeichnis selbst auch ändern.Monsieur Sol schrieb:
1. Ist das möglich?
Klar, mit viel Zeit und/oder Wissen.
Monsieur Sol schrieb:
2. Wie geht das? Wenn möglich für "noobs" beschrieben.
Datei einlesen. Bytes in die Inhalte umwandeln, die damit dargestellt werden.
Änderungen einfügen. Alles wieder in die Datei schreiben.Monsieur Sol schrieb:
3. Wie könnte ich einen eigenen Editor dafür schreiben (welche Bücher müsste ich lesen, was benötige ich dafür)? Ich habe nur einen einfachen Dev Compiler.
Dev Compiler? Was ist das? Etwa DevCpp? Ist uralt und wird nicht mehr weiterentwickelt. Lieber einen anderen nehmen, Code::Blocks oder QtCreator oder VisualStudio Express werden oft empfohlen.
Ansonsten musst du wissen, welches Byte an welcher Stelle in der Datei welche Bedeutung hat. Dann erst kann man das Problem angehen. Der Rest ist dann simples GUI-Programmieren und hat mit dem eigentlichen Problem weniger zu tun...
Wenn du selbst keine/kaum Erfahrung im Programmieren hast, dann wird das eher nichts. Dieses Thema Reverse Engineering http://en.wikipedia.org/wiki/Reverse_engineering#Reverse_engineering_of_software ist definitiv kein Einsteigerthema. Für "noobs" gibt es da leider wenig zu sagen, außer: Such dir ein einfacheres Problem. Man muss einfach eine Menge Erfahrung haben, mit einem Hexeditor bewaffnet die Datei zu untersuchen. Dann ändert man was, startet das Spiel, versucht herauszufinden, was passiert ist, geht zurück in den Editor, ändert was anderes, usw.
In 99% aller Fälle führen die Änderungen auch dann dazu, dass das Spiel crasht. Also braucht man auch eine hohe Frusttoleranz bzw. viel Geduld.
Sonst wird das nichts.Tut mir leid, hier keine aufmunterenden Worte zu haben. Aber als "noob" wirst du hier kaum Erfolg haben...
Schau dir mal das Xentax-Wiki an. Dort gibt es Beschreibungen von verschiedenen Dateiformaten aus verschiedenen Spielen. Hier http://wiki.xentax.com/index.php?title=Battlespire_BSA ist bspw. die Seite, die den Aufbau der BSA-Dateien von Arena erklärt. Das Format ist bspw. total einfach.
Und doch, so vermute ich, wird das für dich nicht so einfach sein, als Einstiegsübung erstmal einen Entpacker zu schreiben. Erst Programmieren lernen, dann kann man viel einfacher und schneller Reverse Engineering betreiben.Monsieur Sol schrieb:
EDIT:
Wow 71 Hits und 0 antworten. Ist das Forum tot?Nö, ist nur eine sehr spezifische Anfrage.
Wäre es dir recht, wenn hier 71x "Habe ich keine Ahnung von" stehen würde?
-
Hey Danke, für die super Tipps!
Du scheinst dich offenbar besstens auszukennen. Danke auch für den Link. Habe mir ein paar Befehle auf der Seite angeschaut und musste feststellen, dass einige(z.B. Math TO, Math D und Next T) in dem C Buch von Jürgen Wolf, welches ich vor einiger Zeit zum Geburtstag geschenkt bekam, überhaupt nicht vorkommen. Wären meine Fähigkeiten ausreichend, wenn ich alleine das Buch durcharbeite, um reverse engeneering zu betreiben? Oder muss ich noch vorher etwas anderes lernen?
reverse engineer schrieb:
EDIT:
Wow 71 Hits und 0 antworten. Ist das Forum tot?Nö, ist nur eine sehr spezifische Anfrage.
Wäre es dir recht, wenn hier 71x "Habe ich keine Ahnung von" stehen würde?[/quote]Ja ok sorry. War halt mein erster Post und ich kannte das Forum noch nicht.
reverse engineer schrieb:
Tut mir leid, hier keine aufmunterenden Worte zu haben. Aber als "noob" wirst du hier kaum Erfolg haben...
Uff! Hatte ich schon fast befürchtet, das die Antwort so ähnlich ausfallen würde. Ich hatte einmal vor langer Zeit ein Tutorial( http://warcraft.ingame.de/forum/showthread.php?t=213326 ) für das Modden von WarCraft 1 verfasst, wo ich auch durch probieren hinter den Hex/Asm Code kam.
Das Problem ist nur, dass TES Arena (siehe Bild: http://www.uesp.net/wiki/File:AR-Map-ImperialDungeons.png ) recht komplexe, nicht zufallsgenerierte Dungeonsysteme aufbauen konnte, was mich zu der Frage führt, wie man ganz ohne Editor, nur mit Hex Codes einen derart genauen Dungeon aufbauen konnte (genau an der richtigen Stelle ein Trigger/eine verschlossene Tür etc.). Bei Warcraft 1 war dies einfacher, da es dort einen Map Editor gab. Bei The Elder Scrolls Arena gibt es den nicht. Nur über die Hex Dateien die Welt zu erstellen ist...mühsam und daher frage ich halt nach entsprechender Literatur, um nicht unnötigen Krempel zu lernen, der mir bei der Lösung des Problemes nicht hilft.
EDIT: Zwei Fragen noch:
1. Wegen der Verweise: Woran erkenne ich die am ehesten/besten? Oder kommt das auf das Programm an?
2. Meintest du mit dem Einlesen der Datei das Ausführen über die jeweilige Exe/kompilieren? Oder gibt es dafür ein Tool, dass ich noch nicht kenne?
-
Monsieur Sol schrieb:
Bei Warcraft 1 war dies einfacher, da es dort einen Map Editor gab. Bei The Elder Scrolls Arena gibt es den nicht.
Es ist eher die Ausnahme, dass Spielerhersteller solche Werkzeuge veröffentlichen. Daraus kannst du nicht folgern, dass die Entwickler das alles in Handarbeit zusammengebaut haben.
-
NNNNNNNEEEEEIIIIIN!!!
Heißt das Bethesda enthält den originalen Arena Editor, der Fangemeinde vor?
Das ist jetz aber ärgerlich, zumal die eigentlich doch durch die Modifizierbarkeit Ihrer Spiele zu so großem Erfolg gelangen konnten.Na gut, wie bastel ich mit den vorhandenen Hex Dateien einen Mapeditor, wie den der Entwickler? Funktioniert das mit diesem Reverse Engennering? Gibt es ein Buch/Tut, wie man das nötige Wissen dazu erlernen kann? Vllt. kann ich auch den Weg für faule gehen und mit dem Game Extractor arbeiten. Wie ich sehe, hat der eine Manipulate Funktion drinne. Die Alternativen riechen nämlich nach mächtig Aufwand. Melde mich nochmal später wieder.
EDIT: Das Tool ist ja der Hammer. Danke nochmals an
reverse engineer, für diesen tollen Tipp
-
Monsieur Sol schrieb:
Hey Danke, für die super Tipps!
Du scheinst dich offenbar besstens auszukennen. Danke auch für den Link. Habe mir ein paar Befehle auf der Seite angeschaut und musste feststellen, dass einige(z.B. Math TO, Math D und Next T) in dem C Buch von Jürgen Wolf, welches ich vor einiger Zeit zum Geburtstag geschenkt bekam, überhaupt nicht vorkommen. Wären meine Fähigkeiten ausreichend, wenn ich alleine das Buch durcharbeite, um reverse engeneering zu betreiben? Oder muss ich noch vorher etwas anderes lernen?
Oha. Zwar ist es schade, ein Geburstagsgeschenk nicht zu würdigen, aber das Buch ist... eher ungeeignet... weil es einen sehr seltsamen Programmierstil beibringt... oder auch nicht.
Absolut nicht zu empfehlen.
Lieber C++ Primer (von S. Lippmann, J. Lajoie) nehmen, der ist definitiv besser.Generell gilt: Reverse Engineering, wie du dir das hier vorstellst, wirst du in keinem Buch lernen. Ein Buch wird dir maximal zeigen, wie bestimmte Dinge in der Programmiersprache gelöst werden sollten. Alles, was darüber hinaus geht, findet man in keinem Buch (Hinweis, auch für andere Leser: Wenn es da was gutes gibt, bitte melden! Habe aber selbst noch keins gesehen).
Die "Befehle" auf der Seite sind übrigens Code aus dem MultiExtractor, nichts, was mit C++ zu tun hat.
Monsieur Sol schrieb:
EDIT: Zwei Fragen noch:
1. Wegen der Verweise: Woran erkenne ich die am ehesten/besten? Oder kommt das auf das Programm an?
Oft steht sowas am Anfang einer Datei. Da sind dann 4er-Byteblöcke, die auf Adressen in der Datei zeigen. Ist aber völlig willkürlich. Manchmal sind das relative Adressen, manchmal absolut, andere sagen, wie oft ein Element vom Typ A kommt, bevor die Elemente vom Typ B kommen,... Da gibt es keine einheitlichen Vorgehensweisen. Daher muss man hier viel rumraten.
Monsieur Sol schrieb:
2. Meintest du mit dem Einlesen der Datei das Ausführen über die jeweilige Exe/kompilieren? Oder gibt es dafür ein Tool, dass ich noch nicht kenne?
Diese Frage verstehe ich, ganz ehrlich, überhaupt nicht. Klar, man sollte für die Veränderung ein Tool programmieren. Aber auch für die Analyse. Ist sehr hilfreich, wenn man schon ein wenig vom Format verstanden hat und sich dann "nur" die noch unbekannten Speicherbereiche anzeigen lässt. Gibt etwas Übersicht.
Macht aber jeder sowieso nach seinem Geschmack...Monsieur Sol schrieb:
NNNNNNNEEEEEIIIIIN!!!
Heißt das Bethesda enthält den originalen Arena Editor, der Fangemeinde vor?
Das ist jetz aber ärgerlich, zumal die eigentlich doch durch die Modifizierbarkeit Ihrer Spiele zu so großem Erfolg gelangen konnten.Warum sollten sie den denn rausgeben? Evtl. ist das eine Reihe von Kommandozeilen-Tools, die Textdateien einlesen und umrechnen. Oder die Tools laufen nur auf einer Plattform. Oder sind furchtbar hässlich und umständlich zu bedienen. Oder voller seltsamer Fehler, die nur für die Entwickler kein Problem sind. Oder oder oder.
Wenn man diese Entwicklertools veröffentlicht, muss man darauf vorbereitet sein, dass jeder Hansel die auch nutzen will. Das ist für den Support eine Katastrophe. Selbst, wenn man keinen Support anbietet, gibt es kein gutes Image. Dann lieber nix veröffentlichen.Monsieur Sol schrieb:
Na gut, wie bastel ich mit den vorhandenen Hex Dateien einen Mapeditor, wie den der Entwickler? Funktioniert das mit diesem Reverse Engennering? Gibt es ein Buch/Tut, wie man das nötige Wissen dazu erlernen kann?
Wenig. Hier auf der Seite ist ein kleiner Einstieg zu sehen, wie man diese Dateiformate auseinander nimmt:
http://en.wikibooks.org/wiki/Reverse_Engineering/File_Formats
Aber denk dabei daran, dass das ungefähr so ist, als ob man die Bibel auf zwei Seiten zusammenfasst => Sehr oberflächlich und für alle, die damit mehr zu tun haben wollen, zu wenig. Aber als Einstieg zum Einlesen schonmal ganz i.O.Monsieur Sol schrieb:
Vllt. kann ich auch den Weg für faule gehen und mit dem Game Extractor arbeiten. Wie ich sehe, hat der eine Manipulate Funktion drinne. Die Alternativen riechen nämlich nach mächtig Aufwand. Melde mich nochmal später wieder.
EDIT: Das Tool ist ja der Hammer. Danke nochmals an
reverse engineer, für diesen tollen TippFreut mich, wenn es dir etwas hilft.
-
Monsieur Sol schrieb:
in dem C Buch von Jürgen Wolf...
Wirf es sofort weg. Der Mensch hat keine Ahnung von garnichts und hat schon so viele Leute ins Verderben gestürzt.
Versuchs lieber hier.
-
Nunja, das Problem ist einfach, dass ich bevor ich mit C++ anfange, ja erst einmal C lernen muss. Egal wie toll C++ Primer auch sein mag, es scheint sich auf C++ zu konzentrieren (trotzdem Danke für den Tipp, werds mir wohl irgendwann zulegen).
Ich habe gestern erfolglos versucht ein paar Hex Dateien zu vertauschen, um zu schauen, was dann passiert. Leider war der Bildschirm dann immer schwarz, sprich Absturz.
http://www.uesp.net/wiki/Arena:Files
Der Game Extractor von reverse engineer ist zwar cool, aber ein voll funktionierender Converter, für die Image und Textdateien, wäre viel noch nützlicher, da der von dem französischen Modder geschaffene nicht richtig funktioniert (und viele andere auch nicht). Doch das ist nur für eventuelle Übersetzungen wichtig, die ich sicher auch irgendwann vornehmen werde.
Doch bevor ich mich mit dem Programmieren beschäftige, wollte ich sicher gehen, dass es keine andere Möglichkeit gibt, die Hex Dateien der .MIF auszulesen und in Karten und/oder Bildinformationen umzuwandeln bzw. einen Mapeditor von dem ich noch nichts weiß. Da das Problem zu anspruchsvoll für die gängigen Foren wäre, habe ich sie gleich hier gestellt.Über die sachbezogenen, konkreten und hilfreichen Antworten, war ich dann doch angenehm überrascht.
Während die Mif Dateien erklären, wo sich was befindet und wo wieviele/welche Trigger auslösen, werden die Info Dateien vermutlich sagen, was sich darin befindet, bzw den getriggerten Text anzeigen:
Info der DEMO file Beispiel:
@FLOORS *BOXCAP 0 floora.set #4 *BOXCAP 1 *CEILING 110 282 floorb.set #2 *BOXCAP 2 floorc.img @WALLS *DOOR 0 door_1.img *DOOR 0 door_2.img *DOOR 0 door_3.img *DOOR 0 door_4.img *DOOR 0 door_5.img *DOOR 0 door_6.img *LEVELDOWN ssd.img *LEVELUP ssu.img *TRANS *DOOR 0 scell.img *DOOR 1 mural1.img *DOOR 1 mural2.img *DOOR 1 mural3.img *BOXCAP 3 *BOXSIDE 0 *DOOR 2 walla.set #5 *BOXCAP 4 *BOXSIDE 1 *DOOR 2 wallb.set #5 *BOXCAP 5 *BOXSIDE 2 *DOOR 2 wallc.set #5 *BOXCAP 6 *BOXSIDE 3 *DOOR 2 walld.set #5 *BOXCAP 7 *BOXSIDE 4 *DOOR 2 walle.set #3 *BOXCAP 8 *BOXSIDE 5 *DOOR 2 wallf.set #4 *BOXCAP 9 *BOXSIDE 6 *DOOR 2 wallg.set #4 *BOXCAP 10 *BOXSIDE 7 *DOOR 2 wallh.set #4 *BOXCAP 11 *BOXSIDE 8 *DOOR 2 wall_d05.img *BOXCAP 12 *BOXSIDE 9 *DOOR 2 wall_d06.img *BOXSIDE 10 *LAVACHASM slava.img *BOXSIDE 11 *WETCHASM swater.img *BOXSIDE 12 *DRYCHASM pit.img @FLATS NOSHOW bagage1.img F:1 brazier.dfa S:3 candle.dfa S:1 nbones1.img flag.img *ITEM 1 key.img ncolumn1.img F:1 *ITEM 2 deadbody.img *ITEM 3 equipmen.img *ITEM 4 treasre1.img *ITEM 5 treasre2.img *ITEM 6 treasre3.img daltar1.dfa S:2 F:1 imaiden.img F:1 coffin1.img F:1 coffin2.img F:1 roots1.img Y:-35 roots2.img Y:-35 roots3.img Y:-35 chains1.img Y:-35 chains2.img Y:-35 rubble.img *ITEM 7 chestc.img *ITEM 8 chesto.img torchpst.dfa S:4 wcolumn1.dfa wcolumn2.dfa vase.img barrel.img books1.img firepit1.dfa S:3 naltar1.img nbarrel.img nfount1d.dfa nfount1m.dfa nfount1t.dfa ngrave1.img ngrave2.img ngrave3.img npost11.img wstatue1.dfa wstatue2.dfa *ITEM 32 rat.dfa *ITEM 33 goblin.dfa *ITEM 34 lizrdman.dfa *ITEM 35 wolf.dfa *ITEM 36 snowwolf.dfa *ITEM 37 orc.dfa *ITEM 38 skeleton.dfa *ITEM 39 ogre.dfa *ITEM 40 spider.dfa *ITEM 41 ghoul.dfa *ITEM 42 hellhoun.dfa *ITEM 43 ghost.dfa *ITEM 44 zombie.dfa *ITEM 45 troll.dfa *ITEM 46 wraith.dfa *ITEM 47 beholder.dfa *ITEM 48 icegolem.dfa *ITEM 49 stonegol.dfa *ITEM 50 irongole.dfa *ITEM 51 firedaem.dfa *ITEM 52 medusa.dfa *ITEM 53 vampire.dfa *ITEM 54 lich.dfa @SOUND arrowfr.voc 2 back1.voc 31 bash.voc 27 birds.voc 24 bodyfall.voc 20 clank.voc 4 clicks.voc 25 closdoor.voc 5 deepchoi.voc 30 dirtl.voc 0 dirtr.voc 1 drip1.voc 16 drip2.voc 17 drums.voc 18 eerie.voc 28 ehit.voc 10 explode.voc 8 grind.voc 14 humeerie.voc 29 lock.voc 21 opendoor.voc 6 portc.voc 15 slowball.voc 7 splash.voc 23 swimming.voc 22 swish.voc 11 uhit.voc 9 wind.voc 19 @TEXT *TEXT 0 Welcome to the Elder Scrolls playable demo! We hope you enjoy yourself in this crypt of the dead. Take care, for all mannner of creatures will seek to stop you from finding the one exit out of this level. Check your inventory first before adventuring further. We wish you luck in this journey... *TEXT 1 A fetid odor washes down the corridor, carrying with it the smell of decayed flesh... *TEXT 2 A hot wind flows through this corridor, and with it you smell the odor of sulphur. Even the floor beneath you seems hot... *TEXT 3 You come upon a fire lake, its red hot surface bubbling and violent. One touch, and you would surely be burned to a crisp... *TEXT 4 Across the pit you see what seems to be an altar of sorts. The body in front of it obviously that of someone who did not take the proper precautions... *TEXT 5 ^100 90 Answer this correctly and the door leading out will unlock. Answer this wrong mortal, and you shall feel death's hand released upon you... - What is neither fish nor flesh, feathers nor bone, yet still has fingers, and thumbs of its own? - What is thy answer? :gauntlets :gauntlet :glove :gloves :a glove :a gauntlet 'CORRECT Thou art wise beyond reckoning. Proceed in peace into the world of Arena... 'WRONG Foolish mortal, pay the price for thy folly...
Sollte noch irgend jemand etwas zu dem Thema wissen, was hier noch nicht genannt wurde, so kann er es ja noch posten. Ich werde mich jetzt erst einmal auf das lernen einer Programmiersprache konzentrieren, damit ich das System hinter dem Game besser verstehe.
-
Monsieur Sol schrieb:
Nunja, das Problem ist einfach, dass ich bevor ich mit C++ anfange, ja erst einmal C lernen muss. Egal wie toll C++ Primer auch sein mag, es scheint sich auf C++ zu konzentrieren (trotzdem Danke für den Tipp, werds mir wohl irgendwann zulegen).
Wie kommst du denn da drauf? Wenn du C++ lernen willst, dann lern unbedingt direkt C++, anstatt deine Zeit zu verschwenden. Wenn du erst C lernst, dann lernst du dabei nichts, was du nicht direkt beim C++-Lernen auch lernen würdest, aber im Gegenteil gewöhnst du dir erst einmal die Denkweise von C an, die eine ganz andere ist als die von C++ und das musst du dir dann erst einmal wieder mühsam abgewöhnen, damit du kein C in C++ machst.
-
Hm, so wie du es beschreibst, klingt es natürlich logischer, gleich mit C++ anzufangen. Danke für diesen Hinweis. Ich werds mir nun nochmal überlegen und vllt. auch doch gleich mit C++ beginnen. Das C++Primer kann man sich ja via Amazon bestellen.
Allerdings kann ich mir nicht vorstellen, dass das Spiel selbst in C++ geschrieben wurde, weil ja noch C89/90 Standard aktuell war. Ach ich glaub, es wär am einfachsten gewesen, wenn Bethesda nachträglich einfach nen Mapping Tool (egal wie schlecht und fehlerhaft) veröffentlicht hätte. So wird wohl wirklich nur der umständliche Weg über büffeln + reverse engineering möglich sein. Allerdings brauch ich dann auch kein Tool dazu schreiben. ICh ahbe vorgestern noch einmal versucht, ein paar Hex Codes zu verändern. Leider stürzte das Game im veränderten Dungeon immer wieder ab. Bis zum Einfügen eigener Trigger und neuer Monster, wird es daher wohl noch etwas dauern.
EDIT: Wäre es theoretisch möglich mit den Informationen der XmXenatx-Seite und Ida Pro den Code zu entschlüsseln?
-
Welche Relevanz hat es für deine reverse engineering versuche, dass das Spiel in C und nicht C++ geschrieben ist?
-
Naja, je nachdem ob ich den Hex Code vielleicht decompilieren könnte, eine entsprechend hohe oder für den Fall, dass dies nicht möglich ist und ich aus dem Hex Code selbst die Lösung basteln müsste, eine entsprechend niedrige Relevanz.
Letzteres wird vermutlich unschaffbar schwer werden, daher fragte ich ja ursprünglich auch, ob es noch eine andere Lösung gäbe z.B. ein Tool, mit dem ich aus dem HEX Code eine Art "Map" erstellt bekomme, wo ich sehen kann, an welcher Position genau die Text Trigger liegen bzw. den Dungeon ummalen könnte und dies automatisch dann in den Hex Code umgeschrieben wird. Das wäre nämlich wesentlich einfacher gewesen, denn wenn ich nun z.B ein neues Objekt einfügen will, muss ich erst wissen wo die Objekte im Hex Code gespeichert sind, wo die Anzahl der Objekte steht, wo die Position des Objekts auf der Map ist und wo der Link zum Speicherplatz des Objektes ist. Das sind eine ganze Menge Punkte. Über eine Art Editor, wäre es 1000x einfacher. Da könnte ich das Objekt/den Trigger einfach an Stelle X setzen, die Info Datei sowie die Golbal upgraden und fertig.
Klar, hier hat niemand den Original Editor, aber vllt. hätte ja jemand einen Editor gekannt, der auch Arena Codes einlesen hätte einlesen können. So fummel ich mir wohl ewig einen ab.
-
Kleine anmerkung dazu:
Reverse Engineering auf Hex-File basis kannst du auch mit PHP/Perl oder einer andere Sprache machen.
Ich habe für Myth 2 schon einmal etwas mit den Maps rumgespielt um die Plugins "vorzuladen".
Das Tools, welches die "Trigger" findet, wäre eine Eierlegende Wollmilchsau.
Wenn ich ein Spiel erstelle steht es mir frei die Daten zu packen wie ich möchte.Im Falle von Maps z.B. so:
0x0 (int) => MapID
0x1 (7bit int) => Identifier für nachfolgende Textlänge
0x2 (string) => "Hell Dungeon lower level"
...
0xY => Mapgröße etc...Dann folgen irgendwann die einzelnen MapInfos, oder vielleicht auch erstmal trigger, oder erstmal die Questtexte usw... das musst du auf JEDEN FALL selber herausfinden wo was liegt, DANN kannst du selber ein Tool schreiben oder jemanden darum bitten.
Das größte Problem ist halt auch herauszufinden ob die Zahl (z.B.)134/0x86 nun für einen Teil der Karte steht, oder ein item was da rumliegt oder einen NPC usw...
Der Editor, den du suchst, muss genau das selbe wissen. Wenn du einen trigger einfügst, muss der Editor im "Seitenverzeichnis des Dateiformats" diesen trigger hinterlegen. Wenn du die Größe der Map änderst, muss er das auch irgendwo in der Datei vermerken, damit mehr Platz für die Map tiles ist etc pp.
Der universalste Editor ist ein HexEditor (wxhexeditor ermöglich es dir labels für offsets zu setzen, damit du dir merken kannst wo was in der binärdatei zu finden ist, ganz praktisch).
Sorry, aber so easy ist das leider echt nicht. Rumprobieren musst du auf jeden Fall, wenn nicht schon jemand anderes Vorarbeit geleistet hat. Ging mir damals mit Ultima Underworld genauso hehe...ätzend!