forums | blogs | polls | tutorials | downloads | rules | help

New Challenge - Conversations

AttachmentSize
Image icon excelerror2a.jpg40.65 KB

Hi folks

After solving the last issues, now I try to implement some conversations. Therefore I've studied the respective SU- Tutorial and - surprise, surprise - there were some new issues to be clarified.

First of all, I tried to use the Excel- Conversation Tool. Unfortunately the macros did not work. However, I have no idea of VBAscript. I attached two screenshots showing the rows, where the debugger shows the errors. The error message told, that a user defined function would be not defined. Are there any requirements on the MS Office version to be used for the macros?

Anyways, as I am still working on my first test map, there is not so much to say. Therefore I created the conversation.gas manually. The first (straightforward) conversation worked. Amazing, I thought and tried to take the next step to perfection. Now I wanted to add some voices to the conversation. I took the micro, grabbed the text, converted it into mp3 and copied it into the bit- folder, where all the voice files of the game may be found (I got it created automatically by untanking the respectiv *.ds2res file).

Afterwards I added the samples names within my conversation.gas and gave it a try. However, there was nothing to be heared. So I tried to paste another voice sample taken out of the original DS2 resources. This worked. But my self created one did not. I also updated the database-file where the duration of all voice files is stored. But unfortunately, this brought no success.

So please give me some hints, how to include custom voice files into a mod. Are there any requirements on the file format of the file, such as bit rate etc.?

Afterwards I tried another possibility and managed it to get the soundfiles work. As it seems there are some naming conventions for the voice files. If they are considered, DS2 accepts the custom files and plays them.

Unfortunately there is a new problem with the Talk Flick. I tried to adapt the example from the tutorial to my test world. However, there is an error message everytime: "Syntax Error ("eoi") at line ..." Have no idea what that means. The referred line is the one where I try to get a quest activated: "ActivateTask a1_p_my_test_world_main chicken_hunt;"

I checked the correctness of the spelling hundred times. It is exactly the same as written within the questinfo_gas. No idea, what's the problem. When I tried to comment the line out by //, the error appeared one line above. And even when I set the // befor all lines the error appeared. So what could it be?

The line pointed to for a syntax error is not always the one where the error really happened, just where the parser detected it. My guess is that there is a symbol missing from an earlier statement to close a string, terminate a label, or whatever, and so it's searching all the subsequent lines for it.

If it's not too large, past the code here and we'll look at it. Use code tags so it doesn't get run together as plain text.

Sharkull's picture

Yeah, probably a missing / extra curly bracket or semi-colon...

(And manually creating the conversations.gas is the way to go for sure. The file name thing has to do with the NNK... see Logic.ds2res\art\namingkey200.nnk if you want to see the listing).

Hi folks

I managed the problem with the eoi by copying the example from the tutorial and replacing some parts with my file names.

Then I rearranged the flick in order to create the possibility of different conversation streams. One for the first contact, one if the quest has been accepted, one if the quest has not been accepted or the first conversation has been aborted, and one if the quest has been accomplished successfully.

There I found a new issue. If the player abort the conversation by the Esc- key or chooses not to accept the quest, it is not possible to activate the conversation once more. I'am sure there is a logical error somewhere, but I don't know where. Afterwards you can find the code. The strong section is the one, where the conversation should be activated, which is relevant, if the player talks to the NPC another time but yet not has accepted the quest:

Quote:

[a1_my_first_world_ghost_talk]
{
// set the roles for this sequence
role (actor) speaker, listener;

// set the startup thread for this sequence
entry main;

thread main
{
speaker:
Capture;

if whenHasQuestItem( a1_broiler_head )
{
StartConversation conversation_ghost2, wait;
BroadcastMessage ( Speaker, WE_USER_INDICATE_EMITTER_OFF );
}


else if WhenQuestActive( a1_p_my_first_world_main )
{
StartConversation conversation_hurry, wait;
}

else
{
if !WhenQuestBool( a1_p_my_first_world_main, chicken_hunt_done )
{
StartConversation conversation_ghost, wait;
SetQuestBool( a1_p_my_first_world_main, chicken_hunt_done, true );
}
else
{
StartConversation conversation_ghost1, wait;
}


if WhenConversationChoice( speaker, accept_quest )
{

ActivateQuest( a1_p_my_first_world_main );
ActivateTask( a1_p_my_first_world_main, chicken_hunt );
ActivateTask( a1_p_my_first_world_main, report_after_kill );
BroadcastMessage ( Speaker, WE_USER_INDICATE_EMITTER_TASK_ACTIVE, 2 );
StartConversation conversation_accept, wait;
SetMayAttack true;
SetMayBeAttacked true;
}

}
}
}

The code shows also another issue. When the Quest gets activated, I want to change the Quest_icon over the head of the NPC. Unfortunately nothing happens. I also tried to implement an indicator within the NPCs template to show the Primary Quest Icon from the beginning on. But this als don't work.

Enclosed I pasted the respective actor.gas file.

Quote:

[t:chicken_white,n:0x00100015] //chicken to be hunted

{
[actor]
{
alignment = aa_evil;
b can_show_health = true;
f power_level = 60;
f spot_request_wait_time = 1;
}
[aspect]
{
b does_block_camera = true;
b does_block_path = true;
f life = 50;
f life_recovery_period = 50;
f life_recovery_unit = 2;
f max_life = 65;
f scale_multiplier = 3.02446;
}
[attack]
{
ammo_attach_bone = ap_grip;
f damage_max = 15;
f damage_min = 5;
skill_class = Melee;
}
[common]
{
b is_multi_player = true;
membership = broiler;
rarity = unique;
b rollover_life = true;
}
[defend]
{
f defense = 2;
}
[inventory]
{
spew_equipped_kill_count = 1;
}
[mind]
{
attributes = ja_flanks;
i flee_count = 1;
f flee_distance = 0;
f melee_engage_range = 10;
b on_enemy_entered_ocz_flee = false;
b on_enemy_spotted_alert_friends = true;
b on_engaged_fled_abort_attack = true;
b on_friend_entered_ocz_flee = false;
b on_job_reached_travel_distance_abort_attack = true;
f outer_comfort_zone_range = 14;
f sensor_scan_period = 1.6;
f sight_range = 16;
}
[physics]
{
b explode_when_killed = false;
}
[placement]
{
q orientation = 2.23974e-007,0.148989,-1.52425e-008,-0.988839;
p position = -6.78133,0.25,-7.18543,0x7e930dd0;
}
}
/************************************************************************/
[t:npc_slcave_gromaska,n:0x00100058] //ghost npc
{
[aspect]
{
f scale_multiplier = 1.00943;
}
[conversation]
{
talk_flick = a1_my_first_world_ghost_talk;
[conversations]
{
* = conversation_accept;
* = conversation_ghost;
* = conversation_ghost1;
* = conversation_ghost2;
* = conversation_hurry;
}
}
[indicate_emitter]
{
initial_texture = 1;
initially_active = true;
}
[placement]
{
q orientation = 0,-0.993379,0,-0.11488;
p position = -0.624309,-1.49,3.31109,0xf9b15e44;
}
}
/************************************************************************/
[t:tharva_02,n:0x0010005c] //sample monster to copy the object properties from
{
[aspect]
{
f life = 20;
f max_life = 20;
model = m_c_edm_stb_pos_1;
f scale_multiplier = 1.09277;
}
[attack]
{
f damage_max = 10;
f damage_min = 2;
}
[placement]
{
q orientation = 1.37288e-007,-0.178027,-6.51231e-008,0.984026;
p position = 4.23443,2.33342,-5.98141,0x7e930dd0;
}
}

In relation to that there is another issue.
Firstly, I used a chicken as sample for a monster to be killed. The quest is, to kill the chicken and to take back his head to the ghost. As you can see from the actor.gas, I chose the chicken_white Template, which is normally used for ambient creatures. But unfortunately the chicken does not attack. Therefore I implemented a second monster and than copied all the object property values into the chicken template. Now I am able to attack it, but unfortunately with magic or with ranged weapons. Melee does not work. Furthermore the chicken itself does not attack me. And when I killed it, the model keeps standing around. When you walk through it, it gets partly invisible, but reappears when you leave the place. No idea, what could be the reason for that strange behavior. Perhaps, there is no model/animation for a killed chicken.

My last question refers to quest items. As you can see from the talk_flick above, the condition for the copletion of the quest is, that the player takes the head of the chicken with him. How has the chicken template to be modified in order to let his head appear within the lorebook, when it gest killed. How is the trigger/action to be configured?

Move the setting of the Quest boolean down to where you're testing for a specific response. Right now you're setting it unconditionally (except for "is it already set")

You can re-use a template by referring back to it with "Specializes" and just supply the changed blocks. No need to copy everything.

I don't recall if there's a "die" animation (_di) or even a dead position for a chicken. You'll also need a chicken-head icon to put into the book, as well as as amending the chicken's template to fire a flick on death - there are several templates to look at for examples, such as the potion vendor in Act3 who also illustrates how to replace a good actor with an evil clone, in case you need to do that with your chicken.

Sharkull's picture

It's hard to follow your quest logic with the way it is written... there is no logical flow as to when you check for each state (and there should be). Draw out a logic tree (categorize) and rewrite your code to include all the possibilities. Try looking at my_quest_example_world ( http://www.siegetheday.org/?q=node/880 ) for something that works. You're missing a "role" statement too.

For controlling the overhead icons for the actor, you need to send the message to an SCID or an SCID name (which you would need to set up). The icons for the actor also need to be set up in the actor template (your actor's instance template doesn't have what's needed...). Again, my_quest_example_world has an example of working icons.

Getting an ambient creature to behave as an enemy is beyond my experience... can't help you there.

For the chicken head, you need a few things. First you need an item template for the head itself (examples in ds2_world_journal_quest_items.gas). Next you need an entry in the journal to set up the head as a quest item (lorebook_info.gas). You'll also need to set up the mob to drop the head when it dies (pcontent macro, linked from the mob's template). (There might be something more, but nothing comes to mind at the moment).

Hope this helps.

Ok. I finally recognize, that there is no way other than to study your Example World. Damned. I thought I would be able to make it on my own =)

Regarding the logical flow. I know it is quite confusing. But I just followed the example of the Blacksmiths Quest of Act 1. There the conditions of the talk_flick also do begin with the condition for the final accomplishment of the quest. Finally the last condition in the if/else tree contains the conversation actually to be performed firstlyin the game.

But give me now some time to study your example =)

Sharkull's picture

blade.007 wrote:
Ok. I finally recognize, that there is no way other than to study your Example World. Damned. I thought I would be able to make it on my own =)

I actually made two example worlds... the general one and this one just for a quest.
Smile

And there must be another way... I didn't have my examples to learn from. Laughing out loud I just made it easier to see the essential elements of certain things because digging around in GPG's original work to find all the applicable pieces was really a pain (and time consuming).

blade.007 wrote:
Regarding the logical flow. I know it is quite confusing. But I just followed the example of the Blacksmiths Quest of Act 1. ...

I only used existing examples to get familiar with the code / language. After that, I made my own code because I don't necessarily trust other peoples logic ( :P ) and examples don't necessarily translate well from one situation to another (if there is some extra element of the formula somewhere, more / different possibilities, other flicks playing with the same quest flags...).

Well I haven't studied the hole flick, just for safety reasons I would add speaker: Release; at the end of the flick to explicitly release the captured role again. Maybe this will help with the ESC key matter.

Turning an 'ambient animal' into a monster is tricky. Just switching the alignment is not enough, many other changes in the [mind] block would be required too to make a 'regular' evil monster. Moreover i would check the [body] in the chicken template to see if attacking is supported at all.
A dying animation for chicken - there isn't any (at least I can't remember there was one when i made some evil chickens), however with immediate for both expiration classes (see [common] in the proprieties) it would disappear if dead and not stay around. Or making it explode_when_killed would be possible too, then however adding some breaking particles in the (custom) chicken template (e.g. smaller standard/global frags) would look appropriate when exploding.

After having a look on the example world, I spotted the problem with the quest icons. As you suspected, I tried to implement the indicator block into the instance instead of the template. Now the indicators work.

I also was able to simplify the conversation not using the questbool anymore and making use of the i = 0; variable instead. The conversation works.

Before looking after the Killer Chicken, now I tried to implement the radar icons on the Minimap. I made to get them showed. But unfortunately I did not find the trick to switch them of again. Is this done automatically if a task is completed ( CompleteTask Quest Task;) or has there to be some kind of trigger/message or whatever?

Sharkull's picture

blade.007 wrote:
... I tried to implement the radar icons on the Minimap. I made to get them showed. But unfortunately I did not find the trick to switch them of again. Is this done automatically if a task is completed ( CompleteTask Quest Task;) or has there to be some kind of trigger/message or whatever?

You need to associate the icons with quests within questbook_info.gas (name the icons, then associate each name with the proper task). When that is done correctly, the icons should be controlled by quest status.

After some more hours of trial and error I managed some more issues. Now the quest icons work as required. The quest item does also work as well es the talk flick.

But there still are some problems. As you can see from the following actor.gas, converstaions.gas and talk.flick there are three conversations (conversation_ghost, conversation_accept, conversation_ghost2). Unfortunately the accept and ghost2 conversations do not work. I already revised the flick, testing its correct function by pasting the conversation_ghost at all places to go during the flick. The flick works, which also was indicated by the correct function of the activation and completion of the tasks. But I have no idea, why the other conversations do not work.

Here the related files:

actor.gas (only the part of the ghost- NPC)

Quote:

[t:npc_ghost_broiler_ede,n:0x00100058]
{
[aspect]
{
f scale_multiplier = 0.979138;
}
[conversation]
{
talk_flick = a1_my_first_world_ghost_talk;
[conversations]
{
* = conversation_ghost;
* = conversation_accept;
* = conversation_ghost2;
}
}
[placement]
{
q orientation = -9.28205e-009,0.990853,-1.07452e-008,0.134947;
p position = -0.423189,-1.49,3.37649,0xf9b15e44;
}
}

The talk flick:

Quote:

[a1_my_first_world_ghost_talk]
{
// set the roles for this sequence
role (actor) speaker, listener;

// set the startup thread for this sequence
entry main;

thread main
{
speaker:
Capture;

if WhenQuestComplete (a1_p_my_first_world_main)
{
StartConversation conversation_ghost2, wait;
//StartConversation conversation_ghost, wait; //Testconversation to test the correct function of the flick

}
else
{
if whenHasQuestItem( a1_town_amber_piece )
{
StartConversation conversation_ghost2, wait;
//StartConversation conversation_ghost, wait; //Testconversation to test the correct function of the flick
CompleteTask ( a1_p_my_first_world_main, report_after_kill );
CompleteQuest ( a1_p_my_first_world_main );
CompleteAct act_1;
BroadcastMessage ( Speaker, WE_USER_INDICATE_EMITTER_OFF );
}


else
{

StartConversation conversation_ghost, wait;

if WhenTaskActive( a1_p_my_first_world_main, talk_ghost )
{
CompleteTask ( a1_p_my_first_world_main, talk_ghost ); }

if WhenConversationChoice( speaker, accept_quest )
{
StartConversation conversation_accept, wait;
//StartConversation conversation_ghost, wait; //Testconversation to test the correct function of the flick
ActivateTask( a1_p_my_first_world_main, chicken_hunt );
BroadcastMessage (speaker, WE_USER_INDICATE_EMITTER_SWITCH, 3);

}
}
}
}
}

and finally the conversations.gas:

Quote:

conversation_ghost]
{
[text*]
{
//---ColumnA--- = Ghostly Spirit (Human Male)
//---ColumnB--- = Spirit of a male human, standing in the house of the Testworld.
//---ColumnC--- = authoritative, callous

i order = 0;
sample = s_vo_npc_007_ghost_1a; //s_vo_npc_155_Arinth_003;
screen_text = "*WOOOOOO* Who are you? Did you come to make fun of about my embarrassing end?";
scroll_rate = 2;
[choices]
{
[choice_1]
{
reply = haeh;
screen_text = "Test, Test. 1..2..3.";
}

}
}
[text*]
{
//---ColumnA--- = Ghostly Spirit (Human Male)
//---ColumnB--- = Spirit of a male human, standing in the house of the Testworld.
//---ColumnC--- = authoritative, callous
sample = s_vo_npc_007_ghost_8a;
screen_text = "You once more. Do have something for me or just want to laugh more?";
scroll_rate = 2;
[choices]
{
[choice_1]
{
reply = broiler;
screen_text = "Basically I came back to story once more.";
}
[choice_2]
{
reply = grrr;
screen_text = "Haaa Haaa !!!";
}

}
}
[t:reply,n:haeh]
{
sample = s_vo_npc_007_ghost_2a;
screen_text = "I don't understand. What language are you talking?!";
scroll_rate = 2;
[choices]
{
[choice_1]
{
reply = ashame;
screen_text = "Oh. I'm sorry. My name is . I was hired to test this world. But what are you talking about? How can you call your own death embarassing?! Death is to serious to make jokes of, I think.";
}
[choice_2]
{
reply = broiler;
screen_text = "Who are you that you don't know my name. I am the fabulous . That stands for danger !! Tell me what happened to you. I promise that I won't laugh.";
}
}
}
[t:reply,n:ashame]
{
sample = s_vo_npc_007_ghost_3a;
screen_text = "To test this world?! Ooh your quite late. If there had been some testing earlier, I still would be alive. However, I was killed... And I am really ashamed of convincing it... Killed by *snurf* a chicken.";
scroll_rate = 2;
[choices]
{
[choice_1]
{
reply = broiler;
screen_text = "Killed by a chicken?! How may that be?";
}
}
}
[t:reply,n:broiler]
{
sample = s_vo_npc_007_ghost_4a;
screen_text = "Well, I lived here for a week. I can not remember how I came here. First off all, I lived from eating plants and mushrooms. But then my prayers were answered and a bunch of chickens appeared. So I caught one of them every second day to prepare a crusty gold brown broiler. The rest of the day I spent on training my melee skills, preparing for the day, the one who brought me here would appear.\n\nBut something was wrong with the chickens. I guess, the creator of this world, and you should note this down to tell it to him (together with my curse), set their intelligence modificator too high. So they watched me every day - and they learned.\n\nAnd then came the day, when I wanted to slay the last chicken. I took my axe and tried to get the chicken. But what was that. Ist eyes were glooming in dangerously red color. When I tried to slay it - it slayed ME. OOOOhh this beast!!!\n\nBut when I was to take the boat to the far shores of the ancient - the ferryman just laughed about my story. He told me, that I would not granted the passage until the chicken is dead as well. Now I have to rest here, until somebody arrives and kills that beast. Please stranger, help me to find eternal peace - and kill that beast!!!!";
scroll_rate = 2;
[choices]
{
[choice_1]
{
reply = accept_quest;
end_conversation = true;
screen_text = "Well. That sound quite strange. A super intelligent chicken killing a poor human. If you were still alive I would have asked, whether you took one ale too much. But apparently you are telling the truth. As my orders also consist in testing the combat system, I think I may help you.";
}
[choice_2]
{
reply = haeh2;
screen_text = "A fighting CHICKEN?! Haaaa Haaaa. That sounds funny. Never heard something stupid like that.";
}
}
}
[t:reply,n:haeh2]
{
sample = s_vo_npc_007_ghost_5a;
screen_text = "What?! Why are you laughing?! You promised...";
scroll_rate = 2;
[choices]
{
[choice_1]
{
reply = curse;
screen_text = "Well. Seems I was lying. A fighting chicken - I can't believe it.";
}
}
}
[t:reply,n:curse]
{
sample = s_vo_npc_007_ghost_6a;
screen_text = "Evil idiot. Get out of my house!! May the great chicken kill you slowly!!";
scroll_rate = 2;
[choices]
{
[choice_1]
{
end_conversation = true;
screen_text = "[End]";
}
}
}
[t:reply,n:grrr]
{
sample = s_vo_npc_007_ghost_9a;
screen_text = "GRRRRR !!!!";
scroll_rate = 2;
[choices]
{
[choice_1]
{
end_conversation = true;
screen_text = "[End]";
}
}
}
[conversation_accept]
{
[text*]
{
sample = s_vo_npc_007_ghost_7a;
screen_text = "Thank you stranger. Bring me the head of the beast, and I will give you a rich reward!!!";
scroll_rate = 2;
}
}
[conversation_ghost2]
{
[text*]
{
//---ColumnA--- = Ghostly Spirit (Human Male)
//---ColumnB--- = Spirit of a male human, standing in the house of the Testworld.
//---ColumnC--- = authoritative, callous
// sample = s_vo_npc_007_ghost_8a;
screen_text = "You made it. I thank you stranger !!! You finally released me from this evil curse. Now I can travel to the coast of the ancient in peace.
\n\n But wait a minute. What is that?! It seems like...
\n\n *BokBOOOOOOOK*
\n\n OOOHH NOOOO !!! The broiler became a ghost as well. Now I am cursed for ETERNITYYYY !!!!";
}

}

@blade.007: Your code - posted like this - is hardly readable, but it seems after [t:reply,n:grrr] is a closing braket missing!?
That's probalby why conversation_ghost still works (since [t:reply,n:grrr] is at the end) but that all further conversations in the file get lost within a code structure error.

Please use the [code] tag next time to post code.

[conv_forum]
{
	[text*]
	{
		sample = s_vo_npc;
		screen_text = "Thank you";
	}
}

Sharkull's picture

KillerGremal wrote:
... but it seems after [t:reply,n:grrr] is a closing braket missing!?. ...

I agree. Another one of these "}" is needed.

(I would edit the post to include code tags instead of quotes but it seems the issue has been found, and the code tag stretches the page rather wide).

You were absolutely right, both of you. Now the quest works, the radar icons work, the quest item in the lorebook works - I am happy.

But this still is not the end. The next challenge is to convert a peaceful ambient chicken into a aggressive bloodthirsty beast. Up to now there are several issues:
1. It is not possible to attack the chicken by melee weapons although Combat and Natural Magic do work.
2. The chicken does not defend itself. It keeps standing around picking.
3. When it gets destroyed, it explodes, but the model keeps being visible, standing around without mooving. You can walk through it. When you are standing within it, its head still is visible.

I guess I should study the NPC/ Monster Tutorial a little bit closer to resolve these things.

But so far. Thanks a lot.

PS: You are right. Next time I use the [code] Tag. Unforunately it does not seem to be possible to edit a comment once it was submitted. Furthermore I would have preffered to post the entire files instead copying the code into a comment. But as it seems, it is possible only to paste one file for an entire thread within this forum.

Sharkull's picture

blade.007 wrote:
PS: You are right. Next time I use the [code] Tag. Unforunately it does not seem to be possible to edit a comment once it was submitted. ...

Actually, you should be able to edit your posts unless someone has replied to it.

(Moderators can still edit anything though... :wizard: ).

blade.007 wrote:
...
But this still is not the end. The next challenge is to convert a peaceful ambient chicken into a aggressive bloodthirsty beast.
...


Well, try the following once.
However i wouldn't say bloodthirsty, and some tuning is still needed to get a nice act boss out of this.

[t:template,n:base_chicken_monster_white]
{
	doc = "Big White Chicken, Melee";
	specializes = base_actor_evil_melee_strong_tank;
	[aspect]
	{
		model = m_c_na_ckn_pos_1;
		[textures] { 0=b_c_na_ckn_white; }
		[voice]
		{
			[attack]
			{
				priority = high;
				* = s_mn_gen_chicken-flap1;
				* = s_mn_gen_chicken-flap2;
			}
			[break] { priority = high; * = s_en_obj_monster_gib; }
			[die]
			{
				  * = s_mn_gen_chicken_die;
			}
			[enemy_spotted]	{ priority = high; * = s_mn_gen_chicken-flap3; }
			[hit_critical]	{ priority = low; * = s_mn_gen_chicken-flap4; }
			[hit_glance]	{ priority = low; * = s_mn_gen_chicken-flap4; }
			[hit_solid]		{ priority = low; * = s_mn_gen_chicken-flap4; }
			[move] { priority = low; * = s_mn_gen_lrvx_mve_lp; }
		}
		scale_base = 2.5;
	}
	[body]
	{
		min_move_velocity = 2.000000;
		max_move_velocity = 3.500000;
		avg_move_velocity = 4.500000;
		[bone_translator]
		{
			body_anterior = bone04;
			body_mid = bone02;
			body_posterior = bone06;
			kill_bone = bone01;
			shield_bone = bone20;
			weapon_bone = bone23;
		}
		[chore_dictionary]
		{
			chore_prefix = a_c_na_ckn_fs;
			[chore_attack]
			{
				chore_stances = 0;
				skrit = select_attack;
				[anim_files]
				{
					00=at;
					01=mg;
					02=at;
				}
				[anim_durations] { fs1 = 1.5; }
			}
			[chore_default]
			{
				chore_stances = 0;
				skrit = infinite_loop;
				[anim_files] { 00=ds; }
			}
			[chore_die]
			{
				chore_stances = 0;
				skrit = select_transition;
				[anim_files] { 00=dsf; }
			}
			[chore_magic]
			{
				chore_stances = 0;
				skrit = select_transition;
				[anim_files]
				{
					00=mg;
					01=at;
					02=mg;
				}
				[anim_durations] { fs1 = 1.5; }
			}
			[chore_fidget]
			{
				chore_stances = 0;
				skrit = select_fidget;
				[anim_files]
				{
					00 = dsf;
					01 = dsf-02;
					02 = dsf-03;
				}
			}
			[chore_walk]
			{
				chore_stances = 0;
				skrit = select_walk;
				[anim_files] { 00=rl; }
			}
		}
	}
	[common]
	{
		screen_name = "Chicken";
	//	forced_expiration_class = immediate;	// AS ALTERNATIVE FOR [self_destruct]
	//	auto_expiration_class = immediate;
   	}
	[mind]
	{
		sensor_scan_period = 1.5;
		actor_weapon_preference = WP_NONE;
		melee_engage_range = 12;
		personal_space_range = 0.7;
		ranged_engage_range = 13.0;
		sight_range = 15.0;
	}
	[physics]
	{
		// AS LONG AS THERE ARE NO [break_particulate] THIS CHICKEN NEVER SHOULD GIB/EXPLODE:
	   	gib_min_damage = 1000000000.0;
		gib_threshold = 1000000000.0;
	}
	[self_destruct]		// INSTEAD OF IMMEDIATE EXPIRATION.
	{
		start_msg = WE_KILLED;
		delete_time = 0.25;
	}
}

[t:template,n:chicken_monster_white_stats]			// META TEMPLATE, USUALLY FOR BESTIARY-BOOK ONLY
{
	doc = "Big Chicken";
	specializes = base_chicken_monster_white;
	[actor]
	{
		power_level = 135;		// ASSUMPTION
		[state_resistances]
		{
			freeze	= 0.3;	// LOWER RESISTANCE AGAINST FREEZING
			power_damage = 0.75;	// ONLY 75% OF POWER DAMAGE ARE EFFECTIVE (IT'S A MULTIPLIER, SEE components.gas)
		}
		[resistances]
		{
			dmt_ranged = (-0.25 * #is_normal) + (-0.2 * #is_veteran) + (-0.15 * #is_elite);
		}
		[skills]
		{
			monster_level = (20.0 * #is_normal) + (50.0 * #is_veteran) + (75.0 * #is_elite);
			strength = 1, 0;
			dexterity = 1, 0;
			intelligence = 1, 0;
			melee = 1, 0;
		}
	}
}

[t:template,n:chicken_monster_white]		// LEAF TEMPLATE, TO PLACE ON MAP
{
	doc = "Big Chicken";
	specializes = chicken_monster_white_stats;
}

Widely taken form Amaras' ChickenWorld, indeed from the more legit 'DS.de' revision of that map (Ds2Map + Ds2Res).

:dance1:
I am really happy to tell you, that I finally made it to complete my Test- World as planned. Now everything works. Thank you very much for your patience and your advice. If you like I also can tank it and load it up.

:dance1:

Thanks a lot !!!
Blade.007

Sharkull's picture

Congratulations. :thumbup1:

So, I suppose you're going to start a larger mapping project now that you've learned so much...? :P

In fact I was thinking of such a project. One big issue of the most RPG I know is, that there are nearly no campaigns where you get the chance to work for the dark side. It is so boring to work for honour, peace and justice.

:twisted:

Therefore I was really surprised when I got to know the Tutorial of the DS Single Player Campaign. But unforunately the story turns to the usual business of defeating the evil.

So what about a story explaining how Valdis came to his dark power....

:orc:

But unforunately there are also some Real World Problems to be solved, that is to say I'm going to prepare the thesis for my studies now. Don't know whether there will be enough time for dark planning

Sharkull's picture

Well, if you need any more tips just ask. Smile

I would suggest that if you do go ahead with your plan, that you build it in stages (releasing bits as they are ready). It helps with motivation if people are giving you feedback, while breaking the project up into less daunting chunks.