Jump to content
  • 0

How does the airsh... random hits of Desperado works ?


Jessie Rocket

Question


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  5
  • Reputation:   0
  • Joined:  06/07/15
  • Last Seen:  

Hi everyone !
I'm not sure to post in the right section, but well, I hope I'll find someone to awnser me.
 
I'd like to know how exactly works the random hits of Desperado depending on the distance between the GS and his "target". If it can help, I'm playing with the pre-re version and mainly reading the files in the trunk part (and in the src/map/skill.c).
 
All I found about the splash area with random number of hit of Desperado is :
[the bold & blue parts are about what, imo, help to understand the way the area of effect and the random and repeated damage part are working]
 
 

1) skill_db.txt

 
What is written :
516,0,8,4,-1,0x2,3,10,1,no,0,0,0,weapon,0,0x0,    GS_DESPERADO,Desperado
 
What I understand :
id 516         --> Skill n°516
Range 0     --> Melee (with range 0)
Hit 8           --> repeated hitting
inf 4            --> self
element -1  --> use weapon element
nk 0x2       --> Has splash area
splash 3    --> 7x7 area (3 square around us)

max 10        --> Max lvl 10
list_num 1 --> When it hits, it hits once
castcancel no  --> Cannot be interrupted
cast_defense_rate 0  --> Our DEF is not reduced for the duration of the skill
inf2 0             --> Nothing specific here
maxcount 0  --> No limit of stacking on the same squares
skill_type weapon  --> weapon-type attack
blow_count 0         --> It does not knockback
inf3 0x0  --> Nothing specific here
name GS_DESPERADO
description Desperado
 
 

2) skill_unit_db

 

What is written :
516,0x86,    ,  3, 0, 100,enemy, 0x000    //GS_DESPERADO
 
What I understand from it :
id 516  --> Skill n°516
Unit ID 0x86         --> ??? Nothing's written about it in the file and I'd like to understand this one
Unit ID 2 *empty* --> ??? Nothing's written about it in the file
Layout 3          --> 7x7 Area
Range 0          --> No Range (automatically casted with the Gunslinger as center of the area)
Interval 100     --> ??? Nothing's written about it but I assume it's the number of milliseconds between each potential attack, knowing the skill is active for 1sec and may hit until 10 times, so 1 chance to hit every 0,1s
Target enemy  --> The area affects ennemies

Flag 0x000      --> ??? I assume it's nothing specific
 
 

3) skill_cast_db

 
What is written :
//-- GS_DESPERADO
516,0,1000,1000,1000,0,0
 
What I understand :
SkillID    516        --> Skill n°516
CastingTime 0     --> No Cast
AfterCastActDelay 1000     --> 1sec ACD (After Cast Delay)
AfterCastWalkDelay 1000  --> Cannot move for 1sec when the skill is used.
Duration1 1000   --> The area of effect remains for 1second (important with the "Interval 100" seen previously in skill_unit_db to explain the maximum 10 hits).
Duration2 0         -->
Cool Down 0       --> No Cooldown, so limited only by ACD and ASPD (if ASPD < ACD)
 
 
4) skill.c : the part I dont succeed to understand but which I think is the solution
 
It's in this part :
// Set skill unit
limit = group->limit;
for( i = 0; i < layout->count; i++ ) {
struct skill_unit *unit;
int ux = x + layout->dx;
int uy = y + layout->dy;
int unit_val1 = skill_lv;
int unit_val2 = 0;
int alive = 1;

// are the coordinates out of range?
if( ux <= 0 || uy <= 0 || ux >= map[src->m].xs || uy >= map[src->m].ys ){
continue;
}

if( !group->state.song_dance && !map_getcell(src->m,ux,uy,CELL_CHKREACH) )
continue; // don't place skill units on walls (except for songs/dances/encores)
if( battle_config.skill_wall_check && unit_flag&UF_PATHCHECK && !path_search_long(NULL,src->m,ux,uy,x,y,CELL_CHKWALL) )
continue; // no path between cell and center of casting.

switch( skill_id ) {
// HP for Skill unit that can be damaged, see also skill_unit_ondamaged
case GS_DESPERADO:
unit_val1 = abs(layout->dx);
unit_val2 = abs(layout->dy);
if (unit_val1 < 2 || unit_val2 < 2) { //Nearby cross, linear decrease with no diagonals
if (unit_val2 > unit_val1) unit_val1 = unit_val2;
if (unit_val1) unit_val1--;
unit_val1 = 36 -12*unit_val1;
} else //Diagonal edges
unit_val1 = 28 -4*unit_val1 -4*unit_val2;
if (unit_val1 < 1) unit_val1 = 1;
unit_val2 = 0;
break;

 

And further in the same file but in another part which is too long to quote imo :
case GS_DESPERADO:
if (rnd()%100 < unit->val1)
skill_attack(BF_WEAPON,ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0);


I don't get if it really helps to understand how does Desperado chances to hit works, and how it works depending on the range.
 
I hope someone will be able to explain me how to understand this unique skill and how it works please, and don't hesitate to tell me if I forgot to show some other part which could help to explain how the skill works.
 
 
By the way, I found in skill.conf (in trunk/conf/battle/skill.conf) a line where is written :
// Can't place unlimited land skills at the same time (Note 3)
land_skill_limit: 9
 
Does it mean that if in a precast, behind a Loki, I have 3 Gunslingers with 190ASPD and affected by Bragi, so 5 Desperado per seconds, we can't have more than 9 Desperado's area of effect at the same time instead of 15 ? Or it's just that we can't have more than 9 hits simultaneously on the same square on the same target ? or something else?
 
 
Thank you for every awnsers which could help to me to understand all those mecanics.
And sorry for my english, it's not my native language and I hope each line I wrote are not gouging your eyes out ! ;)

Edited by Jessie Rocket
Link to comment
Share on other sites

3 answers to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  5
  • Reputation:   0
  • Joined:  06/07/15
  • Last Seen:  

Up

I'd like to know how the random number of hit of Desperado is calculated depending on the distance between the Gunslinger and the ennemy, please.

Thank you to whoever can help me.

Edited by Jessie Rocket
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  5
  • Reputation:   0
  • Joined:  06/07/15
  • Last Seen:  

Sorry to up again that topic, I really would like to know if someone has at least an idea of where I should get the information, or if Im in the right section of the forum to get such an information. (the tl;dr is the little post just above this one)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  14
  • Topics Per Day:  0.00
  • Content Count:  265
  • Reputation:   95
  • Joined:  09/30/14
  • Last Seen:  

I'm pretty sure it's exactly those two segments you listed:

 

src/map/skill.c:

if (rnd()%100 < unit->val1)
			case GS_DESPERADO:
				unit_val1 = abs(layout->dx[i]);
				unit_val2 = abs(layout->dy[i]);
				if (unit_val1 < 2 || unit_val2 < 2) { //Nearby cross, linear decrease with no diagonals
					if (unit_val2 > unit_val1) unit_val1 = unit_val2;
					if (unit_val1) unit_val1--;
					unit_val1 = 36 -12*unit_val1;
				} else //Diagonal edges
					unit_val1 = 28 -4*unit_val1 -4*unit_val2;
				if (unit_val1 < 1) unit_val1 = 1;
				unit_val2 = 0;
				break;
Edited by Nova
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...