Quick Modding/Hacking Answers Thread

Feb 4, 2011 at 5:11 AM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
That's because nooobody knows D:
At least, I don't. I think one of them turns off bullet-tile collisions, one of them allows the bullets to break destroyable blocks...
 
Feb 4, 2011 at 5:15 AM
Senior Member
"This is the greatest handgun ever made! You have to ask yourself, do I feel lucky?"
Join Date: Oct 30, 2010
Location: New Zealand
Posts: 112
Age: 28
I also tried using the search function to look for help with "breaking the npc table" as Vercci stated, but to no avail. Anyone know where it is?
 
Feb 4, 2011 at 5:25 AM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
The afflicted version is .99b
Or possibly c?
Wistil:
Well that's a problem. And so is my internet right now. I have a fix for the problem but I can only access gmail at work. The general update will have to wait until I get my internet issues resolved.

It was reading the music list number of entries over the sound fx number which was causing the problem.


On Mon, Oct 25, 2010 at 6:52 PM, Noxid wrote:

I was using CE .99b_DX to edit some entities, and I started to notice the game was a bit quiet... Wouldn't you know, for some reason most (but not all) of the death sounds and hurt sounds for the entities were set to zero! I didn't do it by hand and forget, that would take way too long. I'm not sure what happened, but it's bad. I opened some other doukutsus with it and they appeared to suffer the same affliction, although when I opened them with an older CE they looked fine.

I hope you have a backup npc.tbl
 
Feb 6, 2011 at 6:05 AM
Senior Member
"This is the greatest handgun ever made! You have to ask yourself, do I feel lucky?"
Join Date: Oct 30, 2010
Location: New Zealand
Posts: 112
Age: 28
Finally got the H/V trigger to work, guys! Thanks for the help.
 
Feb 6, 2011 at 7:42 PM
Senior Member
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Jan 21, 2011
Location:
Posts: 249
I've got a list of what all the various npc flags do, but there's one thing I'm curious about in Cave Editor. In the NPC Table Editor, what's the actual values (flags) of 'flag 10', 'flag 11', 'flag 12', 'flag 13', & 'flag 15'?
 
Feb 6, 2011 at 7:46 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
They are the exact same flags you can set on an entity in the editor. As to why they have different names is probably a relic of history.
Code:
NPC Special Flags

1 - Solid
2 - Ignore Tile 44
4 - Invincible
8 - Ignore Solid
10 - Bouncy Top
20 - Shootable
40 - Special Solid
80 - No Top or Back attack
100 - Run Script on Contact
200 - Run Script On Death
400 - nothing
800 - Appears once FlagID is set
1000 - Init Direction = 1
2000 - Not Shootable / PC presses down to run script
4000 - Disappears once FlagID is set
8000 - Shows damage
They are all bitwise flags so the progression is as such for however many bytes the variable is. All values in hexadecimal.
 
Feb 7, 2011 at 2:28 AM
Absentee Modder
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Sep 7, 2010
Location: Outside your window. No no, don't check, it's okay
Posts: 272
Age: 29
Pronouns: he/him
Is there any way for an entity with flag 100 (run script on contact) to toggle between being in effect or not? Like how with entity 46 you can turn it on and off by CNP'ing it to entity 0. So, is there some other invisible entity that flag 100 doesn't affect? Or, if not, is there some way to toggle flags by tsc? I doubt it, but still.
 
Feb 7, 2011 at 2:33 AM
graters gonna grate
"Heavy swords for sale. Suitable for most RPG Protagonists. Apply now!"
Join Date: Jul 2, 2008
Location: &
Posts: 1886
Age: 32
Pronouns: he/him
Well I'm not totally sure I understand your question, but I know that it's possible to make a certain type of NPC always have a certain flag by setting that flag in npc.tbl.
 
Feb 7, 2011 at 2:35 AM
Absentee Modder
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Sep 7, 2010
Location: Outside your window. No no, don't check, it's okay
Posts: 272
Age: 29
Pronouns: he/him
I can work with that. Thanks, Cheese!
 
Feb 7, 2011 at 2:36 AM
graters gonna grate
"Heavy swords for sale. Suitable for most RPG Protagonists. Apply now!"
Join Date: Jul 2, 2008
Location: &
Posts: 1886
Age: 32
Pronouns: he/him
alright lol no problem ;)
 
Feb 7, 2011 at 3:06 PM
Senior Member
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Jan 21, 2011
Location:
Posts: 249
Noxid said:
They are all bitwise flags so the progression is as such for however many bytes the variable is. All values in hexadecimal.

Thank you. Curious though, flag 0x0400 really does nothing? Could it be utilized for... something else through asm? Such as say... immunity to a specific weapon, such as... the missile launcher(s)?
 
Feb 7, 2011 at 3:09 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
Absolutely. I'm using it for something in my own mod.
 
Feb 8, 2011 at 3:30 AM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
The way the flags are presented is slightly misleading, though in a useful way. Another (more accurate, but sometimes less useful) way to think of them is that you have a certain amount of space (in this case two bytes) in which to store some boolean values. Thus, there are 16 digits to choose from, each of which can store one value, but Pixel only needed 15 values, so one of the digits was left unused.
 
Feb 8, 2011 at 12:51 PM
Senior Member
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Jan 21, 2011
Location:
Posts: 249
Got a set of questions again~

  1. Where is the "bullet collided with tile: if tile is ##, do this, otherwise kill bullet" area in the exe?
  2. Also, is there a way to attach... say... a timer? Pseudo-code example:
    Code:
    if this:GetTileType() == TILE_63 and ( this:GetCollider() == TYPE_BULLET or this:GetCollider() == TYPE_PLAYER ) then
    	this:ChangeTo( TILE_0 )
    	sound.play( 58 )
    	effect.play( SMOKE_MEDIUM )
    	timer.Create( 5_SECONDS )
    	timer.OnEnd( function()
    		this:ChangeTo( TILE_63 )
    		sound.play( 58 )
    		effect.play( SMOKE_SMALL )
    	)
    end
  3. What's the meaning/name of the bullet flag 0x10? It's only used by the missile explosions.
  4. Are 0x01, 0x02, & 0x80 referenced at all? ie: Are they usable, blank flags that do nothing currently?
  5. Is it possible to setup a custom tile type that destroys (deletes) any [solid or special solid] npc that touches it, without affecting any profile flags? (ie: removes the npc from the map without changing an associated flag like <DNP will)
 
Feb 8, 2011 at 1:17 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
http://tile44.org/~noxid/FunctionlistNox.txt
http://tile44.org/~noxid/Assembly Compendium Aug2010.txt

How you do a timer is you pick a variable in the object (there are several for counters, such as WeaponObj.Distance +0x4C [how far it has travelled]. Manually increment it each frame that your conditions are satisfied then if it is above a certain amount take an appropriate action. As for other stuff just look at the list of functions to find where things are, and for bullet flags I have no idea what they do.
It's possible to hack the <DNP function so that it doesn't modify flags; I did this because I found it to be a pain. Just search for a call to the function that unsets a flag 0040E8E0 - [<FL-]. The way to manually do it is to set WeaponObj.inUse (bullet) or event.inUse (entity) to zero
 
Feb 8, 2011 at 1:34 PM
Senior Member
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Jan 21, 2011
Location:
Posts: 249
Noxid said:
http://tile44.org/~noxid/FunctionlistNox.txt
http://tile44.org/~noxid/Assembly Compendium Aug2010.txt

How you do a timer is you pick a variable in the object (there are several for counters, such as WeaponObj.Distance +0x4C [how far it has travelled]. Manually increment it each frame that your conditions are satisfied then if it is above a certain amount take an appropriate action. As for other stuff just look at the list of functions to find where things are, and for bullet flags I have no idea what they do.
It's possible to hack the <DNP function so that it doesn't modify flags; I did this because I found it to be a pain. Just search for a call to the function that unsets a flag 0040E8E0 - [<FL-]. The way to manually do it is to set WeaponObj.inUse (bullet) or event.inUse (entity) to zero

Thank you. Also, on your functions list, in npcs:

00426FD0 - NPC 003: <nothing?>

That's actually what turns into/spawns weapon exp, hearts, missiles, etc. when something dies. It repositions itself to wherever an npc dies.

About the timers though... the timer wouldn't be stored on a weapon, an npc, or a bullet - it couldn't. It'd have to be stored on either the map, or in some sort of temporary memory address. :S And that I don't know how to do.
 
Feb 8, 2011 at 1:45 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
So, you mean you want the timer to be linked to the tile itself rather than the object colliding with it?
In that case I'm not sure what you'd do. You could use RAM, but then you'd need some for every single tile.
 
Feb 8, 2011 at 1:52 PM
Senior Member
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Jan 21, 2011
Location:
Posts: 249
Is there a way to basically... setup a range in memory that'd be used for tile timers, have it insert and pop timers as they init and finish, and have the range get wiped every time the map changes or loads?
 
Feb 8, 2011 at 5:16 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Pronouns: he/him
Well, there's always a way to do something, it just depends on how much work you feel like doing. You could set up a call to malloc when you load maps and de-allocate (I forget) when you destroy them, set the pointer in a global variable (just any address in a pointer that isn't already used, say [4BEFD0]) and make a whole slew of other functions throughout the exe to handle timer incrementing, initialization, execution, etc.
Or, if you're using CE then you might feel like using the range of RAM that the Old Map Data occupied (that's documented somewhere in the compendium)
The only limitation is your creativity (and possibly work ethic)
 
Feb 8, 2011 at 10:13 PM
Senior Member
"Ha! Ha! Ha! Mega Man is no match for my Mimiga Man!"
Join Date: Jan 21, 2011
Location:
Posts: 249
Heh, well I've got the work ethic. Kind of like self slavery, almost. Still, I'm very new to asm. As far as programming experience goes though, I'm skilled in lua, and have marginal experience in C/C++. So it's not like the 'deer caught in headlights' scenario. Still, this stuff is like... walls and walls of gibberish. I can pick out a few things, but I think it'll be quite a while before I am by any reasonable measure 'comfortable' working in asm.

I think I'll keep the 'on touch npc block' version for now, despite how pesky they are to set up.
 
Back
Top