Inside the SASRB2 SOC: Exposed! Update: 4/17/04, Lights!

Status
Not open for further replies.
Code:
#Patch File for SRB2 Final Demo v1.1
#SASRB2 Junk v1.2

#Note: Use the pound sign ('#') to start comment lines.

SRB2 version = 11

#This is where the main stuff goes. SSTage_Start is the start of he special stage maps.
#Invulntics and Sneakertics are the length Speedshoes and Invincibility Last, in tics
#I think AJ said 35tics = 1 second...?
#Introtoplay Specifies the cutscene number to play as the game's intro. 
#Generally, always end everything you do with an additional linebreak.
#Especially at the end of the file.
#AJ uses linebreaks to determine when a command has stopped and when a new one
#has started.

Maincfg Category
IntroToPlay = 1
Invulntics = 740
Sneakertics = 880

#This is cutscene junk. Most of it should be self explanitory.

Cutscene 1
NumScenes 9
Scene 1
NumberOfPics = 3
Pic1Name = DISCLAIM
Pic1Duration = 200
Pic1XCoord = 0
Pic1YCoord = 0
Pic2Name = BFPINTR
Pic2Duration = 100
Pic2XCoord = 0
Pic2YCoord = 0
Pic3Name = STJRINT
Pic3Duration = 100
Pic3XCoord = 0
Pic3YCoord = 0
TextXPos = 1
TextYPos = 320
SceneText = "SONIC THE HEDGEHOG!"
Tails called out over the cool summer
breeze. "Come quick, you gotta come see 
this!"#
Scene 2
NumberOfPics = 1
Pic1Name = SAINTRO0
Pic1Duration = 1050
Pic1XCoord = 0
Pic1YCoord = 0
MusicSlot = 98
TextXPos = 1
TextYPos = 152
SceneText = Deep inside a top secret
base of operation... a mad doctor plots
his next grand scheme...#
Scene 3
NumberOfPics = 1
Pic1Name = SAINTRO1
Pic1Duration = 1050
Pic1XCoord = 0
Pic1YCoord = 0
TextXPos = 1
TextYPos = 152
SceneText = "Oooh yes! It's just as the hyroglyphs
depicted!" Eggman chortled, to himself,
intently gazing at the computer's readout.#
Scene 4
NumberOfPics = 1
Pic1Name = SAINTRO2
Pic1Duration = 1050
Pic1XCoord = 0
Pic1YCoord = 0
TextXPos = 1
TextYPos = 152
SceneText = "Using this information... I will
gain the ultimate power! Hohoho!"#
Scene 5
NumberOfPics = 1
Pic1Name = SAINTRO3
Pic1Duration = 1050
Pic1XCoord = 0
Pic1YCoord = 0
TextXPos = 1
TextYPos = 152
SceneText = "This will put an end to him once
and for all! No longer will I have to deal
with that meddlesome creature named..."#
Scene 6
NumberOfPics = 2
Pic1Name = SAINTRO4
Pic2Name = SAINTRO5
Pic1Duration = 125
Pic2Duration = 1050
Pic1XCoord = 0
Pic1YCoord = 0
Pic2XCoord = 0
Pic2YCoord = 0
MusicSlot = 99
TextXPos = 1
TextYPos = 152
SceneText = "SONIC THE HEDGEHOG!"
Tails called out over the cool summer
breeze. "Come quick, you gotta come see 
this!"#
Scene 7
NumberOfPics = 1
Pic1Name = SAINTRO6
Pic1Duration = 1024
Pic1XCoord = 0
Pic1YCoord = 0
TextXPos = 1
TextYPos = 152
SceneText = "I, Doctor Eggman, great scientific 
genius extrordinare, have built a 
battle station capable of obliterating the 
entire planet. Surrender, or else."#
Scene 8
NumberOfPics = 1
Pic1Name = SAINTRO7
Pic1Duration = 1024
Pic1XCoord = 0
Pic1YCoord = 0
TextXPos = 1
TextYPos = 152
SceneText = "Now what are we gonna do?" Tails 
asked worryingly. "The same thing we always
do!" Sonic exclaimed.#
Scene 9
NumberOfPics = 1
Pic1Name = SAINTRO8
Pic1Duration = 1024
Pic1XCoord = 0
Pic1YCoord = 0
TextXPos = 1
TextYPos = 152
SceneText = "We're gonna find Eggman and defeat him! 
C'mon...Let's go!"#

#This is where I start editing "things". You know, in-game objects like enemies.
#Most of this relates to Doom DeHackEd stuff, but because SRB2 isn't Doom,
#Alot of the variables set here don't pertain to what they do in Doom. Infact
#most enemies variables are custom-made just for them.
#Basic stuff that pertains to all objects/enemies:
#"Thing #" is what object they are. GFZ3 Eggman is Thing 3, Blue Crawla is thing 1, etc.
#To figure the thing # for your object, truthfully, you need a list of all things in the game.
#That, combined with a text editor that displays line #, helps a great deal.
#Spawnhealth is the health given to an object when they're spawned in a map.
#One bonk on the head = one health point. The higher the number, the more it takes
#To kill them.

#I begin with modifying a few lights; those of you who run in software mode won't notice these.
#However, they are a very pretty effect that OpenGL users benefit from. Here I change the lights
#For Eggman's Jet Exauhst, the Invincibility Stars, and the Torches
#Light Number obviously identifies which light you are editing. At this time, SRB2 has no "unused slots" so 
#If you're going to edit a light, you have to edit an existing one.
#To find a list of the SRB2 lights, open up the source code and look for hw_light.c
#hw_light.c is a list of every light in the game along with all the default settings for said light.
#hw_light.h contains a much smaller list (making it easier to find the number). Most of the
#lights in these two files have very self-explanitory names.
#Type determines what type of light you'll use; 1 (Corona), 2 (Dynamic), 3 (Both).
#Note: As of this time it appears if you want a corona, you have to use 3 as 1 doesn't work (?)
#A corona is the ball of light, a dynamic is what you see shining on the walls
#CoronaRadius and DynamicRadius sets how far you want the light to spread.
#I never reccomend going over 128-200 for Coronas unless you're insane.
#CoronaColor and DynamicColor are what color your lights are.
#The easiest way to find the color is if you know HTML. Open the Windows Calculator
#Change it to "Scientific", and "Hex". Now, enter it as you would enter HTML colors
#A word of caution, though, the Red and Blue values are flipped. So while HTML is RRGGBB
#This will be BBGGRR (R = Red, G = Green, B = Blue).
#Once you have your color entered, change it to Dec. That's your color!
#The darker the color, the softer the light.
#OffsetX and OffsetY are for Coronas, it determines where they appear on the sprite.
#OffsetY is actually the height from the bottom of the sprite, going upwards.
#I would cover how to append lights to different sprites other than the default ones
#But I haven't actually tried that yet. From what I've been told... It's
#Sprite x
#LightType = y
#Sprite x being the sprite you want to append the light to
#LightType being the number of the light you want to give it.

#Ring - I like my ring coronas just a tad bigger
Light 1
CoronaRadius = 64

#Invince
Light 4
Type = 3
DynamicRadius = 0
CoronaRadius = 64
CoronaColor = 16733491
OffsetX = 10
OffsetY = 10

#Flame
Light 21
DynamicRadius = 128
CoronaRadius = 128
Type = 3
CoronaColor = 1131775
DynamicColor = 3355647
OffsetX = 10
OffsetY = 10

#Eggman Jet Fire
Light 25
DynamicRadius = 64
Type = 3
CoronaColor = 16737860
OffsetY = 16
CoronaRadius = 64

#These make the shields actually glow
#I know long ago, AJ told me 
#that this sort of effect is ugly.
#But if you're gonna make them glow
#at least make it look natural ;)

#Shield - Green
Light 5
CoronaRadius = 256
Type = 3
OffsetX = 16
OffsetY = 4
CoronaColor = 1140241

#Shield - Blue
Light 6
CoronaRadius = 256
Type = 3
OffsetX = 16
OffsetY = 4
CoronaColor = 8917265

#Shield - Yellow
Light 7
CoronaRadius = 256
Type = 3
OffsetX = 16
OffsetY = 4
CoronaColor = 1140326

#Shield - Red
Light 8
CoronaRadius = 256
Type = 3
OffsetX = 16
OffsetY = 4
CoronaColor = 1118600

#Super Sonic - Again, more natural light
Light 2
CoronaRadius = 300
Type = 3
OffsetX = 16
OffsetY = 4
CoronaColor = 1135957
DynamicColor = 1135957

#Here we have the two bosses. Speed is obvious -- that's the speed they move at.
#Damage is when the enemy enters it's "panic" state. IE - When Eggman changes attacks.
#GFZ3 Eggman enters "fly around the room" mode when his health hits 3. EggSlimer
#Enters Pogo mode when his health hits 8 (right after the first hit).
#Seesound is the # of the sound that will play when Eggman first sees you. ("Get a load of this!")
#Again, to find the Sound # of an object, you need a list of the sounds in the game. 125 is DSMARIO8.
#124 is obviously DSMARIO7, so on and so forth.
#Mass is used for the "Flee sound" -- the sound Eggman plays when he's flying away after being defeated.
#In this case, "UNTIL WE MEET AGAIN! HA HA HA HA HA!". Painsound is the sound played when you bonk Eggman.
#Which is "HUAH", DSMARIO5. I'll explain misslestate/meleestate in a bit.
#Additionally, setting Painchance for EggSlimer will be what he shoots out -- I'll explain that in abit.

# GFZ3 Boss
Thing 3
spawnhealth = 9
speed = 8
damage = 3
missilestate = 90
meleestate = 92
seesound = 125
mass = 124
painsound = 122

# EggSlimer (THZ3 Boss)
Thing 178
spawnhealth = 9
damage = 8
seesound = 125
mass = 124
painsound = 122

#Here is Deton. Just like Eggman, his Seesound is the sound he plays when he goes in to attack you.
#Speed should control his speed -- not sure, doesn't look that different to me, but eh.
#Painchance is something interesting. It's the radius in fracunits in which Deton can "see" you. In this instance
#If you get 780 fracunits near Deton, he sees you, and attacks you.
#I'll explain Reactiontime when we get to the Crawlas.

# Hello, I am your Deton for tonight
Thing 93
seesound = 123
speed = 75
Painchance = 780
Reactiontime = 2

#This is for sounds. "Pitch" in this case is used for how loud a sound is.
#IE - how far away an enemy can be for you to hear the sound they make. 
#AJ reccomended 67, and it seems if I set it any higher (say, 128) it actually
#seems to make it more quiet instead of louder. I dunno! 

# No Way, I can't believe this!
Sound 124
pitch = 67

# DETON SEE FRESH MEAT!
Sound 123
pitch = 67

#These are frames. This is where things get a little tricky. Go up, and look at GFZ3 Eggman.
#See "MeleeState" and "MissleState"? You'll notice the numbers they reference are close to these.
#Just like there are sounds lists and things lists, there is a "frames" list that contains each frame of
#Animation in the entire game. For GFZ3 Eggman, these frames are:
#Frame 89 = Eggman takes his finger off the button.
#Frame 90 = Eggman goes to press the right button.
#Frame 91 = Eggman presses the right button.
#Frame 92 = Eggman goes to press the left button.
#Frame 93 = Eggman presses the left button.
#Duration is how long the frame of animation plays.
#action is what "action" Eggman does while this frame is playing.
#Just like frames, sounds, and things, there is an actions list, but that's not as important.
#A_TurretStop and A_TurretFire are for the THZ2 Turret.
#When you tell Eggman's frames to use this action, instead of firing a missle, he fires THZ2 Turret
#Chaingun fire, and he fires it for as long as the frame of animation plays (the duration).

Frame 89
duration = 50
action A_TurretStop

Frame 91
duration = 250
action A_TurretFire

Frame 93
duration = 100
action A_TurretFire

#This is the Blue Crawla, obviously.
#In SASRB2, I sped him up a little bit -- but there was a problem with this.
#The duration for the Blue Crawla's walking animation frames was too big
#So when I increased his speed, he moved very choppily. The solution?
#Lower the duration of his frames! This sped him up and smoothed him out.

#default speed for blue crawla is 3.
Thing 1
Speed = 4

Frame 45
duration = 1

Frame 46
duration = 1

Frame 47
duration = 1

Frame 48
duration = 1

Frame 49
duration = 1

Frame 50
duration = 1

Frame 51
duration = 1

Frame 52
duration = 1

Frame 53
duration = 1

Frame 54
duration = 1

Frame 55
duration = 1

Frame 56
duration = 1

Frame 57
duration = 1

Frame 58
duration = 1

Frame 59
duration = 1

Frame 60
duration = 1

Frame 61
duration = 1

#This is for the Jetty-Syn Gunner. Instead of firing his normal gun,
#He shoots GFZ3 Eggman's Missles. "A_CyberAttack" comes from Doom.
#Way, way back, GFZ3 Eggman replaced Cyber Demon, which is why he shoots
#Missles. "A_CyberAttack" is a left over remnant of the Cyber Demon, his missle attack.

# S_JETGSHOOT1
Frame 557
Action A_CyberAttack

#And here's the Red Crawla. As you can see, I slowed him down. 
#Reaction time is the duration between his attacks, in seconds.
#Because I made the Red Crawla shoot Jetty-Syn gunfire
#His misslestate is 921 - I'll explain that later.
#Raisestate is what he shoots; it's just like Painchance on Eggslimer. 
#Painchance here, on the RedCrawla, works just like Painchance on the Deton.
#It's the radius in fracunits you have to be before it'll attack you.
#I requested this because SRB2 isn't doom -- having an enemy from half a map's
#length shoot at you and not being able to shoot back sucks.

# MT_REDCRAWLA
Thing 2
ReactionTime = 3
MissileState = 921
RaiseState = 91
Speed = 3
Painchance = 775

#Because of how SRB2 works, if you want a projectile to make a sound when shot
#You need to give the projectile itself a seesound. It's anal, but it works.

# SYN-Gunfire
Thing 91
seesound = 126

#This is tricky as well. Frame 921 WAS the axe in Mario Koopa Blast. But, for the
#"Red-Crawla-Shoots-Jetty-Syn-Ammo" mod, we needed to hijack it.
#"Next = #" is the next frame in the sequence for this to go to.
#Sprite Number, I think, is the number of the frame used for the shooting anim.
#I forget what SpriteSubnumber is.
#There are probably Sprite/SpriteSub lists.
#You get that right? 
#One more time -- The Red Crawla didn't have a "shooting at player" frame, so we had to give it one.
#To do this we hijacked a frame of animation from another object in the game, from an object we weren't
#going to use. We then made the frame display what we wanted it to display and do what we wanted it to
#do. If you understand that, congrats -- this is the hardest, most confusing part of SOC editing.

# New Frame
Frame 921
Next = 68
SpriteNumber = 3
SpriteSubnumber = 0 
Duration = 1
Action A_JetgShoot

#These things are Item monitors. I gave them all the SA "Bubblepop" sound when you "kill" them.
#You know, when you destroy them. Doom thinks they "died". 

Thing 185
deathsound = 127

Thing 132
deathsound = 127

Thing 131
deathsound = 127

Thing 49
deathsound = 127

Thing 48
deathsound = 127

Thing 18
deathsound = 127

Thing 16
deathsound = 127

Thing 15
deathsound = 127

Thing 14
deathsound = 127

Thing 10
deathsound = 127

Thing 9
deathsound = 127

Thing 7
deathsound = 127

Thing 6
deathsound = 127

#This is for editing the character selection screen. 
#Most of these are obvious.
#Playername is the name of the player. You know, "Sonic", "Knux", "Zim".
#Menu position is where they show up on the character list.
#Sonic's default menuposition is 20, Tails is 40, Knux is 60.
#PicName is the icon shown for who you're chosing.
#Status, not sure -- 32 is "active" and 122 is "inactive".
#Character numbers are who is who -- these are determined by the 
#Order characters are loaded. Always, always, they are loaded in
#this order:
#Sonic (0), Tails (1), Knuckles (2) and Zim (3).
#Any characters loaded after those are custom characters.
#In this case, satails.plr and saknux.plr are 4 and 5. 
#By setting the other characters to "inactive" they don't display
#on the character selection list. PlayerText is for their descriptions.
#Spacing is so they match up with the text in the selection screen.

Character 1
Status = 122

Character 2
Status = 122

Character 3
Status = 122

Character 4
PlayerName = Tails
MenuPosition = 30
PicName = TAILCHAR
Status = 32
PlayerText =              Slow
                 Flying
             While slowest
out of the three, Tails
is unique due to his 
ability at being able
to fly.
 
#

Character 5
PlayerName = Knuckles
MenuPosition = 40
PicName = KNUXCHAR
Status = 32
PlayerText =              Medium
                 Climb/Gliding
             Fast, but
not as fast as Sonic
Knuckles can climb
up walls and glide.
Good for beginners.
 
#

And now you know everything I know. AJ and a441 can add whatever they want to my ramblings incase I got something wrong.
 
Thanks. It actually makes sense now.

Sooner or later I'll have to make Stupid Dumb Unnamed Robofish into something lethal =P

*Stickies the topic because it's useful*
 
The "pitch" for sound is not a volume level. "67" is a special number that tells it to sound louder.

Setting it to 42 is another special, which means that more than one instance of a sound can be played at any given time. The thunder uses it so you can have more than one thunder sound mixed. Normally, only one sound per object can play at a time. (Sounds being played are assigned to the object that is emanating them.. in thunder's case, it is 0/NULL, or the screen).

43 is a special case for the rain which does special calculations in relation to how close you are to an 'outside' area to determine how loud the sound should be.
 
I've known this since the day you released SA-SRB2 ;P. Hence why shadow can make fast enemies now. (I tought him)

Oh and one question. What does damage means? Thats the only thing I am trying to know.
 
I quote: "#Damage is when the enemy enters it's 'panic' state. IE - When Eggman changes attacks."
 
How about this: Let's make the Rulps (Ridiculous Unnamed Leaping Pirahnas) swim around the water! That way, when Sonic decides to take a dip, those pirahnas will come to him and, "have dinner".
 
Doesn't really matter, 2 frames in the same position really don't help you if you want them to move horizontally =P
 
Is anyone aware of the ability to make "Custom Powerup" boxes?

When you hit a box, you can give the player any of the following powers (no matter how silly they seem):

pw_invulnerability,
pw_sneakers,
pw_flashing,
pw_blueshield,
pw_redshield,
pw_tailsfly,
pw_underwater,
pw_spacetime,
pw_extralife,
pw_yellowshield,
pw_blackshield,
pw_greenshield,
pw_super,
pw_fireflower,
pw_homingring,
pw_railring,
pw_shieldring,
pw_automaticring,
pw_explosionring,
pw_superparaloop,
pw_nightshelper,

Just use the A_CustomPower function instead of the usual A_RingBox, etc., set the 'reactiontime' of the powerup object to the power # you want applied, and the 'painchance' is the value to set the power to.

Seesound is the award noise.
 
Speaking of that, I'd love a double jump shield, like what happens when you double jump with the Lightning Shield. Making it so it would be jump/spin wouldn't interrupt any other abilities, either.

I had a sheet of neat abilities to add, but I sadly seem to have lost it ;_;
 
SSNTails said:
Is anyone aware of the ability to make "Custom Powerup" boxes?

When you hit a box, you can give the player any of the following powers (no matter how silly they seem):

pw_invulnerability,
pw_sneakers,
pw_flashing,
pw_blueshield,
pw_redshield,
pw_tailsfly,
pw_underwater,
pw_spacetime,
pw_extralife,
pw_yellowshield,
pw_blackshield,
pw_greenshield,
pw_super,
pw_fireflower,
pw_homingring,
pw_railring,
pw_shieldring,
pw_automaticring,
pw_explosionring,
pw_superparaloop,
pw_nightshelper,

Just use the A_CustomPower function instead of the usual A_RingBox, etc., set the 'reactiontime' of the powerup object to the power # you want applied, and the 'painchance' is the value to set the power to.

Seesound is the award noise.
I'm interested. What do ya do? SSNTails, can you give me an example file for that?
 
Msonic said:
I've known this since the day you released SA-SRB2 ;P. Hence why shadow can make fast enemies now. (I tought him)
You do not know the large amounts of knowledge I gave... I helped with everything from lists of sprites, flags, actions, and just about everything else at Blaze's disposal as well as my own creative ideas and extensive research of the source code... I've known much of this stuff just by looking through certain files such as dehacked.c (which deals with imported lumps)
 
Status
Not open for further replies.

Who is viewing this thread (Total: 1, Members: 0, Guests: 1)

Back
Top