summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Pouzenc <lpouzenc@gmail.com>2013-09-07 19:44:41 +0200
committerLudovic Pouzenc <lpouzenc@gmail.com>2013-09-07 19:44:41 +0200
commit0685898c7b73c0cd1422535a5fb5660e15b56f28 (patch)
tree2a63a8f0ad9d5beea5dcdf1b3b3ab847b073883d
parente36d15da613aae1a0bd6245b8cc23c3ac5ebf95f (diff)
downloadmplemmings-0685898c7b73c0cd1422535a5fb5660e15b56f28.tar.gz
mplemmings-0685898c7b73c0cd1422535a5fb5660e15b56f28.tar.bz2
mplemmings-0685898c7b73c0cd1422535a5fb5660e15b56f28.zip
Ajout du makefile perdu, + quelques ajustements pour que ça compile et que ça soit clean
-rw-r--r--.gitignore27
-rw-r--r--reverse-engineering/dosbox_snif/Makefile33
-rw-r--r--reverse-engineering/dosbox_snif/dos_lemm.h59
-rw-r--r--reverse-engineering/dosbox_snif/main_dump_delta.c46
4 files changed, 103 insertions, 62 deletions
diff --git a/.gitignore b/.gitignore
index 4f95be9..742a6cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,19 +16,20 @@ stamp-h1
.dirstamp
# Project executables
-mplemmings
-mplemmings_ds
-sbmoose
-sbsprite
-sbspritegif
-testparseall
-testrender
-testplay
-src/dosbox_snif/dump
-src/dosbox_snif/dump_delta
-src/dosbox_snif/dump_ds0
-src/dosbox_snif/int16todec
-src/dosbox_snif/poke
+/mplemmings
+/mplemmings_ds
+/sbmoose
+/sbsprite
+/sbspritegif
+/testparseall
+/testrender
+/testplay
+/reverse-engineering/dosbox_snif/dump
+/reverse-engineering/dosbox_snif/dump_delta
+/reverse-engineering/dosbox_snif/dump_ds0
+/reverse-engineering/dosbox_snif/validate_codeœ
+/reverse-engineering/dosbox_snif/int16todec
+/reverse-engineering/dosbox_snif/poke
# Temporaries and build objects
diff --git a/reverse-engineering/dosbox_snif/Makefile b/reverse-engineering/dosbox_snif/Makefile
new file mode 100644
index 0000000..937465b
--- /dev/null
+++ b/reverse-engineering/dosbox_snif/Makefile
@@ -0,0 +1,33 @@
+CFLAGS=-Wall -g -O2
+LDFLAGS=
+
+OBJS=rsp.o utils.o rsp_lemm.o
+EXE=dump dump_ds0 dump_delta validate_code poke int16todec
+
+all: $(EXE)
+
+dump: main_dump.o $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+dump_ds0: main_dump_ds0.o $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+dump_delta: main_dump_delta.o $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+poke: main_poke.o $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+validate_code: main_validate_code.o $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+int16todec: int16todec.o
+ $(CC) $(LDFLAGS) -o $@ $^
+
+%.o: %.c
+ $(CC) -c $(CFLAGS) -o $@ $^
+
+clean:
+ rm $(OBJS) main_*.o $(EXE) || true
+
+.PHONY: all clean
diff --git a/reverse-engineering/dosbox_snif/dos_lemm.h b/reverse-engineering/dosbox_snif/dos_lemm.h
index f6c7c95..af07f61 100644
--- a/reverse-engineering/dosbox_snif/dos_lemm.h
+++ b/reverse-engineering/dosbox_snif/dos_lemm.h
@@ -1,6 +1,7 @@
#ifndef _DOS_LEMM_H
#define _DOS_LEMM_H
+#include <stdint.h>
struct _state {
uint8_t s_splatting:1; //0x01
@@ -59,9 +60,9 @@ union flags1 {
};
enum flags1_masks {
- fl1_cap_climber = 0x01;
- fl1_walk_pause_for_shruggling = 0x80;
-}
+ fl1_cap_climber = 0x01,
+ fl1_walk_pause_for_shruggling = 0x80
+};
struct _lemm_data {
/* First lemm is at ds:si == 0b55:0085 */
@@ -70,15 +71,15 @@ struct _lemm_data {
int16_t x_spr_offset; //0x4 - 0x5
int16_t y_spr_offset; //0x6 - 0x7
union state state; //0x8 - 0x9
- uint8_t b_10,b_11;
+ uint8_t unk1[0x2];
uint16_t spr_data_ptr; //0xc - 0xd
uint8_t floattime_dble; //0xe
- uint8_t b_15,b_16,b_17,b_18,b_19;
+ uint8_t unk2[0x5];
uint16_t ptr2; //0x14 - 0x15
- uint8_t b_22,b_23,b_24,b_25,b_26,b_27,b_28,b_29,b_30,b_31;
+ uint8_t unk3[0xa];
uint8_t expl_countdown; //0x20
uint8_t steps_remain; //0x21
- uint8_t b_34;
+ uint8_t unk4;
uint8_t falldist; //0x23
union flags1 flags1; //0x24
uint8_t cap_floater; //0x25
@@ -86,7 +87,7 @@ struct _lemm_data {
int8_t direction; //0x27
uint8_t spr_frame; //0x28
uint8_t draw_hint; //0x29
- uint8_t b_42,b_43,b_44;
+ uint8_t unk5[0x3];
} __attribute__ ((__packed__));
union lemm_data {
@@ -100,32 +101,32 @@ enum draw_hint {
};
struct _avail_skills {
- uint8 sk_climber, sk_climber2, sk_climber_tag; // [0x67]
- uint8 sk_floater, sk_floater2, sk_floater_tag; // [0x6a]
- uint8 sk_bomber, sk_bomber2, sk_bomber_tag; // [0x6d]
- uint8 sk_blocker, sk_blocker2, sk_blocker_tag; // [0x70]
- uint8 sk_builder, sk_builder2, sk_builder_tag; // [0x73]
- uint8 sk_basher, sk_basher2, sk_basher_tag; // [0x76]
- uint8 sk_miner, sk_miner2, sk_miner_tag; // [0x79]
- uint8 sk_digger, sk_digger2, sk_digger_tag; // [0x7c]
+ uint8_t sk_climber, sk_climber2, sk_climber_tag; // [0x67]
+ uint8_t sk_floater, sk_floater2, sk_floater_tag; // [0x6a]
+ uint8_t sk_bomber, sk_bomber2, sk_bomber_tag ; // [0x6d]
+ uint8_t sk_blocker, sk_blocker2, sk_blocker_tag; // [0x70]
+ uint8_t sk_builder, sk_builder2, sk_builder_tag; // [0x73]
+ uint8_t sk_basher, sk_basher2, sk_basher_tag; // [0x76]
+ uint8_t sk_miner, sk_miner2, sk_miner_tag; // [0x79]
+ uint8_t sk_digger, sk_digger2, sk_digger_tag; // [0x7c]
} __attribute__ ((__packed__));
struct game_data {
/* ds == 0x0b55 */
- uint8 unk1[0x27]; // TODO
- uint8 paused; // [0x28]
- uint8 unk2[0x10]; // TODO
- uint8 lemm_count_to_process; // [0x39]
- uint8 lemm_spawned_count; // [0x40]
- uint8 unk3; // TODO
- uint8 lemm_out_count; // [0x42]
- uint8 unk4; // TODO
- uint8 lemm_level_count; // [0x44]
- uint8 next_spawn_ticks; // [0x45]
- uint8 spawn_rate_ticks; // [0x46]
- uint8 unk5[0x20]; // TODO
+ uint8_t unk1[0x27]; // TODO
+ uint8_t paused; // [0x28]
+ uint8_t unk2[0x10]; // TODO
+ uint8_t lemm_count_to_process; // [0x39]
+ uint8_t lemm_spawned_count; // [0x40]
+ uint8_t unk3; // TODO
+ uint8_t lemm_out_count; // [0x42]
+ uint8_t unk4; // TODO
+ uint8_t lemm_level_count; // [0x44]
+ uint8_t next_spawn_ticks; // [0x45]
+ uint8_t spawn_rate_ticks; // [0x46]
+ uint8_t unk5[0x20]; // TODO
struct _avail_skills avail_skills; // [0x67] - [0x7e]
- uint8 unk6[0x06]; // TODO
+ uint8_t unk6[0x06]; // TODO
struct _lemm_data lemmings[100]; // [0x85]
} __attribute__ ((__packed__));
diff --git a/reverse-engineering/dosbox_snif/main_dump_delta.c b/reverse-engineering/dosbox_snif/main_dump_delta.c
index 8db3671..87878f4 100644
--- a/reverse-engineering/dosbox_snif/main_dump_delta.c
+++ b/reverse-engineering/dosbox_snif/main_dump_delta.c
@@ -27,22 +27,22 @@ int main(int argc, char *argv[]) {
strcpy(draw_hint_str[hint_mining], "hint_mining");
strcpy(draw_hint_str[hint_bashing], "hint_bashing");
- strcpy(state_str[s_splatting],"s_splatting");
- strcpy(state_str[s_exploding],"s_exploding");
- strcpy(state_str[s_falling],"s_falling");
- strcpy(state_str[s_ascending],"s_ascending");
- strcpy(state_str[s_digging],"s_digging");
- strcpy(state_str[s_climbing],"s_climbing");
- strcpy(state_str[s_climb_ending],"s_climb_ending");
- strcpy(state_str[s_building],"s_building");
- strcpy(state_str[s_blocking],"s_blocking");
- strcpy(state_str[s_bashing],"s_bashing");
- strcpy(state_str[s_floating],"s_floating");
- strcpy(state_str[s_mining],"s_mining");
- strcpy(state_str[s_drawning],"s_drawning");
- strcpy(state_str[s_ending],"s_ending");
- strcpy(state_str[s_dying],"s_dying");
- strcpy(state_str[s_exploding2],"s_exploding2");
+ strcpy(state_str[0],"s_splatting");
+ strcpy(state_str[1],"s_exploding");
+ strcpy(state_str[2],"s_falling");
+ strcpy(state_str[3],"s_ascending");
+ strcpy(state_str[4],"s_digging");
+ strcpy(state_str[5],"s_climbing");
+ strcpy(state_str[6],"s_climb_ending");
+ strcpy(state_str[7],"s_building");
+ strcpy(state_str[8],"s_blocking");
+ strcpy(state_str[9],"s_bashing");
+ strcpy(state_str[10],"s_floating");
+ strcpy(state_str[11],"s_mining");
+ strcpy(state_str[12],"s_drawning");
+ strcpy(state_str[13],"s_ending");
+ strcpy(state_str[14],"s_dying");
+ strcpy(state_str[15],"s_exploding2");
rv=rsp_lemm_init(&rsp, ds_si);
if ( rv != 0 ) {
@@ -150,10 +150,16 @@ int main(int argc, char *argv[]) {
printf("falldist\t%02x -> %02x\n",prevlemm.s.falldist, lemm.s.falldist);
break;
case 0x24: //flags1
- if ( prevlemm.s.flags1.bf.cap_climber != lemm.s.flags1.bf.cap_climber ) {
- printf("cap_climber\t%2i -> %2i\n", prevlemm.s.flags1.bf.cap_climber, lemm.s.flags1.bf.cap_climber);
- } else if ( prevlemm.s.flags1.bf.walk_pause_for_shruggling != lemm.s.flags1.bf.walk_pause_for_shruggling ) {
- printf("walk_pause_for_shruggling\t%2i -> %2i\n", prevlemm.s.flags1.bf.walk_pause_for_shruggling, lemm.s.flags1.bf.walk_pause_for_shruggling);
+ if ( prevlemm.s.flags1.bits.fl1_cap_climber != lemm.s.flags1.bits.fl1_cap_climber ) {
+ printf("cap_climber\t%2i -> %2i\n",
+ prevlemm.s.flags1.bits.fl1_cap_climber,
+ lemm.s.flags1.bits.fl1_cap_climber
+ );
+ } else if ( prevlemm.s.flags1.bits.fl1_walk_pause_for_shruggling != lemm.s.flags1.bits.fl1_walk_pause_for_shruggling ) {
+ printf("walk_pause_for_shruggling\t%2i -> %2i\n",
+ prevlemm.s.flags1.bits.fl1_walk_pause_for_shruggling,
+ lemm.s.flags1.bits.fl1_walk_pause_for_shruggling
+ );
} else {
printf("flags1.unknown\t%02x -> %02x\n",prevlemm.s.flags1.raw, lemm.s.flags1.raw);
}