#2596 posted by Kinn on 2018/07/18 16:25:22
Make some minor changes to the micturating ogre model to give it a more ejaculatory flavour, and boom - cool new projectile attack.
#2597 posted by Qmaster on 2018/07/18 18:48:28
local .entity spot;
That Was A Bit Disturbing Actually
#2598 posted by Qmaster on 2018/07/18 18:48:56
#2599 posted by Kinn on 2018/07/18 20:38:41
The way the ogre's balls rhythmically scrunch up on each cycle suggests we're getting something a little bit extra, not just urine.
Make It Happen Madfox
#2600 posted by mfx on 2018/07/18 20:54:33
I Regret Having Been A Part Of This.
#2601 posted by Qmaster on 2018/07/19 01:35:04
Don't forget to do a particle(self.leakentity.origin,'0 0 0',60,18); for added effect
I Screwed Myself Almost Geek On Those Fucking Flies!
#2602 posted by madfox on 2018/07/19 03:22:13
I could have suspect these intimate subroutines would lead to hillaric reactions, but..,
my bike had a leak last christ, and I wonder who'll pay the fiddler off.
I suggest kinn giving it a good smile sound.
Thanks Qmaster, I didn't warn you before I asked your help with my q1test. But you're welcome. I tried your email, but it didn't work.
Right, so I'll start with
local .entity spot;
The extra effects, it's like knowing the name of the statement, but not where to paist it in.
I Changed
#2603 posted by madfox on 2018/07/19 04:12:56
in PlayerDeathThink after the buttons:
self.button2 = 0;
respawn();
//===new code===
local float entity spot;
local .entity spot;
spot = find (world,classname,"monster_ogreaxe");
if ( spot ) {find (world,classname,"monster_ogreaxe");
spot.think = ai_leak1;
spot.leakentity = self;
}
};
//===end code===
error: no spot value.
then I added to defs qc line 139 :
.float skin;
.float effects;
//===new code==
.float spot;
//===end code==
Client.qc:812: error: type mismatch = (FIELDTYPE and entity)
#2604 posted by Spike on 2018/07/19 04:59:41
local entity spot;
no extra dot
(you want an entity, and not a field reference[of sub-type entity])
#2605 posted by Kinn on 2018/07/19 12:40:59
my bike had a leak last christ, and I wonder who'll pay the fiddler off.
I suggest kinn giving it a good smile sound.
I...just...I...but...nothing.
Stumbling Is A Kind Of Laugh
#2606 posted by madfox on 2018/07/20 14:59:55
Appoligize my passionated reaktion, as I'm stupid enough to write down my nonsense before my smart conclusion starts reasoning.:P
Thanks Spike. Now I'm back at start with:
//=========new code===========
local float entity spot;
local entity spot;
spot = find (world,classname,"monster_xogre");
if ( spot ) {find (world,classname,"monster_xogre");
spot.think = ai_leak1;
spot.leakentity = self;
}
};
//====================end code==
client.qc:808: error: local not a type
client.qc:808: error: spot not a type
client.qc:808: error: if not a type
client.qc:808: error: self not a type
#2607 posted by Spike on 2018/07/20 16:13:14
local entity spot;
just that.
not 'local float entity spot;' - that's meaningless conflicting keywords.
#2608 posted by madfox on 2018/07/20 18:54:30
yes, but as soon as I add a line in client.qc before ClientObituary I receive the error "local" and "spot not a type".
How do I make them to a right statement?
Ah
#2609 posted by madfox on 2018/07/20 19:20:50
I changed some parms
void() ai_leak =
{
local entity spot;
spot = find (world,classname,"monster_xogre");
if ( spot ) {find (world,classname,"monster_xogre");
{
spot.think = xogre_leak1;
// spot.leakentity = self;
return;
}
}
};
if I exclude spot.leakentity it compiles well,
warning that "Local "spot" not defined with a name of a global"
Wow, I've got an ai_leak!
What should be the next step?
#2610 posted by anonymous user on 2018/07/20 21:48:54
if ( spot ) {find (world,classname,"monster_xogre");
{
local entity pissee;
spot.think = xogre_leak1;
if ( pissee ) {find (world,classname,"monster_donaldjtrump")
spot.enemy = pissee;
QuakeC Locals And Globals
#2611 posted by Qmaster on 2018/07/20 22:19:08
local makes that variable only work within the function--inside {} and ONLY after it has been declared (pretty sure about this second part).
Globals are any variable defined outside, e.g. in defs.qc (at the bottom of defs.qc anyways)
You need to define a .entity leakentity; somewhere outside a function and before you use it in client.qc.
E.g.
.entity leakentity; // entity to remember for later so the monster knows where to go take a leak
void ClientObituary() {
local entity spot; // entity to hold our axe ogre
//your find down here
...
};
I'll let you figure out how to make the monster hunt down the player location and then begin the actual taking a leak.
Ho
#2612 posted by madfox on 2018/07/21 14:43:14
I'm back in PlayerDeathThink.
spot.think = xogre_leak1;
error: xogre_leak1 unknown value.
I can make a "void() xogre_leak;" at the top of the client.qc list,
but it keeps the error.
Wait
#2613 posted by madfox on 2018/07/21 15:26:06
There is something I need to explain first. As I mentioned before I am working in the Q1Test environnement. Also I added the Dragon code, rubicon.qc as some other feathers. I also wanted to add a catapult in stead of an axe.
One thing I would like to keep original to the Q1test mod.
Sounds, conback, weapons, and monsters. Reason I add the Axe ogre and Serpent, Vormitus, as the Shalrath's queer apearance is, because that were the trivial things that were not implemented. The dragon form Megalol had a solution, but the mod from Patrick Martin I included has a more sensitive way.
So I started with the "poor" q1test src, and slowly tried to find a way through the queer qc that was forehand. No Axe, nowammu_cells plz, and other butheads, like no change_level, just the stripped down qc to deathmatch.
Now I'm at the point that I'm testing the monsters, but it gets a little tricky , when I would assume the errors I get involved in are not the ones that apear in normal vqcc106.
Enough, I've got ai_leak that compiles.
//=========================================
After ClientObituary:
local float rnum;
local string deathstring,deathstring2;
local entity spot; // entity to hold our axe ogre
if ( spot ) {find (world,classname,"monster_xogre");
{
local entity leak;
spot.think = xogre_leak1;
}
}
rnum = random();
if (targ.classname == "player")
//=========================================
I had to add a new statement at the top for xogre_leak1 as it was not a value.
How do I make it aware for the player's death?
Queer Or Queen
#2614 posted by spy on 2018/07/21 15:32:17
Um, Compile With Fteqccgui?
#2615 posted by Qmaster on 2018/07/22 02:59:38
Qmaster
#2616 posted by madfox on 2018/07/22 16:10:42
I use fteccgui as fteqccgui. I can compile the client.qc but I have no idea how to make it correspond the player's death. I think it needs some more code.
local entity spot; // entity to hold our axe ogre
if ( spot ) {find (world,classname,"player");
{
local entity leak;
spot.think = xogre_leak1;
}
}
I tried your email, but it faints.
#2617 posted by madfox on 2018/07/24 19:26:02
gimmy a hint!
#2618 posted by Qmaster on 2018/07/24 19:55:54
Set spot.goalentity to player perhaps.
#2619 posted by Spike on 2018/07/24 20:56:54
if(spot)
that does nothing. spot isn't initialised yet. if this was C you'd crash. As this is QC, it'll just always evaluate to false and do absolutely nothing.
find (world,classname,"player");
this does nothing. you're calling the function and finding a player, but as you're throwing away the result you're not getting anything out of it.
Of course, seeing as the player has just died, the return value is probably going to be equal to 'targ' anyway. You probably meant to look for a different classname, like your ogre's classname.
local entity leak;
Variable not referenced: leak
the weirdly named 'spot' variable is used, but leak totally unused...
spot.think = xogre_leak1;
You didn't check that 'spot' is actually alive.
Your dead ogre will suddenly resurrect purely to take a leak!
Lets hope its not a gibbed head. :D
Note that there's no loop, so only one entity could possibly start pissing (except that spot is always world so you're probably just going to crash the server with your assignment to world, if the if statement wasn't there).
Imho, you should shove the check somewhere in ai_run.
When a monster's enemy has died, that function decides whether the monster should resume attacking its oldenemy or whether it should resume walking/standing instead.
So when the enemy dies, delay the standing and switch to the pissy animation instead (make sure its an 'xogre' that's doing the ai_running first, and make sure it doesn't forget its enemy just yet).
That way you don't risk waking monsters from the other side of the map (which might get quite crowded, and really awkward in coop).
and then you can dupe the walking animations to have the monster walk to the player's corpse and then start to pee only when its close.
then once its done pissing, you can have it start to play some point+laugh loop, or just have a constant stream of pee until something else wakes it up by shooting it (or make the looping part call ai_stand to have it wake up if another player gets close).
Id1 Source Code Circa 2018
I've taken the plunge into cut and pasting QC. What's the "state of the art" clean id1 source code I should be using in 2018?
|