diff --git a/src/scripting/decorate/thingdef_parse.cpp b/src/scripting/decorate/thingdef_parse.cpp index 23ffc48e8..991577f68 100644 --- a/src/scripting/decorate/thingdef_parse.cpp +++ b/src/scripting/decorate/thingdef_parse.cpp @@ -840,6 +840,21 @@ static void DispatchScriptProperty(FScanner &sc, PProperty *prop, AActor *defaul bool val = sc.CheckNumber() ? !!sc.Number : true; static_cast(f->Type)->SetValue(addr, !!val); } + else if (f->Type == TypeName) + { + sc.MustGetString(); + *(FName*)addr = sc.String; + } + else if (f->Type == TypeSound) + { + sc.MustGetString(); + *(FSoundID*)addr = sc.String; + } + else if (f->Type == TypeColor) + { + if (sc.CheckNumber()) *(int*)addr = sc.Number; + else *(PalEntry*)addr = V_GetColor(nullptr, sc); + } else if (f->Type->IsKindOf(RUNTIME_CLASS(PInt))) { sc.MustGetNumber(); diff --git a/src/scripting/zscript/zcc_compile.cpp b/src/scripting/zscript/zcc_compile.cpp index 65d08fb92..a240c1973 100644 --- a/src/scripting/zscript/zcc_compile.cpp +++ b/src/scripting/zscript/zcc_compile.cpp @@ -1720,7 +1720,19 @@ void ZCCCompiler::DispatchScriptProperty(PProperty *prop, ZCC_PropertyStmt *prop { static_cast(f->Type)->SetValue(addr, !!GetIntConst(ex, ctx)); } - if (f->Type->IsKindOf(RUNTIME_CLASS(PInt))) + else if (f->Type == TypeName) + { + *(FName*)addr = GetStringConst(ex, ctx); + } + else if (f->Type == TypeSound) + { + *(FSoundID*)addr = GetStringConst(ex, ctx); + } + else if (f->Type == TypeColor && ex->ValueType == TypeString) // colors can also be specified as ints. + { + *(PalEntry*)addr = V_GetColor(nullptr, GetStringConst(ex, ctx).GetChars(), &ex->ScriptPosition); + } + else if (f->Type->IsKindOf(RUNTIME_CLASS(PInt))) { static_cast(f->Type)->SetValue(addr, GetIntConst(ex, ctx)); }