First-person roleplaying game, based on White Wolf's popular Vampire: The Masquerade pen-and-paper RPG. Vampire: The Masquerade - Bloodlines combines intense first-person action with an open, non-linear world, rich character development and an immersive storyline. The game plunges players into the dark and gritty vampire underworld of modern day L.A. as a creature of the night, interacting with and battling mortals and other creatures of darkness with an incredible array of vampire powers, skills and traits. Developed by Troika, Vampire: The Masquerade - Bloodlines runs on Valve Source Technology - the same game engine technology that powers Half-Life 2.

Post tutorial Report RSS How to change clans, part 6

Part 6: using WinMerge to extract data from other mods

Posted by on - Intermediate Starting a mod

Important note: if you pick something from any mod remember to ask permission for it. (Antitribu stated in its readme anyone can take anything from it, but with other mods it may be different....)

Extracting stuff from major mods can be really tough, unless we use some wits. Comparing the mod to the Unofficial Patch used as base, with a dedicated tool, it's possible to visualize the differences between them in an easy way, then we can copy the text parts and paste them in our mod.

As reference these mods are built on top of:
- Companion Mod -> UP 5.6
- Camarilla Edition -> UP 8.5
- The Final Nights -> UP 6.5
- Clan Quest -> UP 9.2
- Antitribu -> Companion Mod

So we want to compare Antitribu and Companion Mod.

Install WinMerge (if you haven't already), then install the Antitribu and Companion (the original one) mods in separate folders. Make sure you have handy the folder called "Antitribu_Mod" (generated by the Antitribu installer) and the one called "vampire" (from the Companion mod archive, you can also rename it something like "CompMod"). Each of these need to have inside folders called "cfg", "dlg", "maps" etc.

Speaking of the "maps" folder, open the Mod Launcher, select the Bloodlines SDK, then open the "VTMBedit Tool". Go to the "BSP" menù, click on "Export Map Entities". Find the "maps" folder inside "Antitribu_Mod" and click on "OK". Close the program, reopen it and redo the whole operation with the "maps" folder of the Companion mod. Close the program, reopen it and redo the operation with the maps of our mod. This procedure will export all the maps' entities in convenient .txt files which we can easily reimport later.

Returning at WinMerge, open it then select the "Antitribu_Mod" folder and the one of the Companion mod, drag them into WinMerge. If everything is done accurately this is the result:

et voil

Now comes a long and tedious part, but it will bring many satisfactions. Open each folder, open each file and learn how the mod is built. You need to understand (for our case) all the stuff related to the Lasombra, Tzimisce and their disciplines.

For an example open "maps" > "entities" > "ch_cloud_1.bsp.txt" and you should see this (in case press CTRL+D to switch between viewing modes):

ev2

We can see the Antitribu mod made these modifications to the map:
- Ox (the quest giver in the small shop in Chinatown) will explode if you'll attack him)
- a compability line about the wearable objects (present in most of the maps)
- this wall of text (present in most of the maps)

{
"classname" "logic_timer"
"StartDisabled" "0"
"UseRandomTime" "0"
"RefireTime" "1.0"
"OnTimer" ",,,0,-1,PcSuit(),"
"origin" "0 0 0"
}
{
"classname" "npc_maker"
"targetname" "koldunic_helper"
"origin" "140 450 0"
"angles" "0 0 0"
"health" "100"
"NPCTargetname" "koldunic_npc1"
"NPCSquadname" "koldunic"
"NPCType" "npc_VPedestrian"
"stattemplate" "Human"
"MaxNPCCount" "100"
"MaxLiveChildren" "100"
"SpawnFrequency" "5"
"Flag_StartDisabled" "1"
"Flag_NPCClip" "0"
"Flag_Fade" "0"
"Flag_InfChild" "0"
"Flag_NoDrop" "1"
"npc_transparent" "1"
"npc_perception" "0"
"vision" "-1"
"hearing" "-1"
"renderfx" "0"
"rendermode" "0"
"renderamt" "255"
"rendercolor" "255 255 255"
"disableshadows" "1"
"disablereceiveshadows" "0"
"interesting_place_groups" "0"
"physdamagescale" "1.0"
"default_disposition" "Neutral"
"default_camera" "DialogDefault"
"model" "models/character/monster/undead/undead_male_sceleton.mdl"
"demo_sequence" "None"
"skin" "0"
"skincolor" "0 0 0 0"
"haircolor" "0 0 0 0"
"clothescolor1" "0 0 0 0"
"clothescolor2" "0 0 0 0"
"trimcolor" "0 0 0 0"
"player_reaction" "D_NU 0"
"use_interesting" "0"
"investigate_mode" "4"
"bright_route_penalty" "0"
"pl_investigate" "6"
"pl_criminal_flee" "6"
"pl_criminal_attack" "6"
"pl_supernatural_flee" "6"
"pl_supernatural_attack" "6"
"spawnflags" "4"
"StartHidden" "0"
"percent_occluded_wait" "10"
"percent_occluded_cover" "30"
"percent_occluded_walk" "10"
"percent_occluded_flank" "20"
"percent_occluded_chase" "30"
"investigate_mode_combat" "4"
"floatfreq" "0"
"allow_kick_hint_use" "1"
"hint_groups" "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32"
"crossfade_skin_time" "2.0"
"combat_start_activity" "-1"
"follower_type" "Default"
"crossfade_skin_time" "2.0"
"invincible" "1"
"interesting_place_groups" "0"
"full_investigate" "0"
"allow_alert_lookaround" "1"
"stay_entrenched" "0"
"teleport_move_timer" "0"
"cantdropweapons" "1"
"follower_type" "Default"
"dialogname" "dlg/antitribu/koldunism.dlg"
"no_alert_state" "1"
}
{
"classname" "point_explosion"
"targetname" "yukie_point_explosion"
"explosion_params" "yukie_explode_params"
"angles" "0 0 0"
"origin" "0 0 0"
}
{
"classname" "params_explosion"
"targetname" "yukie_explode_params"
"angles" "0 0 0"
"dl_color" "255 128 64"
"dl_radius" "1600"
"dl_time" "2"
"dl_decay" "10"
"dl_exponent" "1"
"dmg_amount" "375"
"dmg_radius" "1024"
"damage_players" "1"
"damage_npcs" "1"
"damage_breakables" "1"
"shk_amp" "4"
"shk_freq" "2"
"shk_dur" "2"
"shk_radius" "1600"
"shk_inair" "1"
"particle" "particles/grenade_concussion_emitter.txt"
"snd_name" "Weapons/Ranged/Detonation.wav"
"snd_dist" "1280"
"snd_pitch_min" "105"
"snd_pitch_max" "125"
"spawnflags" "46"
"origin" "0 0 0"
}
{
"classname" "point_explosion"
"angles" "0 0 0"
"targetname" "AuraOfDecay"
"explosion_params" "AuraOfDecay_params"
"origin" "0 0 0"
}
{
"classname" "params_explosion"
"angles" "0 0 0"
"dl_color" "120 196 252"
"dl_radius" "512"
"dl_time" "2.5"
"dl_decay" "1200"
"dl_exponent" "0"
"dmg_amount" "105"
"dmg_radius" "200"
"damage_players" "0"
"damage_npcs" "1"
"damage_breakables" "1"
"shk_amp" "1"
"shk_freq" "1"
"shk_dur" "1"
"shk_radius" "512"
"shk_inair" "0"
"particle" "particles/d_nihilistics_aura_emitter.txt"
"snd_name" "Disciplines/nihilistics/lvl3/aura.wav"
"snd_dist" "768"
"snd_pitch_min" "98"
"snd_pitch_max" "105"
"spawnflags" "111"
"targetname" "AuraOfDecay_params"
"origin" "0 0 0"
}
{
"classname" "point_explosion"
"angles" "0 0 0"
"targetname" "BlackMetamorphosis"
"explosion_params" "BlackMetamorphosis_params"
"origin" "0 0 0"
}
{
"classname" "params_explosion"
"angles" "0 0 0"
"dl_color" "120 196 252"
"dl_radius" "512"
"dl_time" "2.5"
"dl_decay" "1200"
"dl_exponent" "0"
"dmg_amount" "110"
"dmg_radius" "215"
"damage_players" "0"
"damage_npcs" "1"
"damage_breakables" "0"
"shk_amp" "0.75"
"shk_freq" "0.75"
"shk_dur" "0.75"
"shk_radius" "512"
"shk_inair" "0.75"
"particle" "particles/d_obtenebration_BlackMetamorphosis_emitter.txt"
"snd_name" "Disciplines/obtenebration/level4/loop.wav"
"snd_dist" "768"
"snd_pitch_min" "98"
"snd_pitch_max" "105"
"spawnflags" "111"
"targetname" "BlackMetamorphosis_params"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "SerpentisCobraAltattack_particle"
"angles" "0 0 0"
"attach_type" "2"
"bone" "Bip01 Head"
"particle_definition" "particles/d_serpentis_cobra_altattack_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "SerpentisCobraAttack_particle"
"angles" "0 0 0"
"attach_type" "2"
"bone" "Bip01 Head"
"particle_definition" "particles/d_serpentis_cobra_attack_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "npc_maker"
"targetname" "Serpentis_Spawn_Viper"
"origin" "0 0 0"
"angles" "0 0 0"
"health" "400"
"NPCTargetname" "Serpentis_Viper"
"NPCSquadname" "koldunic"
"NPCType" "npc_VVampireBoss"
"stattemplate" "kuejinninja"
"MaxNPCCount" "100"
"MaxLiveChildren" "5"
"SpawnFrequency" "5"
"Flag_StartDisabled" "1"
"Flag_NPCClip" "0"
"Flag_Fade" "0"
"Flag_InfChild" "0"
"Flag_NoDrop" "1"
"npc_transparent" "1"
"npc_perception" "0"
"vision" "-1"
"hearing" "-1"
"renderfx" "0"
"rendermode" "0"
"renderamt" "255"
"rendercolor" "255 255 255"
"disableshadows" "1"
"disablereceiveshadows" "0"
"interesting_place_groups" "0"
"physdamagescale" "1.0"
"default_disposition" "Neutral"
"default_camera" "DialogDefault"
"model" "models/character/monster/undead/undead_male_sceleton.mdl"
"demo_sequence" "None"
"skin" "0"
"skincolor" "0 0 0 0"
"haircolor" "0 0 0 0"
"clothescolor1" "0 0 0 0"
"clothescolor2" "0 0 0 0"
"trimcolor" "0 0 0 0"
"player_reaction" "D_LI 5"
"use_interesting" "0"
"investigate_mode" "4"
"bright_route_penalty" "0"
"pl_investigate" "6"
"pl_criminal_flee" "6"
"pl_criminal_attack" "6"
"pl_supernatural_flee" "6"
"pl_supernatural_attack" "6"
"spawnflags" "4"
"StartHidden" "0"
"percent_occluded_wait" "10"
"percent_occluded_cover" "30"
"percent_occluded_walk" "10"
"percent_occluded_flank" "20"
"percent_occluded_chase" "30"
"investigate_mode_combat" "4"
"floatfreq" "0"
"allow_kick_hint_use" "1"
"hint_groups" "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32"
"crossfade_skin_time" "2.0"
"combat_start_activity" "-1"
"follower_type" "Default"
"crossfade_skin_time" "2.0"
"invincible" "0"
"interesting_place_groups" "0"
"full_investigate" "0"
"allow_alert_lookaround" "1"
"stay_entrenched" "0"
"teleport_move_timer" "0"
"cantdropweapons" "1"
"follower_type" "Default"
"follower_boss" "!player"
//"team_name" "player"
"combat_start_activity" "-1"
"additionalequipment" "item_w_tzimisce2_claw"
"OnSpawnNPC" ",,,0,-1,castpresence.CastViperSpawn(),"
"OnHalfHealth" ",,,0,-1,castpresence.ViperDie(),"
}
{
"classname" "params_particle"
"targetname" "SerpentisViperSpawn_particle"
"angles" "0 0 0"
"attach_type" "2"
"bone" "Bip01 Spine"
"particle_definition" "particles/d_serpentis_viperspawn_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "KoldunismBodyFire_particle"
"angles" "0 0 0"
"attach_type" "1"
"particle_definition" "particles/d-koldunic-body-fire_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "KoldunismBodyHeatWave_particle"
"attach_type" "2"
"bone" "Bip01 Spine"
"particle_definition" "particles/d-koldunic-body-heatwave-emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "KoldunismMagmaSurge_particle"
"attach_type" "2"
"bone" "Bip01 Spine"
"particle_definition" "particles/d-koldunic-wof-surge_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "KoldunismCast_particle"
"attach_type" "2"
"bone" "Bip01 Head"
"particle_definition" "particles/d-koldunic-wof-cast-emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "SerpentisSandstorm_particle"
"attach_type" "2"
"bone" "Bip01 Head"
"particle_definition" "particles/d_serpentis_sandstorm_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "KoldunismBlast_particle"
"attach_type" "2"
"bone" "Bip01 Spine"
"particle_definition" "particles/d-koldunic-wof-blast_emitter.txt"
"origin" "0 0 0"
}
{
"classname" "params_particle"
"targetname" "KoldunismHeatWave_particle"
"attach_type" "2"
"bone" "Bip01 Spine"
"particle_definition" "particles/d-koldunic-wof-wall-emitter.txt"
"origin" "0 0 0"
}
{
"classname" "npc_maker"
"targetname" "player_zombie_maker"
"origin" "0 0 0"
"angles" "0 0 0"
"NPCTargetname" "player_zombie_ally"
"NPCSquadname" "player_npc"
"NPCType" "npc_VVampireBoss"
"stattemplate" "PlayerZombie"
"MaxNPCCount" "100"
"MaxLiveChildren" "5"
"SpawnFrequency" "5"
"Flag_StartDisabled" "1"
"Flag_NPCClip" "0"
"Flag_Fade" "0"
"Flag_InfChild" "0"
"Flag_NoDrop" "1"
"npc_transparent" "1"
"npc_perception" "0"
"vision" "-1"
"hearing" "-1"
"renderfx" "0"
"rendermode" "0"
"renderamt" "255"
"rendercolor" "255 255 255"
"disableshadows" "1"
"disablereceiveshadows" "0"
"interesting_place_groups" "0"
"physdamagescale" "1.0"
"default_disposition" "Neutral"
"default_camera" "DialogDefault"
"model" "models/weapons/disciplines/Necromancy/lvl2/zombie_2.mdl"
"demo_sequence" "None"
"skin" "0"
"skincolor" "0 0 0 0"
"haircolor" "0 0 0 0"
"clothescolor1" "0 0 0 0"
"clothescolor2" "0 0 0 0"
"trimcolor" "0 0 0 0"
"player_reaction" "D_LI 5"
"use_interesting" "0"
"investigate_mode" "4"
"bright_route_penalty" "0"
"pl_investigate" "6"
"pl_criminal_flee" "6"
"pl_criminal_attack" "6"
"pl_supernatural_flee" "6"
"pl_supernatural_attack" "6"
"spawnflags" "4"
"StartHidden" "0"
"percent_occluded_wait" "10"
"percent_occluded_cover" "30"
"percent_occluded_walk" "10"
"percent_occluded_flank" "20"
"percent_occluded_chase" "30"
"investigate_mode_combat" "4"
"floatfreq" "0"
"allow_kick_hint_use" "1"
"hint_groups" "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32"
"crossfade_skin_time" "2.0"
"combat_start_activity" "-1"
"follower_type" "Default"
"follower_boss" "!player"
//"team_name" "player"
"crossfade_skin_time" "2.0"
"invincible" "0"
"interesting_place_groups" "0"
"full_investigate" "0"
"allow_alert_lookaround" "1"
"stay_entrenched" "0"
"teleport_move_timer" "0"
"cantdropweapons" "0"
"dialogname" "dlg/antitribu/necromancy.dlg"
"additionalequipment" "item_w_fists"
"OnSpawnNPC" ",,,0,-1,castnecromancy.castZombieSpawn(),"
"OnDeath" ",,,0,-1,castnecromancy.castZombieDeath(),"
}

We should now analyze what parts we need to copy on our mod. For an example we can ignore those part inside the brackets about Serpentis, but those about Black Metamorphosis or Obtenebration are necessary. Copy those parts and paste them in the map entities in our mod.

Open every file, learn all the structure of the mod and copy whatever you might need, obviously with some logic. Like, in /vdata/system/stats.txt Vicissitude was built on top of Dementation, but Obtenebration was built on top of Blood Healing, so you must convert it to replace Thaumaturgy (I know in the first part of this guide I switched their places, only now I see it's more convenient this way).

Other things to remember:
- pick disciplinetgt_005, rename it as disciplinetgt_004 and edit it inside each time "Discipline" refers to "Blood_Healing" to "Thaumaturgy"
- analyze in the disciplinetgt, python and map entities files which files from "materials", "models", "particles" and "sound" folders you need to copy into our mod
- once we have edited all the map entities reopen the "VTMBedit Tool", click on "BSP", "Reimport Map Entities" and select the maps of our mod. Now all the maps have been updated with the new entities.
- python can be problematic if we don't know it, we'll cover that in the next part

To the next part (hopefully coming soon). Bye!!

EDIT 06/June/2013
Regarding the map entities, just copy all of the wall of text, it won't hurt....

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: