Exult Logo
 
Home | Download | Documentation | FAQ | Studio | Screen Shots
Development | Discussion | About Us | Letters | History | Links
 
Exult Discussion
Before posting, make sure you've read the FAQ and searched the message board for previous discussions. When reporting problems/bugs, please include details about your setup (Exult version, OS, sound and video cards).

 New Topic  |  Go to Top  |  Go to Topic  |  Search  |  Log In   Newer Topic  |  Older Topic 
 Combat
Author: agentorangeguy 
Date:   01-22-17 18:37

From what I could tell looking at the exult code it's pretty advanced stuff... but I'm wondering if it COULD be fixed to where the distance between targets isn't such a mess? It seems like in the original, they would move around more, such as moving back a few tiles (maybe the max range of the melee weapon?) and striking again. It looked like the various combat types were implemented as far as I could tell but whether or not they work I have no clue.

Additionally, if one were to make individual scripts for all party members on how they behave in combat, would it be possible? Such as if someone was assigned to "Flank", if it would be possible for that party member's script to calculate their distance from the Avatar during combat every so often and actually "flank" them such as it did in U6 engine, relocating to that tile and attacking the nearest enemy?

It's time we take a good look at combat... especially since there have been several new mod work springing up and the forums are active again! :D

-------------------------------------------------------------------------------------
Ultima 6 Mod for Exult site: http://www.ultima6.realmofultima.com/

Reply To This Message
 
 Re: Combat
Author: Gotcha! (---.adsl.xs4all.nl)
Date:   01-22-17 19:02

It'd be great if this would be looked into.
This and the broken npc schedules (npc's not setting tables, not using shutters/streetlights etc.) are the only two things keeping Exult away from near-perfection. :)

Reply To This Message
 
 Re: Combat
Author: KC via VAX (---.sub-174-192-30.myvzw.com)
Date:   01-23-17 02:41

Agreed, these areas need love. It looks silly when a bowman walks up to his target.

Reply To This Message
 
 Re: Combat
Author: agentorangeguy 
Date:   01-23-17 21:26

Yeah, it's almost like they shoot once then run up to the target like they are carrying a melee weapon and shoot them at point blank range. I'm wondering if a distance check is off somehow?

-------------------------------------------------------------------------------------
Ultima 6 Mod for Exult site: http://www.ultima6.realmofultima.com/

Reply To This Message
 
 Re: Combat
Author: agentorangeguy 
Date:   02-03-17 14:26

If someone wanted to do a minor fix to ranged combat, would it be possible to add code to a ranged weapon to have the user check proper ranges from their target or would it not override the main combat functions?

-------------------------------------------------------------------------------------
Ultima 6 Mod for Exult site: http://www.ultima6.realmofultima.com/

Reply To This Message
 
 Re: Combat
Author: Knight Captain 
Date:   02-03-17 16:47

It would have to be done in the Exult engine itself, and should affect all ranged weapons. For example, if Luther has a halberd and Templar has a sword, Luther should step back so Templar can't hit him.

Reply To This Message
 
 Re: Combat
Author: agentorangeguy 
Date:   02-08-17 16:53

It's depressing combat is the red headed stepchild of Exult lol. It's downright awful and is detrimental to gameplay... is anyone still actively looking into it?

-------------------------------------------------------------------------------------
Ultima 6 Mod for Exult site: http://www.ultima6.realmofultima.com/

Reply To This Message
 
 Re: Combat
Author: TDI (---.hsi8.kabel-badenwuerttembe)
Date:   02-08-17 21:57

Yeah, NPC schedules and combat are what is holding Exult back. I really enjoy messing around with Exult for the mods and extended features, but whenever I want to experience the world of Ultima 7 in its fantastic glory, I boot up the original in Dosbox.

It's just a joy to watch Sentri shoot a few arrows at his archery target and then pull out his sword to have a go at the training dummy. In Exult he weirdly walks back and forth between the two and gives each a single whack of his sword.
And of course the crazy intricate waiter schedules where they walk back and forth between kitchen and clients, ask them what they want to have and place food on the plates that actually gets eaten. Ultima 7 might be the only game in the world that has this kind of detail, much of which is still quite wonky in Exult.
Some of the schedules are already quite good in Exult, such as baking or tailoring, but they don't look as fluid or natural as in the original. For example, the tailor in Exult will arrange clothing items in a pattern starting from the very top left of a table, which looks very unnatural. In the original the NPC simply puts the clothes on the table nearby, next to a position from where she is standing.

Also the combat system of the original might look deceptively simple and chaotic at first glance, but is actually quite complex and smart about a few things. Characters with high agility/combat will actually strike an enemy, take a few steps back to avoid getting hit by the enemy on his next strike, and then strike again when the enemy moves within range. You can observe agile characters wear down stronger opponents like this, using their superior mobility. And still the stronger, slower opponent is not at complete disadvantage. Sometimes the timing will be a bit off and the stronger guy land a hit, possibly taking out the agile fighter. Great stuff.
Kinda like that fight between the Mountain and Oberyn in Game of Thrones. :D

I'm really looking forward to the day I can drop Dosbox and boot up Exult with all its modded glory to serve my nostalgic needs and then some, but that day has not yet come.

Reply To This Message
 
 Re: Combat
Author: TDI (---.hsi8.kabel-badenwuerttembe)
Date:   02-08-17 22:13

Of course one thing Exult could certainly improve on the original is to stop projectiles from hitting your own party members in their backs, making ranged weapons a little less self destructive and a little more feasible.
Everybody knows the most dangerous enemy in U7 is a triple-crossbow armed Iolo.

Reply To This Message
 
 Re: Combat
Author: Dominus 
Date:   02-08-17 22:28

I think, while Exult needs a lot of combat work, hitting your own party members in the back has been eliminated (or it was at one point).
Sadly no one wants to take on combat :(

--
Read the documentation and the FAQ are your friends! There is no excuse for not reading them! RTFM
Read the Rules!
We do not support Piracy/Abandonware/Warez!

Reply To This Message
 
 Re: Combat
Author: agentorangeguy 
Date:   02-16-17 15:17

I believe in the original if you used magic arrows/bolts they wouldn't hit you in the back.

If I knew what I was doing, I'd totally take a look at combat and fix it. It's been a long neglected area of Exult.

-------------------------------------------------------------------------------------
Ultima 6 Mod for Exult site: http://www.ultima6.realmofultima.com/

Reply To This Message
 
 Re: Combat
Author: Alexander (---.ri.ri.cox.net)
Date:   02-17-17 15:32

I also noticed the List Field has some issues.

A lot of the time when training, my companions will attack the wrong person - going after Templar, for example, who doesn't even train people, when they're supposed to be attacking Caladin or Shazzanna.

A couple times they'll even defeat the (wrong) person they're attacking, who will run away yelling "I give up!", only for them to keep attacking the fleeing, wrong opponent - meanwhile their real trainer is beating on them with a sword or shooting them full of arrows. I guess mercy isn't one of the eight Virtues.

Reply To This Message
 
 Re: Combat
Author: agentorangeguy 
Date:   02-21-17 18:20

I was digging around in the combat.cc file, and found this:

/*
 *  Begin a strike at the opponent.
 */

void Combat_schedule::start_strike(
) {
	Game_object *opponent = npc->get_target();
	bool check_lof = !no_blocking;
	// Get difference in lift.
	Weapon_info *winf = weapon_shape >= 0 ?
	                    ShapeID::get_info(weapon_shape).get_weapon_info() : 0;
	int dist = npc->distance(opponent);
	int reach;
	if (!winf) {
		Monster_info *minf = npc->get_info().get_monster_info();
		reach = minf ? minf->get_reach() : Monster_info::get_default()->get_reach();
	} else
		reach = winf->get_range();
	bool ranged = not_in_melee_range(winf, dist, reach);
	// Out of range?
	if (!spellbook && npc->get_effective_range(winf, reach) < dist) {
		state = approach;
		approach_foe();     // Get a path.
		return;
	} else if (spellbook || ranged) {
		bool weapon_dead = false;
		if (spellbook)
			weapon_dead = !spellbook->can_do_spell(npc);
		else if (winf) {
			// See if we can fire spell/projectile.
			Game_object *ammo = 0;
			int need_ammo = npc->get_weapon_ammo(weapon_shape,
			                                     winf->get_ammo_consumed(), winf->get_projectile(),
			                                     ranged, &ammo);
			if (need_ammo && !ammo && !npc->ready_ammo())
				weapon_dead = true;
		}
		if (weapon_dead) {
			// Out of ammo/reagents/charges.
			if (npc->get_schedule_type() != Schedule::duel) {
				// Look in pack for ammo.
				if (Swap_weapons(npc))
					Combat_schedule::set_weapon();
				else
					set_hand_to_hand();
			}
			if (!npc->get_info().has_strange_movement())
				npc->change_frame(npc->get_dir_framenum(
				                      Actor::standing));
			state = approach;
			npc->set_target(0);
			npc->start(200, 500);
			return;
		}
		state = fire;       // Clear to go.
	} else {
		check_lof = (reach > 1);
		state = strike;
	}
	// At this point, we're within range, with state set.
	if (check_lof &&
	        !Fast_pathfinder_client::is_straight_path(npc, opponent)) {
		state = approach;
		approach_foe(true); // Try to get adjacent.
		return;
	}
	if (!started_battle)
		start_battle(); // Play music if first time.
	// Some battle cries. Guessing at where to do it, and how often.
	if (yelled && !(rand() % 20)) {
		if (npc->is_goblin())
			npc->say(first_goblin_taunt, last_goblin_taunt);
		else if (can_yell)
			npc->say(first_taunt, last_taunt);
	}
	if (combat_trace) {
		cout << npc->get_name() << " attacks " << opponent->get_name() << endl;
	}
	int dir = npc->get_direction(opponent);
	signed char frames[12];     // Get frames to show.
	int cnt = npc->get_attack_frames(weapon_shape, ranged, dir, frames);
	if (cnt)
		npc->set_action(new Frames_actor_action(frames, cnt, gwin->get_std_delay()));
	npc->start();           // Get back into time queue.
	int sfx = -1;           // Play sfx.
	if (winf)
		sfx = winf->get_sfx();
	if (sfx < 0 || !winf) {
		Monster_info *minf = ShapeID::get_info(
		                         npc->get_shapenum()).get_monster_info();
		if (minf)
			sfx = minf->get_hitsfx();
	}
	if (sfx >= 0) {
		int delay = ranged ? cnt : cnt / 2;
		new Object_sfx(npc, sfx, delay * gwin->get_std_delay());
	}
	dex_points -= dex_to_attack;
}



From what I gather, that determines distance from the target? Is there something missing from this to make them swarm the target? Please Exult gurus, combat must be fixed... it needs some much needed love! :D

-------------------------------------------------------------------------------------
Ultima 6 Mod for Exult site: http://www.ultima6.realmofultima.com/

Reply To This Message
 
 Re: Combat
Author: Knight Captain 
Date:   02-21-17 20:34

That's why it doesn't include backing up when you have more melee range than your opponent.

Reply To This Message
 Go to Top  |  Go to Topic  |  Threaded View   Newer Topic  |  Older Topic 


 
 Reply To This Message
 Your Name:
 Your E-mail:
 Subject:
 Subject:
   
 
SourceForge   phorum.org
 
Problems with Exult or this webpage? Contact us.
Last modified: 24 Oct 2001(GMT)