Official IVAN Continuation thread Sticky

Mar 10, 2014, 7:13 pm
#76
Joined: Dec 4, 2007
Occupation: Perfect Soldier
Location: Astragius Galaxy
Interests: Fiana, Peace, Melons
Posts: 1,054
If I'm not entirely mistaken, the entire reason that this happened to begin with is because the other ommel materials are all liquids, not because they came from an ommel.
Mar 10, 2014, 7:14 pm
#77
Joined: Dec 11, 2008
Posts: 1,770
Warheck wrote
Mustard gas hostility bug (this is a darned tricky one)
Any suggestions?

This one isn't much of a problem outside of LIVAN because mustard gas is nowhere near as powerful in CVS.
I'd be inclined to leave it in, as along with that you're unlikely to find enough mustard gas grenades in a single playthrough to make the mustard gas exploit viable.
Mar 10, 2014, 9:15 pm
#78
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
4zb4 wrote
This one isn't much of a problem outside of LIVAN because mustard gas is nowhere near as powerful in CVS.
I'd be inclined to leave it in, as along with that you're unlikely to find enough mustard gas grenades in a single playthrough to make the mustard gas exploit viable.

Hmm, yeah I see the argument. I tried it out in CVS and it is still possible to take out the high priest with one grenade. I think the AI should be given a chance to respond to it as if it were a terrorist attack.

EDIT: Maybe one way to induce hostility could be to include a small explosive effect when the gas grenade explodes. People who are smart enough should move to step out of mustard gas as well.

I also notice that the holy hand grenade doesn't disappear off to the dwarf room when it is donated to the Cathedral. Even when it is armed...
Mar 10, 2014, 11:34 pm
#79
Joined: Dec 11, 2008
Posts: 1,770
Warheck wrote
People who are smart enough should move to step out of mustard gas as well.

This seems like a good solution. Isn't there a tag you can just put on the mustard gas material to stop creatures above a certain intelligence stepping in it, much like there is one for consuming dangerous items?
Mar 11, 2014, 12:22 am
#80
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
4zb4 wrote
This seems like a good solution. Isn't there a tag you can just put on the mustard gas material to stop creatures above a certain intelligence stepping in it, much like there is one for consuming dangerous items?

It's true that the AI will not step into it, but it needs some more code to get the AI to step out of it. All it needs is a check for presence of dangerous gas during StandIdleAI();
Then some sort of command to move away (in biology they call this "chemotaxis").

EDIT: Har har! tested this one out and it works. Lots of fun :3
Holy hand grenade pull pin and drop in cathedral go to dwarf room:
in miscitem.h:
ITEM(holyhandgrenade, item)
{
 public:
  ...
	virtual truth IsKamikazeWeapon(ccharacter*) const { return CalculateHasBe(); }
	...
}
Mar 11, 2014, 10:32 am
#81
capristo's avatar
The Imperialist


Joined: Dec 2, 2007
Location: New Attnam
Interests: bananas
Posts: 2,142
Awesome work Warheck. Have you pushed any of these to Github yet?
Mar 12, 2014, 3:45 am
#82
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
The work has been pushed. (Did it turn out right?). Cap, how will we compile and release forthcoming revisions?

Mustard gas hostility bug
Still facilitates masochism, and fixes the NPC staying in the gas cloud by virtue of the hostility change. Fixed using the following code, and some tweaks to instances of GasExplosion() in miscitem.cpp, level.cpp, gear.cpp and level.h.
void level::GasExplosion(gas* GasMaterial, lsquare* Square, character* Terrorist) 
{
  for(int d = 0; d < 9; ++d)
  {
    lsquare* Neighbour = Square->GetNeighbourLSquare(d);

    if(Neighbour && Neighbour->IsFlyable())
      Neighbour->AddSmoke(static_cast<gas*>(GasMaterial->SpawnMore(1000)));
			
    if(Neighbour)
    {
      character* Victim = Neighbour->GetCharacter();

      if(Victim)
	Terrorist->Hostility(Victim);
    }
  } 
}
Apr 6, 2014, 3:54 pm
#83
Joined: Feb 20, 2012
Posts: 231
Warheck wrote
Mustard gas hostility bug
Still facilitates masochism, and fixes the NPC staying in the gas cloud by virtue of the hostility change. Fixed using the following code, and some tweaks to instances of GasExplosion() in miscitem.cpp, level.cpp, gear.cpp and level.h.

This introduced a bug that caused the game to crash if the player stepped on a mine while carrying a gas grenade. I managed to fix it by altering

if(Victim)
	Terrorist->Hostility(Victim);

to

if(Victim && !Victim->IsPlayer())
	Terrorist->Hostility(Victim);

It will still crash if an NPC is hit by a mine-activated grenade, but the chances of that happening unintentionally are fairly low, so it shouldn't be too much of an issue. A more permanent solution would be not to set hostility in the case the grenade was activated by a mine (therefore no Terrorist to assign the hostility to), but that may be beyond my capabilities.
Apr 7, 2014, 3:27 pm
#84
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
Hey great bug fixing Pent! Did you push it to the repo?
Mines might activate gas grenades quite often, it is always sad to lose a game due to bugs, so we should probably find a solution to this as well. I'll have a go at reproducing this bug and try think of a fix for the grenade activated by a mine.

EDIT: I think there should just be a check in the logic to see whether terrorist is not the null-terrorist (i.e. zero).
Apr 7, 2014, 4:34 pm
#85
Joined: Feb 20, 2012
Posts: 231
Warheck wrote
EDIT: I think there should just be a check in the logic to see whether terrorist is not the null-terrorist (i.e. zero).

I tried changing it to:

if(Victim && Terrorist)
	Terrorist->Hostility(Victim);

and it seems to work now. I'll do a bit more testing to make sure it works properly. I didn't push the last one to the repo (I don't think I have the power to push changes anyways).
Apr 9, 2014, 12:16 pm
#86
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
You should really get push rights Pent. Ask Cap.
Apr 15, 2014, 10:28 pm
#87
Joined: Feb 20, 2012
Posts: 231
Created a quick fix for the bug that causes Silva to crash the game in GC6. Praying to Silva there will spawn wolves instead of starting an earthquake:

In gods.cpp:
void silva::PrayGoodEffect()
{

    // ...

  if(!game::GetCurrentLevel()->IsOnGround() && !game::GetCurrentLevel()->GetLevelScript()->IsZombieLevel())
  {
    ADD_MESSAGE("Suddenly a horrible earthquake shakes the level.");
    
   // ...
}

In script.h:

class levelscript : public scriptwithbase
{
  // ...
  SCRIPT_TRUTH_WITH_BASE(IsCatacomb);
  SCRIPT_MEMBER_WITH_BASE(festring, EnterImage);
  SCRIPT_MEMBER_WITH_BASE(v2, EnterTextDisplacement);
  SCRIPT_TRUTH_WITH_BASE(IsZombieLevel);
};

In script.cpp:

void levelscript::InitDataMap()
{
  // ...
  INIT_ENTRY(EnterTextDisplacement);
  INIT_ENTRY(IsZombieLevel);
}

In dungeon.dat:

 Level ZOMBIE_LEVEL;
  {
    Rooms = 1;
    IsZombieLevel = true;
    IgnoreDefaultSpecialSquares = true;
    MonsterAmountBase = 20;
    LOSModifier = 24;
    FillSquare = FLINT solidterrain(GROUND), GNEISS earth;
    //...
   }

Tomorrow I'll poke around and see if I can figure out why the earthquake causes the crash on that level (if anyone knows anything about this any info would be greatly appreciated), but failing that this should work nicely.
Apr 15, 2014, 11:36 pm
#88
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,825
It crashes that level because the earthquake works by taking chunks of stone wall and throwing them about. There is no wall that can be used as such in GC6, hence the apocalyptic result.
Apr 16, 2014, 9:56 am
#89
[Eire]MadHatter's avatar
mutant ass


Joined: Feb 5, 2014
Occupation: Sysnet Tech Support
Location: Dublin, Ireland
Interests: Computers
Posts: 59
What if instead of an earthquake the game gives the player a pack of wolfs?

if level is equal to [zombie level] give wolfs? instead of earthquake....or simply...you feel she is pleased and nothing happens.
Apr 16, 2014, 9:57 am
#90
Joined: Feb 20, 2012
Posts: 231
Alright, it is now properly fixed, and Silva can trigger earthquakes in GC6.

In gods.cpp:

void silva::PrayGoodEffect()
{

    // ...

  if(!game::GetCurrentLevel()->IsOnGround())
  {
    ADD_MESSAGE("Suddenly a horrible earthquake shakes the level.");
    int c, Tunnels = 2 + RAND() % 3;
    if (game::GetCurrentLevel()->GetLevelScript()->IsZombieLevel()) 
		Tunnels = 0;
   // ...
}
Apr 16, 2014, 11:31 pm
#91
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,825
Well, I won't pretend to know how to read code, but good job fixing it!
Apr 17, 2014, 3:48 am
#92
[Eire]MadHatter's avatar
mutant ass


Joined: Feb 5, 2014
Occupation: Sysnet Tech Support
Location: Dublin, Ireland
Interests: Computers
Posts: 59
    if (game::GetCurrentLevel()->GetLevelScript()->IsZombieLevel()) 
		Tunnels = 0;

Tunnels = 0;



I think i get it.
instead of moving any rock it just does the event with no effect.

Like throwing a gas grenade at a gas-immunity enemy .
Apr 17, 2014, 9:26 am
#93
Joined: Feb 20, 2012
Posts: 231
chaostrom wrote
Well, I won't pretend to know how to read code, but good job fixing it!

" wrote
MadHatter"]
I think i get it.
instead of moving any rock it just does the event with no effect.

Like throwing a gas grenade at a gas-immunity enemy .


Well, I don't fully understand it, and it could likely be solved more elegantly than adding a new script flag for that one stage*, but it seems to have something to do with the game attaching squares to existing tunnels when picking which walls to destroy for the earthquake. Since GC6 is just one large room with no tunnels, it gets stuck looking for squares it can "attach" to, since there aren't any. Setting Tunnels to 0 allows it to skip over that step and it will just destroy some of the walls of GC6 instead.

*EDIT: Yep, it can:
if (game::GetCurrentLevelIndex() == ZOMBIE_LEVEL) 
    Tunnels = 0;
Apr 17, 2014, 11:24 am
#94
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
Good bug fixing Pent
The funny thing about GC6 is that in the dungeon script, it is just one big room, with no doors or anything. Just creatures and stairwells.
Apr 18, 2014, 3:35 am
#95
[Eire]MadHatter's avatar
mutant ass


Joined: Feb 5, 2014
Occupation: Sysnet Tech Support
Location: Dublin, Ireland
Interests: Computers
Posts: 59
I've done some wizard mode on the level....just some messing around.
If you noclip into the walls and just wait.
Mushrooms will just Fill up the entire level![Well for me anyway]


The only real way to survive that round is just to run......and hope to dear god you find the exit..

I didn't think of it at the time.....But could you use a scroll of detect material and enter the staircase material to find the other exit?
Apr 18, 2014, 5:11 am
#96
Joined: Dec 11, 2008
Posts: 1,770
MadHatter wrote
I didn't think of it at the time.....But could you use a scroll of detect material and enter the staircase material to find the other exit?

You sure can. It's also useful for finding secret rooms that you have to tunnel/teleport into, and locating the enner beast so you don't run right into him and strike up a fatal conversation.
Apr 18, 2014, 8:11 am
#97
Joined: Feb 20, 2012
Posts: 231
I pulled off a High Priest victory in CLIVAN once (still my only IVAN victory to date; I came close to a Freedom victory in CVS a few months back but Sherry caught me on the way back up). After I'd taken down Elpuri with relative ease, I decided to keep going, but was so scared that I stocked up on detect scrolls (I think I even cloned a few) and just detected the staircases and teleported through each floor. Once I got to the next to last floor I forgot what the portal to Oree's lair was made of and had to teleport into the middle of that large room and frantically search for a way out.
Apr 18, 2014, 9:15 am
#98
[Eire]MadHatter's avatar
mutant ass


Joined: Feb 5, 2014
Occupation: Sysnet Tech Support
Location: Dublin, Ireland
Interests: Computers
Posts: 59
The odd time I'd use a detect material to detect the wood of the levels...

Say fir or balsa
It works fine location even secret rooms, Unless its a huge level in that chase you lose your memory of that level gets scrambled and you get confused for a long time....

One time i screwed up an enchantment and give myself lycanthropy.....I was in the book shop at that time so i just SPRINTED out of the city incase guards attack werewolfs....they probably do and all....screw it i bet his lifes they do...
Apr 18, 2014, 10:14 am
#99
capristo's avatar
The Imperialist


Joined: Dec 2, 2007
Location: New Attnam
Interests: bananas
Posts: 2,142
Eire-MadHatter wrote
If you noclip into the walls and just wait.


Oh man, I haven't heard the term "noclip" in a looong time. Takes me back to my Quake II days
Apr 22, 2014, 5:14 am
[Eire]MadHatter's avatar
mutant ass


Joined: Feb 5, 2014
Occupation: Sysnet Tech Support
Location: Dublin, Ireland
Interests: Computers
Posts: 59
capristo wrote
Oh man, I haven't heard the term "noclip" in a looong time. Takes me back to my Quake II days


Thats because i still exist in the worlds of Doom,Morrowind and team fortress 2.

Noclip is still what its known as in those games.


Although i don't noclip in team fortress 2
I have hats i don't want to lose for cheating!
Jump to