From 0685898c7b73c0cd1422535a5fb5660e15b56f28 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sat, 7 Sep 2013 19:44:41 +0200 Subject: Ajout du makefile perdu, + quelques ajustements pour que ça compile et que ça soit clean MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 27 ++++++----- reverse-engineering/dosbox_snif/Makefile | 33 +++++++++++++ reverse-engineering/dosbox_snif/dos_lemm.h | 59 ++++++++++++----------- reverse-engineering/dosbox_snif/main_dump_delta.c | 46 ++++++++++-------- 4 files changed, 103 insertions(+), 62 deletions(-) create mode 100644 reverse-engineering/dosbox_snif/Makefile 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 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); } -- cgit v1.2.3