From d2b34da108fae24c9c70ab00aa261cc9648018c3 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 5 Oct 2006 22:12:22 +0000 Subject: Dehacked information checksum generation Subversion-branch: /trunk/chocolate-doom Subversion-revision: 687 --- src/Makefile.am | 2 ++ src/deh_ammo.c | 14 +++++++++++++- src/deh_cheat.c | 3 ++- src/deh_defs.h | 9 ++++++++- src/deh_frame.c | 13 ++++++++++++- src/deh_main.c | 20 +++++++++++++++++++- src/deh_main.h | 4 +++- src/deh_mapping.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- src/deh_mapping.h | 5 ++++- src/deh_misc.c | 13 ++++++++++++- src/deh_ptr.c | 28 +++++++++++++++++++++++++++- src/deh_sound.c | 3 ++- src/deh_text.c | 3 ++- src/deh_thing.c | 13 ++++++++++++- src/deh_weapon.c | 13 ++++++++++++- 15 files changed, 174 insertions(+), 17 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index f2a635e6..06839d71 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -71,6 +71,7 @@ m_cheat.c m_cheat.h \ m_fixed.c m_fixed.h \ m_menu.c m_menu.h \ m_misc.c m_misc.h \ +md5.c md5.h \ memio.c memio.h \ mus2mid.c mus2mid.h \ m_random.c m_random.h \ @@ -125,6 +126,7 @@ st_stuff.c st_stuff.h \ tables.c tables.h \ v_video.c v_video.h \ wi_stuff.c wi_stuff.h \ +w_checksum.c w_checksum.h \ w_merge.c w_merge.h \ w_wad.c w_wad.h \ z_zone.c z_zone.h diff --git a/src/deh_ammo.c b/src/deh_ammo.c index 7709894f..a6ecf52c 100644 --- a/src/deh_ammo.c +++ b/src/deh_ammo.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: deh_ammo.c 175 2005-10-08 20:54:16Z fraggle $ +// $Id: deh_ammo.c 687 2006-10-05 22:12:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -106,6 +106,17 @@ static void DEH_AmmoParseLine(deh_context_t *context, char *line, void *tag) } } +static void DEH_AmmoMD5Hash(md5_context_t *context) +{ + int i; + + for (i=0; imd5_hash != NULL) + { + section_types[i]->md5_hash(&md5_context); + } + } + + MD5_Final(digest, &md5_context); +} + // Called on startup to call the Init functions static void InitialiseSections(void) diff --git a/src/deh_main.h b/src/deh_main.h index 982bb14c..ef3a51dc 100644 --- a/src/deh_main.h +++ b/src/deh_main.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: deh_main.h 214 2005-10-17 23:48:05Z fraggle $ +// $Id: deh_main.h 687 2006-10-05 22:12:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -51,6 +51,8 @@ void DEH_Init(void); boolean DEH_ParseAssignment(char *line, char **variable_name, char **value); +void DEH_Checksum(byte digest[16]); + // deh_text.c: // // Used to do dehacked text substitutions throughout the program diff --git a/src/deh_mapping.c b/src/deh_mapping.c index 04316f0f..a8e242d7 100644 --- a/src/deh_mapping.c +++ b/src/deh_mapping.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: deh_mapping.c 175 2005-10-08 20:54:16Z fraggle $ +// $Id: deh_mapping.c 687 2006-10-05 22:12:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -44,6 +44,7 @@ #include #include +#include "i_system.h" #include "deh_mapping.h" // @@ -85,9 +86,6 @@ boolean DEH_SetMapping(deh_context_t *context, deh_mapping_t *mapping, case 4: * ((unsigned int *) location) = value; break; - case 8: - * ((unsigned long long *) location) = value; - break; default: DEH_Error(context, "Unknown field type for '%s' (BUG)", name); return false; @@ -104,3 +102,45 @@ boolean DEH_SetMapping(deh_context_t *context, deh_mapping_t *mapping, return false; } +void DEH_StructMD5Sum(md5_context_t *context, deh_mapping_t *mapping, + void *structptr) +{ + int i; + + // Go through each mapping + + for (i=0; mapping->entries[i].name != NULL; ++i) + { + deh_mapping_entry_t *entry = &mapping->entries[i]; + void *location; + + if (entry->location == NULL) + { + // Unsupported field + + continue; + } + + // Add in data for this field + + location = structptr + (entry->location - mapping->base); + + switch (entry->size) + { + case 1: + MD5_UpdateInt32(context, *((unsigned char *) location)); + break; + case 2: + MD5_UpdateInt32(context, *((unsigned short *) location)); + break; + case 4: + MD5_UpdateInt32(context, *((unsigned int *) location)); + break; + default: + I_Error("Unknown dehacked mapping field type for '%s' (BUG)", + entry->name); + break; + } + } +} + diff --git a/src/deh_mapping.h b/src/deh_mapping.h index e3521e40..6644ba46 100644 --- a/src/deh_mapping.h +++ b/src/deh_mapping.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: deh_mapping.h 420 2006-03-15 18:53:06Z fraggle $ +// $Id: deh_mapping.h 687 2006-10-05 22:12:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -45,6 +45,7 @@ #include "doomtype.h" #include "deh_io.h" +#include "md5.h" #define DEH_BEGIN_MAPPING(mapping_name, structname) \ static structname deh_mapping_base; \ @@ -96,6 +97,8 @@ struct deh_mapping_s boolean DEH_SetMapping(deh_context_t *context, deh_mapping_t *mapping, void *structptr, char *name, int value); +void DEH_StructMD5Sum(md5_context_t *context, deh_mapping_t *mapping, + void *structptr); #endif /* #ifndef DEH_MAPPING_H */ diff --git a/src/deh_misc.c b/src/deh_misc.c index b89ad429..a00057ff 100644 --- a/src/deh_misc.c +++ b/src/deh_misc.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: deh_misc.c 641 2006-09-21 11:13:28Z rtc_marine $ +// $Id: deh_misc.c 687 2006-10-05 22:12:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -253,6 +253,16 @@ static void DEH_MiscParseLine(deh_context_t *context, char *line, void *tag) DEH_Warning(context, "Unknown Misc variable '%s'", variable_name); } +static void DEH_MiscMD5Sum(md5_context_t *context) +{ + int i; + + for (i=0; i