DFQEdit requires that both the QRC and QBN files of a quest are present in the same directory. If you save a new QRC file DFQEdit will automatically save the QBN file, notifying you if the quest files already exist. Quest file names are also very important as they give information such as which guild, minimum rank etc... In general, the only characters in the quest name which can be safely changed are the last two which are simply a quest index number to differentiate files. DFQEdit will automatically generate the quest file name, except for the last two characters which can be specified when you save.
START-UP
When you first start DFQEdit you should be presented with a colorful
text screen in 80x50 resolution (a standard VGA text mode which permits twice
as much information to be displayed at a time than the normal 80x25 mode).
The top center of the screen displays the current quest loaded, which at
startup should be none, the new quest filename (in red). The new quest
filename is automatically built based on the quest parameters below on the
page. Thus you can save quest with the right name so that Daggerfall can
correctly read the file.
Below this are several lines of quest information telling you various information about the current quest. If you click on the little green arrows you will get a listing of possible values. Changing these values will modify the new quest filename at the top of the screen.
The next section below this is a listing of quest texts. Currently up to 32 different texts can be shown at a time, hopefully many more than you'll ever need (all quests I've seen have had less than 20 different texts). The quest text description, which is not currently 100% accurate, can be clicked to edit that text. To the right of the description is a value 'Yes/No'. This represents if that text section has any text in it currently. The number in brackets to the left of the quest text description represents the hexadecimal text type loaded from the QRC file. It is only useful if you are into determing more of the format for quest files.
At the bottom of the DFQEdit screen are the buttons Load QRC, Save QRC, New QRC, and Exit which should be self-explanatory and are described in more detail below.
LOADING a QRC FILE
To load a QRC file click the LOAD button at the bottom of the screen
(eventually text shortcut keys will be assigned to everything). A new window
will appear on the screen listing files, directories and drives. When DFQEdit
is first started, this list is the current directory but on subsequent saves
and loads it will remember where you left it. Use the mouse, TAB, and cursor
keys to select a directory or QRC file. Wildcards are accepted in the file
name box (default is *.QRC). When a QRC file a wish to edit is found, press
the ENTER key or click the OK button, otherwise ESC or CANCEL will exit the
window. The QRC file should now be loaded. The main DFQEdit screen will be
changed to the new file. Unless you are particularily lucky however, many
of the quest texts will be labled as 'Unknown'. This is because the type of
quest seems to affect how the texts are labelled in the QRC file and the
quest type in the QBN file is not understood. Likewise, the quest type box
at the top of the screen will probably not be correct at the moment either.
I have programmed it to find the closest matched quest type but only a handful
of types are programmed into DFQEdit at the moment (did I mention the quest type in the
QBN file isn't understood?). No worries though, you can still edit 'Unknown'
text types although you'll have edit the text to see what it contains.
SAVING a QRC FILE
Saving a QRC file is much the same as loading. Simply click the SAVE
button and enter a new or existing filename. If the file already exists you
will be asked if you wish to overwrite or not. If you save to a new QRC file
you will need to copy the appropiate QBN file to the new name as well, since
both Daggerfall and DFQEdit require both QRC and QBN files for loading quests.
The new quest filename based on current quest parameters will be the default
filename. All that's needed is to add a two digit index and save.
EDIT QBN/QRC
This is a new button as of version 0.30b. It allows you to change
the editting mode from QBN to QRC and vice-versa. See the sections 'Editting
a QRC' and 'Editting and QBN' for more information on each screen.
NEW QUEST
This simply clears the contents of the window. Will be more useful
when you can create quests from scratch.
ABOUT DFQEdit
This button displays a window listing information about DFQEdit and the
current environment.
EXITING DFQEdit
You can quit DFQEdit by either pressing the EXIT button or by the ESC
key when in the main DFQEdit window. You will be asked if you trully want to
exit but it won't currently tell you of unsaved files.
EDITTING a QRC TEXT
To edit a qrc text simply click on the text description (even if it
says 'Unknown'). This will bring up another window with allowing you to
Edit, Delete, or Cancel. Deleting the text will clear it from memory and the
text section will be omitted if you save the file. This might cause problems
in Daggerfall if it needs that text for the quest (deleting the quest
description and then saving is asking for disastor). If edit is selected you
will be brought to the text editor which looks much like the DOS edit program,
although much simpler (see the TEXT EDITOR MANUAL below for more information).
Here you can edit text, load new text, or save text for later. When you load
or save text, you are loading normal text files, nothing related to the QRC
file. Special quest variables and codes are displayed in different colors.
Help can be found by pressing F1 or ALT-H and the file menu can be activated
by mouse or ALT-F. The text editor's code appears to be quite solid and I
have yet to have it crash, although loading too large a file or binary files
might cause undefined behaviour. When you quit the text editor, any changes
in the text are automatically recorded although you still need to save the
QRC file. If you delete all text by the 'NEW' command, DFQEdit assumes you
don't want the text section and 'turns it off'.
EDITING A QBN
First of I'd like to say that editting the QBN section of a quest
file is not for everyone at the moment. We don't currently completely under-
stand the QBN file format but I've included what sections we do mostly know,
the Item and NPCs. When in the QBN Edit mode you will notice several buttons
on the left-hand side of the screen. These are the various QBN sections
which can be currently editted. Right now these include only Items and NPCs.
The outlined box in the center of the screen represents the current object
data. At the top of the box is a line giving the current object number with
current number loaded and the maximum allowed to be loaded. The object number
can be changed with the 'Prev' and 'Next' buttons at the bottom of the screen
(the 'Add' button is currently disabled at the moment).
The values you can edit will appear as list boxes or text fields. Simply click on the arrow to display lists and click on text fields to edit their contents. The values in light-blue below these are the numerical values of the fields. This is useful in recording a value the fields show as 'Unknown'. If you can identify such a value, please let me know.
Sometimes, if a particular field is not currently well understood, the actual numerical value of the field is displayed. This value is always a decimal, or base 10, value. The title of the field should also contain one of the words, char, int or long to identify the length and allowed values of the field as follows.
char 0-255 int 0-65,536 long 0-4,294,967,295If you input a value greater than the allowed limit it will 'wrap'. For example entering '256' in a char field will result in the value of 0 being displayed and saved. The values are always unsigned so inputting a negative value will also result in 'wrapping'. For example entering -1 in a char field results in the value 255 being displayed.
The input text fields also accept hexadecimal, octal, and binary input as well as decimal as follows
Binary (base 2) Ends with a b, ie: 10001b, 001100101111b, etc... Octal (base 8) Start number with a 0, ie: 056, 01462, etc... Hexadecimal (16) Starts with a 0x, ie: 0xFA45, 0x45, etc...Entering an invalid value in a certain base (such as 0xT6, 12356b, etc...) will result in a 0 being displayed. Please note that even though you may input the number in another base, the value is still displayed as a decimal.
QBN EDITING: ITEMS
The item sections is completely free for one to edit, although we are
not completely sure what all the values do yet. The item types and the item
fields should be self-evident. Usually one should use the 'Item' or 'Gold'
values in the item type field as the 'Artifact' and 'Unknown' values are not
well understood. The item list is loaded from the file ITEMS.DAT in the
DFQEdit directory and can be editted to add more items if you're sure you
follow the correct format (don't get fancy). If you can identify the value
of an unknown item, please let me know as there are currently many I'm
missing.
The item message type usually relates to the message variable used in the QRC texts. Sometimes, however, the number is not related to such a variable, usually when the item represents a letter. If you click on the 'Find Msg' button the program searches through all current QRC texts for any texts which have this message variable. It shows a list of matches which you can then edit/view.
The Message ID #1 field is not well understood but we believe it to represent the text message displayed when the PC receives the item. This is only if the ID is non-zero. Click the 'View Msg' button to view the message if there is one.
The Letter MSG ID field represents the message id displayed when the PC uses an item, such as for a letter. A zero value here implies no message. Click the 'View Msg' button to view the message if there is one.
QBN EDITING: NPC's
The NPC section is still scetchy at best but it's values are useful
for hacking purposes. All but 5 bytes of the NPC field can be edited (the
value1 and value2 fields cannot yet since their purpose is unknown).
The gender field is a guess at best since it usually contains one of
4 values (but mostly one of 3 values).
The gender message type is similar to the item message type described
above. Click the 'Find Msg' Button to search QRC texts for a match to this
variable. It usually relates the NPC to a variable name in the QRC texts.
The two message id fields are also currently unknown at this time. Click the
'View Msg' buttons to view the messages if the value is non-zero.
QBN EDITTING: LOCATION
The location section is still very unknown at the moment so we'll
concentrate on only the location numbers for now.
The general location value places the location of the quest either in the current town (like the kill the rats type quests) or the more common Outside Town type (for dungeons, other towns, etc...). There is a third option which may indicate the quest takes place in the current house/dungeon but this is not verified.
The location type places the quest in a random home, a random dungeon, or a specific place. The specific locations are not yet known at the moment but most of them occur in the main quest files (S*.QBN)
There are many unknown fields here, of which I haven't the foggiest idea what they do...yet. Feel free to test them out if you're brave enough.
Like most sections, the location field also has a message type value.
QBN EDITTING: MONSTERS
The monster section is a small one, with only three editable fields
which are relatively well understood.
The monster index field selects exactly which monster is to appear. A monster can be a non-human monster (rats, orcs, daedra etc...) or a human one (barbarians, assassins, thieves, etc...). The human monsters are not well documented at the moment but feel free to try them out (and let me know what they are).
There is one unknown field with a few limited values. Most of the time the value is '1' here. It may govern the number of monsters appearing but that is merely a guess.
Again, this section has a message type value associated with it.
ALT+F / Mouse - Activate File Menu ALT+Q - Quit Text Editor F1 / ALT+H - This help Screen F2 - Save Text to TXT file (not to QRC!) F3 - Load TXT file CTRL+Y - Delete Current LineSpecial quest variables and codes are displayed in different colors and are explained in the edit help screen (F1 or ALT+H). The text editor's code appears to be quite solid and I have yet to have it crash, although loading to large a file or binary files might cause undefined behaviour. The header at the top of the screen also displays what type of text you are editing (although this is currently quite inaccurate...have I mentioned the quest type in the QBN file is not known?).
The text editor assumes that TAB's in loaded text files are 5 spaces. It saves TABS as spaces and currently doesn't accept the key TAB as input. The editor has many shortcoming in combining lines with deleted or added text since lines are currently limited to 78 characters or less (you can't scroll left or right).
In the DFQEdit's about window (and in the exit messages) there is a line giving the far heap's status. Now, without going into too much technical stuff, the heap is related to the memory available to the program for loading files and for variables (i.e., very important). The status of the heap _should_ return OK at all times. If the heap is corrupted it may result in crashes and data loss in DFQEdit (the heap is corrupted usually by some bug in the program or some option which was overlooked). If, when exiting or checking the About window, the heap status returns corrupted you should immediately exit the program, reboot and send in a bug report. The reboot is probably not nessecary, but better to be safe (during debugging I used to get a corrupt heap every 5 minutes and only rarely did the system lock-up after exiting the program). If you wish to save the current quest, do so in a different file name as it may or may not be corrupted. If the program crashes (or other wierd stuff) when you load it, the save file is corrupt and should be deleted.
Occasionally DFQEdit will not be able to free up all the memory allocated while it was running. This is a less serious bug but still should be reported. Include the difference between initial and final memory.
Peggy S Hanks (df4@juno.com) Lord Phoenix (gozer@esoterica.pt)
This prgram also uses 3rd party keyboard and mouse routines which have saved me much time from writing and debugging them myself.
INT9 (IRQ1) keyboard handler #9 by Patch (hamell@cs.pdx.edu) MOUSE Routines by Michael Chen (mchen@groucho.cs.psu.edu)
For latest version updates of DFQEdit, The ESP: Daggerfall Files
For the Quest Editing Guide, The ESP: Quest Editing Guide
If there's any other sites you think should be included here, feel free to suggest them.
DFQEDIT.EXE ... Main Executable GUILDS.DAT .... Contains listing of guilds/factions MSG.DAT ....... Contains listing of variable names ITEMS.DAT ..... Contains listing of items and their codes MOBS.DAT ...... Listing of known human and non-human monsters SEC41.DAT SEC42.DAT SEC43.DAT ..... Listing of values for the three unknown fields of QBN section 4 SEC71.DAT ..... Listing of values for the unknown field of QBN section 7 LOC.DAT ....... Listing of known locations DFQEDIT.TXT ... Program documentation (this file) DFQFAQ.TXT .... Quest hacking guide Source Code ... Is not included in archive due to size, but is freely available if you want it.
v0.20 Beta
v0.10 Beta
INT9 (IRQ1) keyboard handler #9 by Patch (hamell@cs.pdx.edu) MOUSE Routines by Michael Chen (mchen@groucho.cs.psu.edu)
Also, a number of people have contributed invaluable information concerning the format of quest files. Many thanks go to the following...
Peggy S Hanks (df4@juno.com) - General info Lord Phoenix (gozer@esoterica.pt) - General info Michael P. Schneider (slannesh@pacbell.net) - Much information on the file formats, variable names. Has his own quest editor for any 32bit Windows system (Win32s, Win95, WinNT).
I am in no way connect with BETHESDA, the computer gaming company who created TES: Daggerfall. This is completely a third party hack of the quest files.
All files in the above file list are free domain software and can be copied, duplicated, at will. If you wish to use the source for a project of your own, I would consider it a curteousy to tell me and give credit somewhere.
Variable Description =========== ========================== %cn country %di some direction %g He/She etc... %g1 He/She ??? %g2 Him/Her etc... %g2self Himself/Herself etc... %g3 His/Hers/Theirs etc... %god some god (listed in TEXT.RSC) %jok a joke %kno appears to be a guild name %mn A person's name? %n Quest Giver's Name %nam came up empty for me %nrn seems to be a random name inserted %oth an oath (listed in TEXT.RSC) %pcf character's first name %pcn character's current name %pct character's title in guild %qdt Quest date %ra player's race %reg Current region %rn Regent's Name %rt Regent's Title %t Regent's Title ( again? ) %vam Vampire Name %vcn Vampire's Clan
ITEM Variable ITEM Variable
=============== ===================
_1stparton_ _2myndung_
_agent_ _agentplace_
_agentuk_ _alchemist_
_alchemyshop_ _ally_
_amulet_ _apothecary_
_arena_ _artifact_
_artifact2_ _artifact4_
_assassin_ _aurielsbow_
_aurielshield_ _bank_
_banker_ _betrothed_
_betrothedhome_ _book_
_bookstore_ _bow_
_bribe_ _brother_
_casfort_ _castfort_
_castle_ _chemist_
_child_ _childlocale_
_cleric_ _clothes_
_clothing_ _coastal_
_competitor_ _conhouse_
_contact_ _contact1_
_contact2_ _cousin_
_damsel_ _darkb_
_darkbmember_ _daughter_
_daughterhouse_ _db_
_dbgold_ _dbguild_
_depository_ _destination_
_dirtypit_ _dispatcher_
_drugs_ _duelist_
_dummy_ _enemy_
_evilfocs_ _evilitem_
_fakename_ _fakeplace_
_father_ _finger_
_flowers_ _foil_
_friend1_ _friend2_
_friend3_ _friend4_
_gaffer_ _gem_
_gems_ _giant_
_giver_ _givershouse_
_gold_ _gold1_
_gold2_ _goldgoth_
_guard_ _guard4_
_guardian_ _guildhall_
_healer_ _heist_
_hermit_ _hidingplace_
_home_ _hooker_
_hookerhouse_ _house_
_house2_ _house3_
_hunter_ _informant_
_ingredient_ _inn_
_item_ _item1_
_item1_ _item2_
_item3_ _itemplace_
_jewelry_ _key_
_kidnapper_ _knight_
_lady_ _lessgold_
_local_ _lordsmail_
_love_ _lovechild_
_lover_ _lovgold_
_mage_ _mageguild_
_magesguild_ _magic_
_magicitem_ _magicsword_
_maker_ _man_
_mansion_ _marknpc_
_master_ _meetingplace_
_mensclothing_ _merchant_
_messenger_ _metal_
_mfriend_ _mg_
_mggold_ _missingperson_
_mistresshome_ _mitem_
_mondung_ _money_
_monster_ _murder_
_necs_ _newplace_
_noble_ _noblehouse_
_nobleman_ _npc_
_npc1_ _npc2_
_npc3_ _oblivion_
_orsinium_ _other_
_painting_ _palace_
_patsy_ _pawn_
_pickuplocal_ _pickupregion_
_place_ _poison_
_potion_ _priest_
_prophet_ _prophouse_
_qgenemy_ _qgfriend_
_qgiver_ _qgiverhome_
_queen_ _queenreward_
_questg_ _questgiver_
_rebel_ _relartifact_
_religiousitem_ _religitem_
_replace_ _reward_
_reward2_ _ring_
_ripperhouse_ _rippername_
_rock_ _ruler_
_safehouse_ _sage_
_scarab_ _scholar_
_scholarreward_ _sister_
_sistershouse_ _sleepingmage_
_soldier_ _spouse_
_store_ _storehouse_
_target_ _targethouse_
_tavern_ _teacher_
_temple_ _thief_
_thiefhouse_ _thiefmember_
_thiefplace_ _thievesguild_
_townhouse_ _traitor_
_traitorreward_ _transporter_
_treasure_ _upfront_
_vamp_ _vamp1_
_vamp2_ _vamphouse_
_vampire_ _vampitem_
_vampname_ _vampproof_
_vamprelic_ _vampreward_
_victim_ _victimhouse_
_villager_ _villains_s
_warrior_ _weapon_
_weapons_ _weapons_s
_widow_ _witch_
_withouse_ _witness_
_wizard_ _womensclothing_
_woodsman_
__agentplace_ __alchemyshop_
__arena_ __bank_
__banker_ __betrothedhome_
__castfort_ __castle_
__chemist_ __childhouse_
__childlocale_ __competitor_
__conhouse_ __contact_
__contact1_ __contact2_
__darkb_ __daughterhouse_
__db_ __dbguild_
__depository_ __destination_
__dirtypit_ __dispatcher_
__dungeon_ __gaffer_
__giver_ __guard_
__hidingplace_ __home_
__hooker_ __house_
__house2_ __house3_
__informant_ __inn_
__itemdung_ __kidnapper_
__knight_ __local_
__lovehouse_ __lover_
__mageguild_ __magesguild_
__mansion_ __master_
__meetingplace_ __merchant_
__mg_ __missingperson_
__mondung_ __newplace_
__noblehouse_ __npc1_
__npc2_ __oblivion_
__oracletemple_ __palace_
__patsagent_ __pawn_
__priest_ __qgfriend_
__qgiver_ __questgiver_
__rebelhouse_ __safehouse_
__sage_ __school_
__shop_ __sistershouse_
__store_ __target_
__targethouse_ __tavern_
__temple_ __thiefplace_
__thievesguild_ __traitor_
__tranporter_ __vamp_
__vamp2_ __vamphouse_
__vampire_ __widow_
__witch_ __witness_
___agent_ ___alchemist_
___ally_ ___apothecary_
___bowdung_ ___casfort_
___chemist_ ___competitor_
___contact_ ___contact1_
___contact2_ ___contactdung_
___cousin_ ___crypt_
___darkb_ ___darkbmember_
___db_ ___dispatcher_
___dummy_ ___dungeon_
___dungeon1_ ___dungeon2_
___dungeon3_ ___father_
___fatherdung_ ___gaffer_
___giver_ ___guard_
___guardian_ ___healer_
___hideout_ ___hintdung_
___hooker_ ___house2_
___informant_ ___itemdung_
___kidnapper_ ___knight_
___local_ ___lover_
___maker_ ___mapdung_
___merchant_ ___mfriend_
___mg_ ___mondun_
___mondung_ ___mondung2_
___myndung_ ___newdung_
___noble_ ___npc1_
___npc2_ ___oblivion_
___orsinium_ ___other_
___patsagent_ ___pickuplocal_
___pickupregion_ ___priest_
___qgfriend_ ___qgiver_
___questg_ ___questgiver_
___ringdung_ ___ruler_
___sage_ ___scholar_
___scholardung_ ___sleepingmage_
___spouse_ ___stronghold_
___thief_ ___thiefmember_
___traitor_ ___ukcrypt_
___vamp_ ___vamp2_
___vampire_ ___villager_
___witch_ ___witness_
___woodsman_ ___wrongdung_
____dungeon_ ____newplace_
____tavern_ ____temple_
Variable Variable
=============== ===============
==daedra_ ==dummydaedra_
==other_ ==priest_
==qgiver_ ==questgiver_
==vampire_ =1stparton_
=2dagger_ =2dung_
=2mondung_ =2myndung_
=2ndparton_ =2palace_
=2ransom_ =2shedungent_
=2storehouse_ =acolyte_
=assassin_ =atronach_
=bloodfather_ =bodyguard_
=boss_ =chemist_
=child_ =cleric_
=competior_ =contact_
=contact2_ =cousin_
=daedra_ =daedroth_
=db_ =decoy_
=elder_ =enemy_
=executiondelay_ =fighter_
=finddaughter_ =firedaedra_
=gettraitor_ =giant_
=guard_ =guardian_
=guards_ =hooker_
=huntstart_ =itemindung_
=keytime_ =kidnapper_
=knight_ =lich_
=lover_ =mage_
=mage1_ =mage2_
=mage3_ =mage4_
=man_ =merchant_
=mmaster_ =monster_
=monster_ =monster1_
=mummy_ =noble_
=npc1_ =npc2_
=orc_ =other_
=pawn_ =posse_
=priest_ =prophet_
=qgfriend_ =qgiver_
=qtime_ =questgiver_
=queston_ =queston1_
=queston2_ =questtime_
=realmummy_ =replace_
=reward_ =scholar_
=sneaker_ =snitch_
=soldier_ =spy_
=target_ =thief_
=thug_ =tiger_
=time1_ =time2_
=timeforq_ =total_
=towertime_ =transporter_
=traveltime_ =vamp_
=vamp2_ =vampire_
=vampleader_ =vamprival_
=victim_ =wereboar_
=widow_ =witch_
=witness_
GUILDS.DAT MSG.DAT ITEMS.DAT MOBS.DAT SEC41.DAT SEC42.DAT SEC43.DAT SEC71.DATThese files contain data for the various lists used in the program such as guild names and monsters. Having these values contained in files make the program much more flexible and it is easier to change any value(s) in these files. It is possible for one to modify these files to reflect any new information obtained through editting quest files or by any other means. For instance, through many hours of quest editting you figure out that the Giant Rat and Giant Bat in the MOB.DAT file are switched. You could edit the file (with any text editor) to swap these values. If you do come across errors or any additions for these files, make sure to let me know (aj589@freenet.carleton.ca)
DUAL LIST FILE FORMAT
All data files except MSG.DAT are of the dual format. These files
contain a number followed by a text description on one line.
Example: 1043 Does Wierd StuffThe number may be of binary (1001b), octal (0174), or hexadecimal (0x5Fa) as well as the usual decimal values. Each line of the data file contains exactly one record and the data is read until the end-of-file, there are no comment type characters. If after modifying one of these files the program unexpectingly crashes or the list outputs strange data, you probably made a mistake (I guess it's too late to mention back-ups...)
SINGLE LIST FILE FORMAT
At the moment, only the file MSG.DAT uses this format. In this format
each line represents one list item. Again, there are no comment characters
and the entire file is read.