Commit graph

93 commits

Author SHA1 Message Date
Randy Heit
bd3e49c0e8 Make actor damages readable from DECORATE (again) 2015-01-10 23:02:00 -06:00
Randy Heit
649875b17e Add if/else blocks for action sequences
- So now you can do something like this for an action:
    {
      if (health > 1000)
      {
        A_Scream;
      }
      else
      {
        A_XScream;
      }
    }
  Yes, the braces are required. Because I see too many instances where
  somebody writes an if statement in ACS and doesn't understand why it
  doesn't work right because they forgot braces.
- Fixed: Not actually putting an action between { and } would crash.
2015-01-08 21:36:42 -06:00
Randy Heit
7d0faa5bd5 Allow multiple actions per frame
- You can now call several actions from one frame by grouping them between
  curly braces. i.e. :
   POSS G 3 { A_Pain; A_Log("Ow! That hurt!"); }
  I will probably add an `if (something) { blah; blah; } else { wah; wah; }`
  construct later, but that's the extent of the munging I plan for DECORATE. The
  real work goes to the scripting language, not here. But if this branch is
  getting merged to master sooner than later, here's an immediate benefit
  from it right now.
2015-01-07 22:42:03 -06:00
Randy Heit
9044ac9503 Don't free non-registers.
- Fixed: ExpEmit::Free() would try to free REGT_NIL registers, which
  don't really exist
2015-01-07 22:31:48 -06:00
Randy Heit
8c105ff3a0 Use FxVMFunctionCall in FStateTempCall
- Leveraging FxVMFunctionCall simplifies FinishThingdef() slightly.
2015-01-03 22:45:11 -06:00
Randy Heit
c6c2b21901 Add FxVMFunctionCall class
- This replaces the general extensibility that had existed formerly
  in thingdef_function.cpp. Parameter parsing for function calls is
  shared with state parameter parsing. Functions are defined exactly in
  the same way as action functions, but without the 'action' keyword.
2014-12-30 23:31:07 -06:00
Randy Heit
10a2c0f58a Fixed: FxIntCast::Emit() should free the source register 2014-12-21 22:03:16 -06:00
Randy Heit
b14f768b68 Fix FxPick code emission
- Fixed: Integer constants passed to pick() need to manually generate load
  instructions, since FxConstant::Emit() will just return a constant
  register with its value.
- Fixed: VMFunctionBuilder::RegAvailability::Reuse() didn't actually
  calculate a proper mask. Also added another assert to this function.
2014-12-21 21:57:30 -06:00
Randy Heit
b5e4153c78 Merge branch 'master' into gonesolong
Conflicts:
	src/CMakeLists.txt
	src/b_think.cpp
	src/g_doom/a_doomweaps.cpp
	src/g_hexen/a_clericstaff.cpp
	src/g_hexen/a_fighterplayer.cpp
	src/namedef.h
	src/p_enemy.cpp
	src/p_local.h
	src/p_mobj.cpp
	src/p_teleport.cpp
	src/sc_man_tokens.h
	src/thingdef/thingdef_codeptr.cpp
	src/thingdef/thingdef_function.cpp
	src/thingdef/thingdef_parse.cpp
	wadsrc/static/actors/actor.txt
	wadsrc/static/actors/constants.txt
	wadsrc/static/actors/shared/inventory.txt

- Added register reuse to VMFunctionBuilder for FxPick's code emitter.
- Note to self: Need to reimplement IsPointerEqual and CheckClass, which
  were added to thingdef_function.cpp over the past year, as this file no
  longer exists in this branch.
2014-12-21 21:15:11 -06:00
Christoph Oelckers
6410428715 - fixed: FxPick leaked the array's content. Also did some cleanup on FxPick code. 2014-12-14 12:03:55 +01:00
MajorCooke
3f3aab42f1 - Pick can now hold unlimited numbers to choose from.
- I.e. pick(1,4,12,16)
2014-12-14 04:45:39 -06:00
MajorCooke
785f72d6eb - Renamed RClamp to Pick. 2014-12-13 15:59:27 -06:00
MajorCooke
8c5a8c54f0 - Added rclamp(<int>,<int>).
- Usable for DECORATE expressions. Chooses one of the two numbers placed in the field.
2014-12-13 15:08:18 -06:00
MajorCooke
44683657f2 - Added jpalomo's A_SetSpeed patch. 2014-09-20 17:34:57 -05:00
Randy Heit
2ab3974752 Add a PSymbolConstString class
- Constants can be strings, but the existing PSymbolConst couldn't handle
  them. The old PSymbolConst is now PSymbolConstNumeric, and the new
  PSymbolConst is a now a baseclass for it and PSymbolConstString.
2013-09-10 22:01:00 -05:00
Randy Heit
6584819d01 Use PType for typing things in PSymbolConst. 2013-09-07 20:35:46 -05:00
Randy Heit
2f7183b937 Use PField instead of PSymbolVariable for DECORATE expressions
- The type systems used by PField and FxExpression are completely
  incompatible, but I think I got the differences taken care of as far
  as ParseNativeVariable(), ParseUserVariable(), and FxClassMember are
  concerned.
- Support for declaring native bool variables has been removed for the time
  being. It wasn't used anyway.
- Removed PSymbolVariable.
2013-08-23 22:02:51 -05:00
Randy Heit
3f6c3fa927 Remove unused GetVariableValue() 2013-08-21 23:19:46 -05:00
Randy Heit
d798c7896c Remove FxGlobalVariable class 2013-08-21 23:01:41 -05:00
Randy Heit
4f528e3832 Remove lax from FCompileContext
- It's always set to true these days, so let's get rid of it.
2013-08-02 21:13:40 -05:00
Randy Heit
58f088c1ab Remove FxExpression::EvalExpression() entirely
- For the purposes of getting constant values from expressions, the only
  class where Resolve doesn't duplicate the functionality of
  EvalExpression was FxConstant. So, every other class has had its
  EvalExpression taken away, and FxConstant has had it renamed to GetValue.
2013-07-30 22:52:27 -05:00
Randy Heit
c810b4d724 Use new degree FLOPs for DECORATE expressions.
- Now that the VM supports degrees, use those instructions when emitting
  code for cos and sin DECORATE expressions. (This looks like it also
  fixed a bug where sqrt also did the degree to radian conversion.)
2013-07-28 20:31:23 -05:00
Randy Heit
241622300e Removed some EvalExpression implementations
- Removed EvalExpression() implementations from some subclasses of
  FxExpression that don't make any sense in the context of evaluating a
  constant value.
2013-07-28 19:40:48 -05:00
Randy Heit
2c24e7f9c6 Remove self pointer from FxExpression::EvalExpression()
- Every place that calls this now (which are all in thingdef_parse.cpp)
  passed NULL for the self pointer, so it was superfluous to have around.
2013-07-28 19:28:14 -05:00
Randy Heit
4a1fbdb32a Remove all state expression/param stuff
- This all became vestigial code after the relevant information was all
  moved into FStateTempCall. Now that the MBF code pointer code has been
  converted, I can be sure it wasn't still used anywhere.
2013-07-27 22:34:44 -05:00
Randy Heit
6cf0916f72 Use VMFunctionBuilder::EmitParamInt in thingdef_expression.cpp 2013-07-27 22:06:14 -05:00
Randy Heit
459ad5abff - Updated scripting branch to latest version in trunk.
SVN r4337 (scripting)
2013-06-07 03:31:30 +00:00
Randy Heit
2d13a45773 - Added read access to an actor's melee range from DECORATE and ACS, via Blue Shadow.
SVN r4305 (trunk)
2013-06-01 02:23:27 +00:00
Randy Heit
504496278b - Fixed: FxBinaryInts that needed to cast the right-side parameter to an int resolved the left
side instead.

SVN r4265 (trunk)
2013-05-13 02:55:48 +00:00
Christoph Oelckers
9f71c7cb4e - added Xaser's reactiontime for ACS and DECORATE expression patch.
SVN r4222 (trunk)
2013-04-20 21:32:03 +00:00
Randy Heit
ec6d522a29 - Remove the requirement that only action function default parameters can accept a constant
expression that evaluates to the class 'None'. (I don't know why that was there to begin with.)

SVN r4210 (trunk)
2013-04-09 22:15:41 +00:00
Randy Heit
2ce1debe8d - Added FDARI's get actor height and radius patch.
SVN r3955 (trunk)
2012-11-09 23:06:40 +00:00
Randy Heit
c2e700f116 - Move the RET and RETI final flag into the high bit of the destination selector.
SVN r3922 (scripting)
2012-10-29 01:11:24 +00:00
Randy Heit
6e88529324 - Added a RETI instruction for returning 15-bit signed immediate values.
- Changed Actor's Damage property into an actual function. All access to the damage property
  must now be done through GetMissileDamage. actor->GetMissileDamage(0, 1) is equivalent
  to the former actor->Damage, for the case where actor->Damage was not an expression. (I
  suppose I will probably need to make a thunk for DECORATE expressions that want to read it.)
- Cleaned up some decorate expression evaluation functions that are no longer used.

SVN r3919 (scripting)
2012-10-28 04:36:52 +00:00
Randy Heit
ac251cfe80 - Fixed: FxCompareEq::Emit()'s output must be in an integer register.
SVN r3910 (scripting)
2012-10-26 20:27:49 +00:00
Randy Heit
aade32a749 - Add PClass::AllClasses to the list of root items for the GC. Failure to do so will cause any
actors with names that conflicted with preceding actors from being freed, even though they
  can still be accessed via PClassActor::AllActorClasses, which gets iterated over in a number
  of places. (e.g. Zen Dynamics defines a Grenade actor, although there is one in zdoom.pk3 now.
  The Zen Dynamics' version would not go in the TypeTable, so it would be collected on map load,
  leading to a crash when attempts to access it through AllActorClasses are made.)

SVN r3908 (scripting)
2012-10-26 19:52:24 +00:00
Randy Heit
1a02d16356 - Added DecoFindSingleNameState for the extremely common case of finding a state with only
one name in its label. This avoids the alloca and security cookie calls.
- Consolidated lots of copy-pasted code in thingdef_expression.cpp to install helper functions
  into FindDecorateBuiltinFunction().

SVN r3907 (scripting)
2012-10-26 04:04:06 +00:00
Randy Heit
5c6bf0aeb4 - Fixed: FxCompareEq::Emit() needs to allocate the output register before freeing the inputs.
SVN r3906 (scripting)
2012-10-25 03:56:09 +00:00
Randy Heit
0dae6527ad - Fixed: FxCompareRel::Emit() needs to allocate the output register before freeing either of
the operands.

SVN r3903 (scripting)
2012-10-23 03:19:26 +00:00
Randy Heit
2c92941f6b - Fixed: FxCompareRel::Emit() generated broken code for floating point operands.
SVN r3895 (scripting)
2012-10-18 04:04:33 +00:00
Randy Heit
38d7b7d203 - Fixed errors and warnings when compiling with GCC. (Unfortunately, the VC++ debug builds
become ungodly slow when using mods with complex DECORATE. The GCC debug builds run just
  fine, however. Hopefully this is something that can be fixed later with an assembly-optimized
  version of the main VM loop, because I don't relish the thought of being stuck with GDB
  for debugging.)
- Fixed: The ACS_Named* action specials were erroneously defined as taking strings instead of
  names.
- Fixed: Copy-paste error caused FxMultiNameState::Emit to generate code that called
  DecoNameToClass instead of DecoFindMultiNameState.
- Updated FxActionSpecialCall::Emit for named script specials.
- Fixed inverted asserts for FxMinusSign::Emit and FxUnaryNotBitwise::Emit.


SVN r3893 (scripting)
2012-10-18 03:19:27 +00:00
Randy Heit
644f0c0e05 - Add a name to VMFunction so that the disassembly can be more informative.
SVN r3768 (scripting)
2012-07-17 03:35:03 +00:00
Randy Heit
615f49572b - Fix assertion failure when using FRandom.
SVN r3759 (scripting)
2012-07-14 03:10:47 +00:00
Randy Heit
562cf04db2 - Update scripting branch to trunk.
SVN r3758 (scripting)
2012-07-14 03:04:41 +00:00
Randy Heit
fd784b05c2 - Fix some GCC 4.7.1 warnings.
SVN r3747 (trunk)
2012-07-07 03:43:11 +00:00
Randy Heit
4bbc9266e2 - Fixed: FRandom told the expression evaluator that it returned an int instead of a float, so
using it in in any expression would automatically downcast it to an int unless ① its sibling in the expression tree was a float, or ② it was the only thing in the expression.

SVN r3721 (trunk)
2012-07-01 03:16:37 +00:00
Christoph Oelckers
4df1ea63b5 - added DavidPH's sqrt for DECORATE submission.
SVN r3586 (trunk)
2012-04-22 08:17:27 +00:00
Christoph Oelckers
e4880d162f - added Xaser's submission for accessing accuracy and stamina from DECORATE and ACS.
- added DECORATE properties for accuracy and stamina.
- Since these changes move properties from player_t to AActor all savegame compatibility code was removed and the min. savegame version bumped.


SVN r3427 (trunk)
2012-03-11 09:08:35 +00:00
Randy Heit
7b5612c45a - Added ACS_NamedExecuteWithResult for DECORATE expressions. Since this is a pretty long name,
you can also use CallACS, if you wish. The two are synonyms.

SVN r3373 (trunk)
2012-02-21 19:24:02 +00:00
Randy Heit
ddac7de3fe - Fixed: FxAbs::Resolve() called isNumeric() on the wrong ValueType (which is not initialized until the end of the function).
SVN r3171 (trunk)
2011-03-24 04:14:27 +00:00