SP Framework feedback thread

  • Two Factor Authentication is now available on BeyondUnreal Forums. To configure it, visit your Profile and look for the "Two Step Verification" option on the left side. We can send codes via email (may be slower) or you can set up any TOTP Authenticator app on your phone (Authy, Google Authenticator, etc) to deliver codes. It is highly recommended that you configure this to keep your account safe.

meowcat

take a chance
Jun 7, 2001
803
3
18
Can intro and outro scenes be done though without recoding the SPGame?
If I had played with more cutscenes, I might have a better idea of features to add, but being able to incorporate the intros and outros easily into SP would be cool.

Is the consolecommand("savegame #") used for saving games yet? That might be handy for more elaborate sp mods.
 
Last edited:

Kingpin_DK

New Member
Mar 5, 2006
1
0
0
This MOD is sooo cool
but where can I set how many lives a player should have before the game is over, and is it possible to start the game without any weapons ?
keep up the great work M8
 

Endarire

LemInc
Mar 20, 2006
8
0
0
First, you have done well, young one; Epic should have included this stuff in the boxed game.

One thing I would greatly like is an automap; even Doom had one! Also, what about a graphical inventory a la Deus Ex?

-EE
 
Last edited:

Parser

Hello
May 7, 2002
1,531
0
0
119
England baby!
fraghouse.beyondunreal.com
Glad you fixed the problem Endarire!

Just so you know, I'm working on a new version that will take these suggestions/comments into account and that will include some nifty new features such as:

* More mapper control over beginning inventory: so you can start with no weapons, for example.
* More interactive monsters (like pBoost suggested for the Nalicows and Nali)
* A new inventory system that works like the original from Unreal (so you can add new inventory items into myLevel without recoding the actual base code)
* Inventory items so far include flares, blinders, night vision, health packs and credits.
* Improved SPShop - more sellable item flexibility.
* A working tentacle monster (woo!)
* New Volumes for hacky athletic moves:
- Pullup volume: You place these near edges of platforms or raised levels, so when the player jumps and cannot quite reach them, he/she can tap the Use key to pull themselves up.
- Climb volume: When placed across a vertical surface, enables the player to climb (Spider mode) up it.
- Wallvault volume: When the player is in this volume, he/she can walldodge continuously up a wall to get to a higher level.
- Zipline volume: Like in Splinter Cell, when you are "in" the volume, your physics changes to flying mode, so you can "zip" down the volume to reach another area.
- Pipeline volume: Like the zipline, only without the inertia, so it's more like swinging across a pipe instead of a zipline.
 

mattyd

New Member
Jul 18, 2008
23
0
0
purtagory
1. You mean weapons that just doesn't respawn? If you're planning to do a total single-player experience (no coop, so no player respawn) that might require a bit of code modification. I can help you out on this if needs be.

2. Yeah, that's kind of a side effect from modifying the damage function - because it's not a "team" game if I didn't modify it players could kill each other constantly in a coop game, which could arise to "lameness", so to speak.

3. Do you mean the checkpoint system or the actual save/load function? If it's the latter, just use the menu to save or load. If it's the former, I'll help you with a map example if you would like one. :)[/QUOTE


I Could use some help with the code modification:hmm::2thumb:
 

Kaithofis

The Seldom Seen Kid
There's a single player campaign made by the Antibot clan called SpAntibot (see their moddb profile here)

I tried googling for a download link but had no luck. Their site appears to be down as well.
I'm pretty sure I have backed it up somewhere though, so I could have a look and upload it if you want.
 

glow_trance

New Member
Dec 6, 2008
17
0
0
I'm trying to find out where to begin to create a SP game, but I dont know if I'm just not understanding what I'm reading here or what.

1) Are all the tools I need to make a SP in Kismet?

There's the Single Player and the Single Player ROOT. I'm not understanding what's going on:hmm:
 

graykin

New Member
Feb 27, 2013
2
0
0
Wow, it's been a long time since I've been here.

I have a serious question: Is there any available download for this mod anywhere?

There are some maps I made for the SP-Framework that I would like to play with, but never bothered to keep a back-up of the mod itself. I've searched for an hour all over the Internetz but just simply could not find anything.

I would really appreciate it if someone could provide a link if ANY exists.
 

graykin

New Member
Feb 27, 2013
2
0
0
Hmm...

This might not be the latest version, because some of the maps I made for it crash with an error. :-/ Some of them DO, run, however.

Still, I have a warm, fuzzy feeling inside now. Thanks for the upload! :)
 

anartist

New Member
Mar 4, 2013
10
0
0
Thank you!!!!

Oh god
I thought I would go mad.
Thank you for this.
I needed the code to look at.

It works very well
Thanks

I'm having a problem with the vehicles being locked, but I will try to figure it out

I wanted to use bots as boss enemies and let them have vehicles in specific sections.

1. Can I spawn a bot? I'll work out the path stuff, Just bots can drive and attack differently.

2. I was before this using a blank game in Ued with Ash's VDM script from inside the vehicle deathmatch cubemap, but I did not like linking to his package and was trying to incorporate the 2 scripts inside into a separate package as scripts so I could remove the link to his map as a package. The reason I mention this is that Ash's script unlocks the vehicle when a game type is called *xDeathmatch( and you can change that to the SP gametype) but it also calls a second script that gives the deathmatch bots access to the vehicles and the flying nav paths.

If I spawn a bot can it drive and hunt as per the paths it can access?
If not, could someone look at these and see if they can fudge them into the framework and email me how?
I'm sorry. I'm not really a coder. I can load up the source in notepad++ and read through and fudge this and that but I just want this one little thing and I can stop working with the guts and build off a solid base template level where everything works. From that point the core will be left and I can focus on the part I find interesting, making a story driven level.


Before I had read that this allowed vehicles I imported that file and I was able to drive. For some reason as I place the vehicles without this I get a locked vehicle.

Help! Thx!
I KNOW that UDK is better.
But UDK will absolutely not run on a celery 1.4 with 512 g and 64megs of integrated shared video ram.
UT2k4 actually does run, and I needed the bot support.

Does anyone else from the days of quake think that this hundred node shader crap is ridiculous?

texture + normal map + material definition should be all you need.

I saw a udk shader with more than 100 nodes for just this simple water effect. The green slime water in quake 1 worked for me...

Here are the scripts from Ash's vehicle dm mod, which he states we can use so I am:

//---------------------------------------------------
// Vehicle DM Package V1.0 by Ash (A.N.)
// This code fixes Vehicle DM AI and
// enables ONS and AS VehicleFactories.
//---------------------------------------------------
class VDM_AI_Package extends Actor placeable;

var float last_replicated_skins;

function PreBeginPlay()
{
local ASVehicleFactory ASVF;
local ONSVehicleFactory ONSVF;

if(Level.Game != None)
{
log("*** Embedded Vehicle DM Package V1.0 by Ash");
if ((Level.Game.Class == class'CodeBase.SPGame') &&
(!class'CodeBase.SPGame'.default.bAllowVehicles)) ////Sorry, this was my work copy, it should read xDeathmatch on this line

Level.Game.bAllowVehicles = true;
}

foreach DynamicActors( class'ASVehicleFactory', ASVF )
{
if(ASVF == None) continue;
ASVF.VehicleTeam = 255;
ASVF.bVehicleTeamLock = false;
ASVF.bEnter_TeamUnlocks = true;
}

foreach DynamicActors( class'ONSVehicleFactory', ONSVF )
{
if(ONSVF == None) continue;
ONSVF.Activate(0);
}

SetTimer(0.23, true);
}

function Timer()
{
local Vehicle V;
local ONSVehicle ONS_V;

if(Level.Game != None)
{
Level.Game.bAllowVehicles = true;
for ( V=Level.Game.VehicleList; V!=None; V=V.NextVehicle )
{
if(V.Controller != None) continue;
V.bTeamLocked = false;
if((V.Team != 255) && V.IsVehicleEmpty())
V.SetTeamNum(255);
}
if(Level.TimeSeconds - last_replicated_skins >= 2)
{
last_replicated_skins = Level.TimeSeconds;
for ( V=Level.Game.VehicleList; V!=None; V=V.NextVehicle )
{
if((V.Team != 255) || (V.RepSkin != None)) continue;
ONS_V = ONSVehicle(V);
if((ONS_V != None) && (ONS_V.PassengerWeapons.Length > 0) &&
(ONS_V.RedSkin != None))
{
ONS_V.RepSkin = ONS_V.RedSkin;
}
}
}
}
}

defaultproperties
{
}




and the bot AI class extension to activate bot pathing in vehicles:

//------------------------------------------------------------------------------
// Vehicle DM Package V1.0 by Ash (A.N.)
// Existing code for Unreal ® Tournament 2004 Copyright © 2004 Epic Games, Inc.
//------------------------------------------------------------------------------
class VDM_My_DMSquad extends DMSquad;

function bool CheckVehicle(Bot B)
{
local Actor BestPath, BestEntry;
local Vehicle V2, V;
local float NewDist, BestDist, NewRating, BestRating, BaseRadius;

if ( (Vehicle(B.Pawn) == None) && (Vehicle(B.RouteGoal) != None) && (NavigationPoint(B.Movetarget) != None) )
{
if ( VSize(B.Pawn.Location - B.RouteGoal.Location) < B.Pawn.CollisionRadius + Vehicle(B.RouteGoal).EntryRadius * 1.5 )
B.MoveTarget = B.RouteGoal;
}

if ( (Vehicle(B.Pawn) == None) && (Vehicle(B.MoveTarget) != None) )
{
V = Vehicle(B.MoveTarget).FindEntryVehicle(B.Pawn);
if ( V != None )
{
if ( V.GetVehicleBase() != None ) BaseRadius = V.GetVehicleBase().CollisionRadius;
else BaseRadius = V.CollisionRadius;
if ( VSize(B.Pawn.Location - V.Location) < B.Pawn.CollisionRadius + BaseRadius + V.EntryRadius )
{
V.UsedBy(B.Pawn);
if ( Vehicle(B.Pawn) != None )
BotEnteredVehicle(B);
return false;
}
}
}
if ( B.LastSearchTime == Level.TimeSeconds ) return false;

if ( Vehicle(B.Pawn) != None )
{
if ( !NeverBail(B.Pawn) )
{
if ( Vehicle(B.Pawn).StuckCount > 3 )
{
// vehicle is stuck
Vehicle(B.Pawn).VehicleLostTime = Level.TimeSeconds + 20;
Vehicle(B.Pawn).KDriverLeave(false);
return false;
}
else if ( (B.Pawn.Health < B.Pawn.HealthMax*0.125) && !B.Pawn.bStationary && (B.Skill + B.Tactics > 4 + 7 * FRand()) )
{
//about to blow up, bail
Vehicle(B.Pawn).VehicleLostTime = Level.TimeSeconds + 10;
Vehicle(B.Pawn).KDriverLeave(false);
return false;
}
}
if (!B.Pawn.bStationary) return CheckSpecialVehicleObjectives(B);
return false;
}
if (SpecialVehicleObjective(B.RouteGoal) != None && CheckSpecialVehicleObjectives(B))
return true;

BestDist = MaxVehicleDist(B.Pawn);

if ( (Vehicle(B.RouteGoal) != None) && !Vehicle(B.RouteGoal).Occupied() && Vehicle(B.RouteGoal).IndependentVehicle() )
V2 = vehicle(B.RouteGoal);

// look for nearby vehicle
if ( V2 == None )
{
for ( V=Level.Game.VehicleList; V!=None; V=V.NextVehicle )
{
NewDist = VSize(B.Pawn.Location - V.Location);
if (NewDist < BestDist)
{
NewRating = VehicleDesireability(V, B);
if (NewRating > 0)
{
NewRating += BestDist / NewDist * 0.01;
if ( (NewRating > BestRating) && ( V.bTeamLocked || V.bKeyVehicle ||
V.FastTrace(V.Location, B.Pawn.Location + B.Pawn.CollisionHeight * vect(0,0,1)) ) )
{
V2 = V;
BestRating = NewRating;
}
}
}
}
}

if ( V2 == None ) return false;

BestEntry = V2.GetMoveTargetFor(B.Pawn);

if ( B.Pawn.ReachedDestination(BestEntry) )
{
V2.UsedBy(B.Pawn);
return false;
}

if ( B.ActorReachable(BestEntry) )
{
B.RouteGoal = V2;
B.MoveTarget = BestEntry;
V2.SetReservation(B);
B.GoalString = "Go to vehicle 1 "$BestEntry;
B.SetAttractionState();
return true;
}

BestPath = B.FindPathToward(BestEntry,B.Pawn.bCanPickupInventory);
if ( BestPath != None )
{
B.RouteGoal = V2;
V2.SetReservation(B);
B.MoveTarget = BestPath;
B.GoalString = "Go to vehicle 2 "$BestPath;
B.SetAttractionState();
return true;
}

if ( (VSize(BestEntry.Location - B.Pawn.Location) < 1200)
&& B.LineOfSightTo(BestEntry) )
{
B.RouteGoal = V2;
V2.SetReservation(B);
B.MoveTarget = BestEntry;
B.GoalString = "Go to vehicle 3 "$BestEntry;
B.SetAttractionState();
return true;
}
return false;
}

//return a value indicating how useful this vehicle is to the bot
function float VehicleDesireability(Vehicle V, Bot B)
{
local Vehicle V2;

if(V == None) return 0;

if((V.IsA('ONSWeaponPawn')) && (ONSWeaponPawn(V).VehicleBase != None))
V2 = ONSWeaponPawn(V).VehicleBase;
else V2 = V;
if(V2.Occupied() || V2.HasOccupiedTurret()) return 0;

if (V.Health < V.HealthMax * 0.125 && B.Enemy != None && B.EnemyVisible())
return 0;
V.TeamUseTime = 0;
V.PlayerStartTime = 0;
return V.BotDesireability(self, 255, None);
}

function bool AssignSquadResponsibility(Bot B)
{
if (CheckVehicle(B)) return true;

return super.AssignSquadResponsibility(B);
}

defaultproperties
{
}


Thank you to everyone who worked on the SP Framework, it is really a great tool, I am surprised there are not more sp mods
but I guess people have gone to UDK
My reasoning is
more than half the world is still on ancient hardware
This works on my rig
and there are so many games that work using less than what we have here

I just started system shock 2 again, now that it can have graphical upgrades with the newdark engine,
look at what at what people made with that horrible editor, a game that we replay because hunting down a new maintenance tool to fix our only working gun was actually fun.

Nobody has yet made an open source or source accessible inventory game for fps since system shock, other than powerhouse gpu hungry stuff like skyrim. At 500 megs System Shock 2 had an inventory. UDK Scaleform UI's are slow and sucky.
I am rambling, yes, but think of what people would create if you gave them a really simple inventory with combine-able items.
We could be gods...er...happy geeks.

Ahh. Well. Could someone give me a heads up as to how I could make ALL the huds go away for my SP game? Plz?
Not in my install settings, but in the level settings somehow, can I turn it all of? All of it? Other than messages.

Sorry. Big wish list at the end. Thank you all for the tools in this SP Framework.
 
Last edited:

anartist

New Member
Mar 4, 2013
10
0
0
...vehicles being locked...bots as boss enemies w/vehicles...

This is what I've been doing.

Fire up ed with spf
make a box, terrain, sunlight etc.
replace player start with spp and make gametype to the sp one
add a vehicle, it starts locked
Open class browser
open pkg >choose Ash's vehicle dm cubemap map file .ut2
actors should now have the vdm ai script
place it somewhere

make sure the ash's cubemap map file is in the same dir as your project map
the vehicle is unlocked and supposedly, when I figure out how to spawn bots by triggers, the bots will use the navmesh and hate the player and try to drive vehicles on the nav mesh.

but I am too tired for that.

and yes,
I know the last time someone posted in this thread was probably over 2 years ago
but its more interesting than jigsaw puzzles, crosswords, television, or facecrack.
 

anartist

New Member
Mar 4, 2013
10
0
0
This is what I've been doing...more interesting than...facecrack.

I am so much happier.
weapons, turrets, monsters, added some other monster packs from Invasion site and they load, all vehicles work, have the interactivity code for keycards and basic SPF inventory/triggers/spawn scripts, onsreen msgs.

I'm good to go.
almost.
It took me 3-4 days to get this right but I have multiple bkps of a working terrain SP map.

Thought at first some monsters were not appearing, but when I flew down and landed I realized it was just because I have such a huge terrain. They were there.
They swarmed me and killed me.

love the classic sniper rifle inclusion. don't need binoculars if you have a good scope. Nice scope too.

I have at least 3o actors in a 40k room with landscape and vehicles
almost no lag on my crap rig
decent
With section segmenting and portals and spawning points I should be able to quadruple or more that per level

trying to research bot spawning by triggers but getting like 6k/s from inet right now.

game designers + poverty = nothing else to do but continue...
 
Last edited:

meowcat

take a chance
Jun 7, 2001
803
3
18
@ anartist: It is possible to use Bot Controlled vehicles as boss characters, but it will probably require additional UScript code (as a side project I've semi-implemented the Hummer Boss from Turok the Dinosaur Hunter (N64), and also been thinking about how to make the Harrier Boss from MGS2 and the SlaveI boss from SW:Shadows of the Empire (N64)).

I've not played with the SP code too much, but I had tried my hand at making some single player game enemies. Here is the code I've used in one of my boss vehicle characters. I'm posting this specfically to show how I spawned the enemy vehicle driver/AI:

First here is the code to spawn a driver for the boss vehicle, and have them enter the vehicle. I've left out some bits of code and default properties related to the look and weapons of the hummer boss:
Code:
class ev_HummerBoss extends ONSWheeledCraft; //ONSPRV

/* maybe spawn additional controllers later, do this in PostNetBeginPlay() because
the weapons array is filled during ONSVehicle.PostNetBeginPlay(). To have the weapon
be 'activ(e)'-ated and ready to use it must exist during the call to KDriverEnter,
otherwise the AI will not be able to shoot
*/
simulated function PostNetBeginPlay(){
    local controller MyController;
    local Pawn MyDriver;

	super.PostNetBeginPlay();
    // add driver so that the native ONSWheeledCraft ProcessInput function will actually apply the desired driving code
	if ( Role == Role_Authority ){
		MyController = spawn(AutoTurretControllerClass);
        // this pawn class has collision off by default so that we don't have to offset location when spawning anymore
        MyDriver = Spawn(class'enemy_VehicleDriver',,,);
        if ( MyController!=None && MyDriver!=None){
			MyController.Pawn = MyDriver;
			MyDriver.Controller = MyController; // link 'em up sort of
            KDriverEnter(MyDriver);
		}
	}
}

function bool TryToDrive(Pawn P)
{
    return false;
}

defaultproperties
{
	AutoTurretControllerClass=class'EController_Hummer'
	Team=6
	bDriverCannotLeaveVehicle=true
    Mesh=Mesh'EnemyHummer_Mesh'
	VehiclePositionString="in a HMMWV"
	VehicleNameString="HMMWV"

The Driver is just a dummy pawn basically (I've set the mesh and skin properties so that it matches my YARM mod's theme):
Code:
/* This class exists only so that there is a "YARM like" character to control
enemy vehicles, since a driver is required by a lot on the ONS vehicle native code

Also, turn off this pawn's collision to allow for easier spawning
*/
class enemy_VehicleDriver extends xPawn;//ymHuman_Pawn;

// NOTE:  This is called in/from xPlayer in Possess, and normally on the clients via
// PostNetReceive
simulated function Setup(xUtil.PlayerRecord rec, optional bool bLoadNow){
    //log("Setup for"$self@GetHumanReadableName());
    Species = default.species;//rec.Species;
	RagdollOverride = default.Species.static.GetRagSkelName("dummystring");//rec.Ragdoll;

	if ( Species.static.Setup(self,rec) )
		ResetPhysicsBasedAnim();
}

simulated function StartDeRes(){
   bCollideWorld=false;
}
simulated function TickDeRes(float DeltaTime);

// make this real simple so that we don't get a bunch of bodies lying around
simulated event PlayDying(class<DamageType> DamageType, vector HitLoc){
	Destroy();
}

defaultproperties
{
    Mesh=Mesh'BS_UrbanRecon_Alpha'
    Skins(0)=Texture'BadSoldier_BlackSkin'
    Skins(1)=Texture'torso_SOHGT_olive'
    Skins(2)=Texture'Bala_HeadBaseOP_BlackSkin'

    MenuName="Vehicle Driver"
    Species=class'SPECIES_TDman'
    MovementAnims(0)=RunF_y // so that the AssignInitialPose function will not throw an accessed none
    // don't collide so it can be spawned anywhere
    bCollideActors=false
    bCollideWorld=false
    bBlockActors=false
    bProjTarget=false

    RequiredEquipment(0)=""
    RequiredEquipment(1)=""
}

The enemy vehicle controller (shown as EController_Hummer in the vehicle code above) is basically just an extremely cut-down version of the MonsterController/Bot code. It always uses the vehicle charging state when attacking. It only does three things: Attack the player, Idle in one spot, and Roam around the map by selecting random RoadPathNodes and then traveling to them.

And yes I agree about the great simplicity of simply modding UT2k4 rather than having to generate everything in UDK.
 

anartist

New Member
Mar 4, 2013
10
0
0
I am wondering if the SPFramework will install into Warpath.
I know Warpath is crappy. But it is Ued 2.5+ and has normal maps. The whole setup is identical to UT2k4. I'm running them side by side since no one will play a Warpath level, but for my own design purposes I might make a number of things in warpath. Really crappy game. But normal maps could make it worth it.