[WIP] Combined custom content thread

Ask for help about creating mods and scripts for Grimrock 2 or share your tips, scripts, tools and assets with other modders here. Warning: forum contains spoilers!
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: [WIP] Combined custom content thread

Post by akroma222 »

UPDATED ORIGINAL POST with:
1. Party timer script
2. Check to see if your party is underwater script
3. Trait manager script (minmay)
4. Skill Manager script
5. Two specific weapons equipped together script
User avatar
Aisuu
Posts: 61
Joined: Fri Oct 31, 2014 2:07 pm

Re: [WIP] Combined custom content thread

Post by Aisuu »

Huge thx akroma :) I wanted to look icon atlas and sounds, but download links doesnt work for me :(
Can someone confirm it or it is just me :(
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: [WIP] Combined custom content thread

Post by akroma222 »

I tried getting there through the Ge.tt main page but the connection is timing out
So Id say it's a problem on their end > not your problem and links should work later
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: [WIP] Combined custom content thread

Post by akroma222 »

Quick update, added:
1. DEAL 2x DMG AGAINST MONSTER TYPE
2. LOCKS AND TRAPS SKILL - CHESTS - keylocked, pickable and trapped
Last edited by akroma222 on Sun Dec 28, 2014 2:48 pm, edited 2 times in total.
User avatar
Drakkan
Posts: 1318
Joined: Mon Dec 31, 2012 12:25 am

Re: [WIP] Combined custom content thread

Post by Drakkan »

hi akroma,

nice to see you still around with lots of new cool stuff !

I have small request, in case you will have some time - regarding this thread
viewtopic.php?f=22&t=8976
I am making some new weapon skills and I wondered if you can help - basicaly i need to script when champion has some skill / trait, that he will get bonus with some kind of weapon (for example trait Axe master will get plus 20 damage when using axe-type weapon, or when having trait Mace master he will ignore some armor when attacking with mace-type weapon etc...)
thanks for any response !
Breath from the unpromising waters.
Eye of the Atlantis
Daveyx0
Posts: 11
Joined: Sat Nov 01, 2014 10:46 am
Location: Netherlands

Re: [WIP] Combined custom content thread

Post by Daveyx0 »

So the sounds for the lizards simply work for everyone? Strangely enough, it gives me: warning: no such sample: ice_lizard_walk. I have a legit version of the game, so I should have the correct dat file. The animations work great though. Anyone had this issue before? I would appreciate any help ;) Also, amazing work on this, akroma!

EDIT: Woops I think I figured it out. New to the community, so Im still learning :)
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: [WIP] Combined custom content thread

Post by akroma222 »

Drakkan, check your thread - I have come up with a solution but personally I think there must be a better way to do it

Daveyx0, thanks hey! Glad you got the lizards making sounds.... and welcome to the community!! :D :D
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: [WIP] Combined custom content thread

Post by akroma222 »

ADDED to original post:
Making extra attacks with power attacks if your champ is of a certain race/class
Check for race/class then return false if not that race/class
SpoilerShow

Code: Select all

{
             		class = "MeleeAttack",
             		name = "thrust1",
			uiName = "Thrust",
			buildup = 1.0,
			chainAction = "thrust2",
			chainActionDelay = 0.2,
			attackPower = 20,
			swipe = "thrust",
			attackSound = "swipe",
			baseDamageStat = "strength",
			pierce = 10,
			accuracy = 10,
             		cooldown = 2.5,
             		energyCost = 15,
			gameEffect = "An accurate and piercing lunge dealing double damage. Zarchtons attack twice.",
             		requirements = { "accuracy", 1},
             		onAttack = function(self,champion,hand)
				champion:playDamageSound()
             		end,
        	},
		{
             		class = "MeleeAttack",
             		name = "thrust2",
			attackPower = 25,
			swipe = "horizontal",
			attackSound = "swipe_special",
			baseDamageStat = "strength",
			pierce = 20,
			accuracy = 20,
             		onAttack = function(self,champion,hand)
				if champion:getRace() ~= "zarchton" then
					return false
				else
					champion:playDamageSound()
				end
             		end,
        	},
User avatar
Drakkan
Posts: 1318
Joined: Mon Dec 31, 2012 12:25 am

Re: [WIP] Combined custom content thread

Post by Drakkan »

Hi akroma,
I have another cool idea which falls into weapon category - firearms this type. I´d like to have weapon, which will use napalm ammo and instead regular attack, it will be shooting fire_bombs. Not sure how to script it exactly and if even possible. just idea - Set basic attack of the weapon to 0 and script on attack(onUse ?) to spawn fire bomb before party ? not sure if you can spawn "throwed" item... or how to do that. maybe instead bomb just spawn some spell effect (like some magma golem meteor spells, I have noticed it in the editor) . please check if you are interested.

here are some basic

Code: Select all

defineObject{
	name = "napalm_thrower",
	baseObject = "base_item",
	components = {
		{
			class = "Model",
	                model = "assets/models/items/hand_cannon.fbx",
		},
		{
			class = "Item",
			uiName = "Napalm Thrower",
			description = "This gun uses concentrated napalm bombs to unleash hell in front of your party.",
			gfxIndex = 330,
			impactSound = "impact_blunt",
			 weight = 10,
 			traits = { "firearm" },
		},
		{
			class = "FirearmAttack",
			attackPower = 0,
			cooldown = 10,
			attackSound = "gun_shot_cannon",
			ammo = "napalm",
			onAttack = function(self)
				-- never jams but can backfire
				self.go.item:setJammed(false)
			end,
			onBackfire = function(self)
				local dust = party:spawn("particle_system")
				dust.particle:setParticleSystem("hit_firearm_large")
				dust:setWorldPositionY(dust:getWorldPositionY() + 1.3)				
			end,
			requirements = { "firearms", 5 },
		},
	},
}
Napalm ammo

Code: Select all

defineObject{
	name = "napalm",
	baseObject = "base_item",
	components = {
		{
			class = "Model",
			model = "assets/models/items/cannon_ball.fbx",
		},
		{
			class = "Item",
			uiName = "Napalm",
			gfxIndex = 339,
			impactSound = "impact_blunt",
			stackable = true,
			projectileRotationSpeed = 10,
			projectileRotationZ = -30,
			 weight = 0.5,
		},
		{
			class = "AmmoItem",
			ammoType = "Napalm",
		},
	},
}

secondary firearm should be similar - working name is Fireburster. As for ammo type, does not matter now (standard pellets could be fine), but instead regular attack, it should spawn fireburst spell. Let me know what you think.
Breath from the unpromising waters.
Eye of the Atlantis
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: [WIP] Combined custom content thread

Post by akroma222 »

I certainly am interested my friend, everyone loves grenade launchers!
At a glance you are on the right track with the 'how' to do it... good, good
Did you ever find Shadowtwist Bow or Noxwood Bow in Labyrinth of Lies??
I have not converted them over yet, but they run in a similar fashion
SpoilerShow

Code: Select all

defineObject{
		name = "twistwood_bow_cursed_quarrel",
		class = "Item",
		uiName = "Shadowtwist Bow",
		model = "mod_assets/models/twistwood_bow.fbx",
		gfxAtlas = "mod_assets/textures/akroma_icons7.tga",
		gfxIndex = 6,
		skill = "assassination",
		requiredLevel = 34,
		rangedWeapon = true,
		ammo = "quarrel",
		attackPower = 40,
		coolDownTime = 6.0,
		attackMethod = "rangedAttack",
		attackSound = "missile01",
		impactSound = "impact_blunt",
		weight = 2.7,
		gameEffect = "**CURSED** - In it's shadowtwist form, Twistwood Bow serves as a dangerous weapon... only Master Assassins armed with tainted quarrels dare weild it.",
		description = "A cursed bow made from the old trees of the Evershifting Wood... this form appears a little more intricate, requiring extreme dexterity, cunning and a desire to kill quickly and effectively.",
}

defineObject{
		name = "twistwood_bow_cursed_poison",
		class = "Item",
		uiName = "Noxwood Bow",
		model = "mod_assets/models/twistwood_bow.fbx",
		gfxAtlas = "mod_assets/textures/akroma_icons7.tga",
		gfxIndex = 6,
		skill = "earth_magic",
		requiredLevel = 34,
		rangedWeapon = true,
		ammo = "arrow",
		attackPower = 40,
		coolDownTime = 4.2,
		attackMethod = "rangedAttack",
		attackSound = "poison_bolt_launch",
		impactSound = "impact_blunt",
		weight = 2.7,
		gameEffect = "**CURSED** - In it's Noxwood form, Twistwood Bow can only be fired safely by Master Geomancers armed with venom tipped arrows. Doing otherwise will seed poison into all surrounding it.",
		description = "A cursed bow made from the old trees of the Evershifting Wood... this form will charge the projectile with a deadly venom, but requires some magical talent to use.",
}
and this is the onAttack script that took care of their tricky attacking conditions (its an unnecessarily long and scary script)
SpoilerShow

Code: Select all

-------------------------------------------------------------------	NOXWOOD BOW
	
	function noxwood(champion,weapon)
		
		for i = 7,8 do
      		local item1 = champion:getItem(i)
      			if item1 and item1.name == "twistwood_bow_cursed_poison" then
					local slot1 = i
					if i == 7 then
						local item2 = champion:getItem(8)
						local s2 = item2:getStackSize()
						if item2 and item2.name == "poison_arrow" or item2.name == "poison_quarrel" then
							if s2 > 0 then
								playSound("poison_bolt_launch")
								if champion:getSkillLevel("earth_magic") >= 50 then
									if checkPosition() == true then
										local dx,dy = getForward(party.facing)
										if party.facing == 0 or party.facing == 2 then
    										for modif = -0.4,0.4,0.1 do
            									shootProjectile("poison_quarrel", party.level, party.x+modif, party.y, party.facing, 12+(modif*2), 0, 0, 0, 0, 0, 35, party, true, originator)
											end
      									else
        									for modif = -0.4,0.4,0.1 do
            									shootProjectile("poison_quarrel", party.level, party.x, party.y+modif, party.facing, 12+(modif*2), 0, 0, 0, 0, 0, 35, party, true, originator)
    										end
										end
										party:playScreenEffect("damage_screen_green")
										hudPrint("Earth Magic Mastery commands Noxwood Bow to fire waves of arrows!")
										return true
									end
								end
								for i = 1,4 do
									party:getChampion(i):setCondition("poison", 40)
								end
								party:playScreenEffect("damage_screen_green")
								playSound("death_cloud")
							else
								playSound("impact_generic")
								hudPrint("Noxwood bow will only fire poisonous missiles...")
								return false
							end
						end
					else
						if i == 8 then
							if item2 and item2.name == "poison_arrow" or item2.name == "poison_quarrel" then
							if s2 > 0 then
								playSound("poison_bolt_launch")
								if champion:getSkillLevel("earth_magic") >= 50 then
									if checkPosition() == true then
										local dx,dy = getForward(party.facing)
										if party.facing == 0 or party.facing == 2 then
    										for modif = -0.4,0.4,0.1 do
            									shootProjectile("poison_quarrel", party.level, party.x+modif, party.y, party.facing, 12+(modif*2), 0, 0, 0, 0, 0, 35, party, true, originator)
											end
      									else
        									for modif = -0.4,0.4,0.1 do
            									shootProjectile("poison_quarrel", party.level, party.x, party.y+modif, party.facing, 12+(modif*2), 0, 0, 0, 0, 0, 35, party, true, originator)
    										end
										end
										party:playScreenEffect("damage_screen_green")
										hudPrint("Earth Magic Mastery commands Noxwood Bow to fire waves of arrows!")
										return true
									end
								end
								for i = 1,4 do
									party:getChampion(i):setCondition("poison", 40)
								end
								party:playScreenEffect("damage_screen_green")
								playSound("death_cloud")
							else
								playSound("impact_generic")
								hudPrint("Noxwood bow will only fire poisonous projectiles...")
								return false
							end
						end
					end
				end
			end
		end
	end

-----------------------------------------------

function shadowtaint(champion,weapon)
		local dx,dy = getForward(party.facing)
		bow_monster = whichMonster(party.level,party.x+dx,party.y+dy)
		if bow_monster ~= "" then
			playSound("spellfizzle1")
			hudPrint("You need more space to loose the Shadowtwist Bow!!")
			return false
		end
		local originator = champion:getOrdinal()
		for i = 7,8 do
      		local item1 = champion:getItem(i)
      			if item1 and item1.name == "twistwood_bow_cursed_quarrel" then
					local slot1 = i
					if i == 7 then
						local item2 = champion:getItem(8)
							local s2 = item2:getStackSize()
							if item2 and item2.name == "tainted_quarrel" then
								if s2 > 0 then
									playSound("dark_missile")
									if champion:getSkillLevel("assassination") >= 50 then
										if checkPosition() == true then
											local dx,dy = getForward(party.facing)
											local originator = champion:getOrdinal()
											shootProjectile("dark_missile", party.level, party.x, party.y, party.facing, 14, 0, 0, 0, 0, 0, 200, party, true, originator)
											for ent in fix.newEntitiesAt(party.level, party.x, party.y) do
        										if ent.name == "dark_missile" then
           			 								fxScripts.addProjectileEffect(ent, "dark_missile", 15, "dark_missile_hit")
        										end
											end
											party:playScreenEffect("damage_screen_black")
											hudPrint("Master Assassins deal quick death from the shadows with tainted weaponary...")
											playSound("blades_gear")
											if s2 >= 2 then
												item2:setStackSize(s2 - 1)
											else
												item2:removeItem(i)
											end
											return true
										end
									else
										for i = 1,4 do
											party:getChampion(i):damage(75, "cold")
										end
										party:playScreenEffect("damage_screen_black")
										hudPrint("Only Master Assassins can safely weild this horrifyingly cursed weapon...")
										playSound("necromorph_unrest")
										return true
									end
								end	
							else
								playSound("damage_insectoid_male")
								hudPrint("Shadow Taint Bow will only fire tainted projectiles by a true assasin...")
								return false
							end
						end
					else
						if i == 8 then
							local originator = champion:getOrdinal()
							local item2 = champion:getItem(8)
							local s2 = item2:getStackSize()
							if item2 and item2.name == "tainted_quarrel" then
								if s2 > 0 then
									playSound("dark_missile")
									if champion:getSkillLevel("assassination") >= 50 then
										if checkPosition() == true then
											local dx,dy = getForward(party.facing)
											local originator = champion:getOrdinal()
											for i = 1,4 do
												party:getChampion(i):setCondition("invisibility", 10)
												party:getChampion(i):setCondition("haste", 10)
											end
											party:playScreenEffect("damage_screen_black")
											hudPrint("Master Assassins deal quick death from the shadows with tainted weaponary...")
											playSound("blades_gear")
											if s2 >= 2 then
												item2:setStackSize(s2 - 1)
											else
												item2:removeItem(i)
											end
											return true
										end
									else
										for i = 1,4 do
											party:getChampion(i):damage(75, "cold")
										end
										party:playScreenEffect("damage_screen_black")
										hudPrint("Only Master Assassins can safely weild this horrifyingly cursed weapon...")
										playSound("necromorph_unrest")
										return true
									end
								end	
							else
								playSound("damage_insectoid_male")
								hudPrint("Shadow Taint Bow will only fire tainted projectiles by a true assasin...")
								return false
							end
						end
					end
				end
			end
	
I probably wont get to the grenade launcher it straight away as Im just finishing up some skills and traits stuff
Probably in a few days?
Post Reply