public void test2(ValMap v) { int i1 = v["param1"].IntValue(); int i2 = v["param2"].IntValue(); Say(i1.ToString()); }
public static Vector2 ToVector2(this Value item) { Vector2 pos = Vector2.Zero; if (item is ValList) { var itemVals = ((ValList)item).values; if (itemVals.Count > 0) { pos.X = itemVals[0].FloatValue(); } if (itemVals.Count > 1) { pos.Y = itemVals[1].FloatValue(); } } else if (item is ValMap) { ValMap map = (ValMap)item; pos.X = map.Lookup(str_x).FloatValue(); pos.Y = map.Lookup(str_y).FloatValue(); } else if (item != null) { pos.X = item.FloatValue(); } return(pos); }
public static ValMap ToMap(StardewValley.Object obj) { var result = new ValMap(); string type = obj.Type; if (type == "asdf") { type = obj.Name; // because, c'mon. } result.map[_type] = new ValString(type); // ToDo: limit the following to ones that really apply for this type. result.map[_name] = new ValString(obj.Name); result["displayName"] = new ValString(obj.DisplayName); result["health"] = new ValNumber(obj.getHealth()); if (obj.isLamp.Get()) { result["isOn"] = ValNumber.Truth(obj.IsOn); } result["quality"] = new ValNumber(obj.Quality); result.map[_harvestable] = ValNumber.Truth(obj.readyForHarvest.Get()); result["minutesTillReady"] = new ValNumber(obj.MinutesUntilReady); result["value"] = new ValNumber(obj.sellToStorePrice()); result["description"] = new ValString(obj.getDescription()); return(result); }
static ValMap ToMap(ResourceClump clump) { if (clump == null) { return(null); } var result = new ValMap(); result.map[_type] = new ValString("Clump"); string name; switch (clump.parentSheetIndex.Value) { case ResourceClump.boulderIndex: name = "Boulder"; break; case ResourceClump.hollowLogIndex: name = "Hollow Log"; break; case ResourceClump.meteoriteIndex: name = "Meteorite"; break; case ResourceClump.mineRock1Index: case ResourceClump.mineRock2Index: case ResourceClump.mineRock3Index: case ResourceClump.mineRock4Index: name = "Mine Rock"; break; case ResourceClump.stumpIndex: name = "Stump"; break; default: name = "#" + clump.parentSheetIndex.Value; break; } result.map[_name] = new ValString(name); result.map[_health] = new ValNumber(clump.health.Value); return(result); }
public static void SpriteClassSync(ValMap p_sprite) { Sprite sprite = (p_sprite["ref"] as ValWrapper <Sprite>).UnWrapp(); sprite.texture = (p_sprite["image"] as ValWrapper <Texture>).UnWrapp().texture; sprite.position = new Vector2(p_sprite["x"].FloatValue(), ReceiveY(p_sprite["y"].FloatValue())); sprite.rotation = p_sprite["rotation"].FloatValue(); sprite.origin.X = sprite.texture.Width / 2; sprite.origin.Y = sprite.texture.Height / 2; }
public static Vector2 GetVector2(this ValMap map, string key, Vector2 defValue = default(Vector2)) { Value val = null; if (!map.TryGetValue(key, out val)) { return(defValue); } return(val.ToVector2()); }
public static string GetString(this ValMap map, string key, string defaultValue = null) { Value val = null; if (!map.TryGetValue(key, out val) || val == null) { return(defaultValue); } return(val.ToString()); }
public static bool GetBool(this ValMap map, string key, bool defaultValue = false) { Value val = null; if (!map.TryGetValue(key, out val) || val == null) { return(defaultValue); } return(val.BoolValue()); }
public static int GetInt(this ValMap map, string key, int defaultValue) { Value val = null; if (!map.TryGetValue(key, out val) || val == null) { return(defaultValue); } return(val.IntValue()); }
public static double GetDouble(this ValMap map, string key, float defaultValue) { Value val = null; if (!map.TryGetValue(key, out val) || val == null) { return(defaultValue); } return(val.DoubleValue()); }
public void RunScript(string sourceCode) { string extraSource = "ship.reset = function(); self.x=0; self.y=0; self.rot=0; end function\n"; interpreter.Reset(extraSource + sourceCode); interpreter.Compile(); ValMap data = new ValMap(); data["x"] = new ValNumber(transform.localPosition.x); data["y"] = new ValNumber(transform.localPosition.y); data["rot"] = new ValNumber(transform.localRotation.z); interpreter.SetGlobalValue(globalVarName, data); }
public void Break(bool silent = false) { if (!silent && !allowControlCBreak) { return; } // grab the full stack and tuck it away for future reference ValList stack = M1API.StackList(interpreter.vm); // also find the first non-null entry, to display right away SourceLoc loc = null; if (interpreter.vm != null) { foreach (var stackLoc in interpreter.vm.GetStack()) { loc = stackLoc; if (loc != null) { break; } } } interpreter.Stop(); console.AbortInput(); console.keyBuffer.Clear(); if (!silent) { string msg = "BREAK"; if (loc != null) { msg += " at "; if (loc.context != null) { msg += loc.context + " "; } msg += "line " + loc.lineNum; } textDisplay.Print(msg + "\n"); //Debug.Log("printed: " + msg); } ValMap globals = interpreter.vm.globalContext.variables; interpreter.Reset(); interpreter.REPL(""); // (forces creation of a VM) interpreter.vm.globalContext.variables = globals; globals.SetElem(M1API._stackAtBreak, stack); AddGlobals(); //Debug.Log("Rebuilt VM and restored " + globals.Count + " globals"); }
public static ValMap GetMap(this ValMap map, string key, bool createIfNotFound = false) { Value val = null; if (!map.TryGetValue(key, out val) || !(map is ValMap)) { val = null; if (createIfNotFound) { val = new ValMap(); map[key] = val; } } return((ValMap)val); }
static ValMap ToMap(TerrainFeature feature) { if (feature == null) { return(null); } var result = new ValMap(); result.map[_type] = result["name"] = new ValString(feature.GetType().Name); if (feature is Tree tree) { result.map[_treeType] = new ValNumber(tree.treeType.Value); result.map[_growthStage] = new ValNumber(tree.growthStage.Value); result.map[_health] = new ValNumber(tree.health.Value); result.map[_stump] = ValNumber.Truth(tree.stump.Value); result.map[_tapped] = ValNumber.Truth(tree.tapped.Value); result.map[_hasSeed] = ValNumber.Truth(tree.hasSeed.Value); } else if (feature is HoeDirt hoeDirt) { result.map[_dry] = ValNumber.Truth(hoeDirt.state.Value != 1); var crop = hoeDirt.crop; if (crop == null) { result.map[_crop] = null; } else { ValMap cropInfo = new ValMap(); cropInfo.map[_phase] = new ValNumber(crop.currentPhase.Value); cropInfo.map[_maxPhase] = new ValNumber(crop.phaseDays.Count - 1); cropInfo.map[_mature] = ValNumber.Truth(crop.fullyGrown.Value); cropInfo.map[_dead] = ValNumber.Truth(crop.dead.Value); cropInfo.map[_harvestMethod] = ValNumber.Truth(crop.harvestMethod.Value); bool harvestable = (int)crop.currentPhase.Value >= crop.phaseDays.Count - 1 && (!crop.fullyGrown.Value || (int)crop.dayOfCurrentPhase.Value <= 0); cropInfo.map[_harvestable] = ValNumber.Truth(harvestable); //Note: we might be able to get the name of the crop // using crop.indexOfHarvest or crop.netSeedIndex var product = new StardewValley.Object(crop.indexOfHarvest.Value, 0); cropInfo.map[_name] = new ValString(product.DisplayName); result.map[_crop] = cropInfo; } } return(result); }
void BeginRun(string source) { //Debug.Log("BeginRun; Program source: " + source); System.GC.Collect(); runningInstance = this; if (interpreter.vm == null) { interpreter.REPL("", 0); // (forces creation of a VM) } else { interpreter.vm.Reset(); } if (string.IsNullOrEmpty(source)) { return; } ValMap globals = interpreter.vm.globalContext.variables; if (globals != null) { globals.map.Remove(M1API._stackAtBreak); } AddGlobals(); interpreter.Reset(source); try { interpreter.Compile(); } catch (MiniscriptException me) { Debug.Log("Caught MiniScript exception: " + me); } if (interpreter.vm == null) { interpreter.REPL("", 0); } interpreter.vm.globalContext.variables = globals; interpreter.RunUntilDone(0.03f); //lastNonidleTime = Time.time; if (interpreter.NeedMoreInput()) { // If the interpreter wants more input at this point, it's because the program // has an unterminated if/while/for/function block. Let's just cancel the run. Debug.Log("Canceling run in BeginRun"); Break(true); } }
static ValMap ToMap(Character character) { if (character == null) { return(null); } var result = new ValMap(); result.map[_type] = new ValString("Character"); result.map[_name] = new ValString(character.Name); result["displayName"] = new ValString(character.displayName); result["facing"] = new ValNumber(character.FacingDirection); result["isEmoting"] = ValNumber.Truth(character.isEmoting); result["emote"] = new ValNumber(character.CurrentEmote); result["isMonster"] = ValNumber.Truth(character.IsMonster); return(result); }
public static ValMap SpriteClass() { if (spriteClass != null) { return(spriteClass); } spriteClass = new ValMap(); //spriteClass.assignOverride = (key, value) => //{ // switch (key.ToString()) // { // case "image": // Sprite sprite = (spriteClass["ref"] as ValWrapper<Sprite>).UnWrapp(); // sprite.texture = (value as ValWrapper<Texture>).UnWrapp().texture; // sprite.origin.X = sprite.texture.Width / 2; // sprite.origin.Y = sprite.texture.Height / 2; // return false; // case "x": // (spriteClass["ref"] as ValWrapper<Sprite>).UnWrapp().position.X = value.FloatValue(); // return false; // case "y": // (spriteClass["ref"] as ValWrapper<Sprite>).UnWrapp().position.Y = ReceiveY(value.FloatValue()); // return false; // case "rotation": // (spriteClass["ref"] as ValWrapper<Sprite>).UnWrapp().rotation = value.FloatValue(); // return false; // } // return false; //}; //spriteClass["x"] = ValNumber.zero; //spriteClass["y"] = ValNumber.zero; //spriteClass["rotation"] = ValNumber.zero; //spriteClass["image"] = null; //spriteClass["ref"] = null; //spriteClass["display"] = null; return(spriteClass); }
//-------------------------------------------------------------------------------- #region Public Methods public void UpdateFromScript() { ValMap data = null; try { data = interpreter.GetGlobalValue(globalVarName) as ValMap; } catch (UndefinedIdentifierException) { Debug.LogWarning(globalVarName + " not found in global context."); } if (data == null) { return; } Transform t = transform; Vector3 pos = t.localPosition; Value xval = data["x"]; if (xval != null) { pos.x = xval.FloatValue(); } Value yval = data["y"]; if (yval != null) { pos.y = yval.FloatValue(); } t.localPosition = pos; Value rotVal = data["rot"]; if (rotVal != null) { t.localRotation = Quaternion.Euler(0, 0, (float)rotVal.FloatValue()); } }
public void UpdateScriptFromSelf() { if (positionMap == null) { positionMap = new ValMap(); } positionMap.SetElem(xStr, new ValNumber(transform.position.x)); positionMap.SetElem(yStr, new ValNumber(transform.position.y)); interpreter.SetGlobalValue("position", positionMap); if (actualMap == null) { actualMap = new ValMap(); } actualMap.SetElem(headingStr, new ValNumber(Mathf.Round(reindeer.curAngle))); actualMap.SetElem(speedStr, new ValNumber(Mathf.Round(reindeer.curSpeed / reindeer.maxSpeed * 100f))); interpreter.SetGlobalValue("actual", actualMap); interpreter.SetGlobalValue("energy", new ValNumber(Mathf.Round(reindeer.energy))); interpreter.SetGlobalValue("health", new ValNumber(reindeer.health)); interpreter.SetGlobalValue("deerCount", GetDeerCount()); interpreter.SetGlobalValue("heading", new ValNumber(Mathf.Round(reindeer.targetAngle))); }
public static ValMap ToMap(StardewValley.Item item) { if (item == null) { return(null); } var result = new ValMap(); result.map[_type] = new ValString(item.GetType().Name); // ToDo: limit the following to ones that really apply for this type. result.map[_name] = new ValString(item.Name); result["displayName"] = new ValString(item.DisplayName); result["stack"] = new ValNumber(item.Stack); result["maxStack"] = new ValNumber(item.maximumStackSize()); result["category"] = new ValString(item.getCategoryName()); result["value"] = new ValNumber(item.salePrice()); result["description"] = new ValString(item.getDescription().Trim()); if (item is StardewValley.Tools.WateringCan can) { result["waterLeft"] = new ValNumber(can.WaterLeft); result["waterMax"] = new ValNumber(can.waterCanMax); } return(result); }
public void Init(Bot botContext = null) { this.bot = botContext; M1API.Init(this); var display = console.display; display.backColor = new Color(0.31f, 0.11f, 0.86f); display.Clear(); var colors = new Color[] { Color.Red, Color.Yellow, Color.Green, Color.Purple }; display.SetCursor(19, 3); for (int i = 0; i < 4; i++) { display.textColor = colors[i]; display.Print("*"); } display.textColor = Color.Azure; display.Print(" Farmtronics " + (botContext == null ? "Home" : "Bot") + " Computer "); for (int i = 0; i < 4; i++) { display.textColor = colors[3 - i]; display.Print("*"); } display.textColor = Color.White; display.NextLine(); if (interpreter.vm == null) { interpreter.REPL("", 0); // (forces creation of a VM) AddGlobals(); } { var d = new RealFileDisk(); d.readOnly = true; d.Open(Path.Combine(ModEntry.helper.DirectoryPath, "assets", "sysdisk")); sysDisk = d; FileUtils.disks["sys"] = sysDisk; } if (!string.IsNullOrEmpty(Constants.CurrentSavePath)) { var d = new RealFileDisk(); d.readOnly = false; d.Open(Path.Combine(Constants.CurrentSavePath, "usrdisk")); FileUtils.disks["usr"] = d; } // Prepare the env map env = new ValMap(); if (FileUtils.disks.ContainsKey("usr") && FileUtils.disks["usr"] != null) { env["curdir"] = new ValString("/usr/"); } else { env["curdir"] = new ValString("/sys/demo"); } env["home"] = new ValString("/usr/"); env["prompt"] = new ValString("]"); env["morePrompt"] = new ValString("...]"); // NOTE: importPaths is also in the reset function in startup.ms. // If you change this in either place, change it in both! var importPaths = new List <string> { ".", "/usr/lib", "/sys/lib" }; env["importPaths"] = importPaths.ToValue(); RunStartupScripts(); }
public static ValMap GetInfo(GameLocation loc, Vector2 xy) { // check farmers if (Game1.player.currentLocation == loc && Game1.player.getTileLocation() == xy) { return(ToMap(Game1.player)); } foreach (var farmer in Game1.otherFarmers.Values) { if (farmer.currentLocation == loc && farmer.getTileLocation() == xy) { return(ToMap(farmer)); } } // check NPCs foreach (var character in loc.characters) { if (character.getTileLocation() == xy) { return(ToMap(character)); } } // check objects StardewValley.Object obj = null; loc.objects.TryGetValue(xy, out obj); if (obj != null) { return(ToMap(obj)); } // check terrain features TerrainFeature feature = null; loc.terrainFeatures.TryGetValue(xy, out feature); if (feature != null) { return(ToMap(feature)); } // check LARGE terrain features // (not 100% certain we need to check these separately, but maybe) var xyBounds = new Rectangle((int)(xy.X * 64), (int)(xy.Y * 64), 64, 64); foreach (LargeTerrainFeature ltf in loc.largeTerrainFeatures) { if (ltf.getBoundingBox().Intersects(xyBounds)) { return(ToMap(ltf)); } } // check resource clumps (these span multiple tiles) var bbox = new Rectangle((int)xy.X * 64, (int)xy.Y * 64, 64, 64); foreach (var clump in loc.resourceClumps) { if (clump.getBoundingBox(clump.tile.Value).Intersects(bbox)) { return(ToMap(clump)); } } // check water and other such terrain properties int x = (int)xy.X; int y = (int)xy.Y; string hasProp = null; if (loc.doesTileHaveProperty(x, y, "Water", "Back") != null) { hasProp = "Water"; } if (loc.doesTileHaveProperty(x, y, "Trough", "Back") != null) { hasProp = "Trough"; } if (loc.doesTileHaveProperty(x, y, "Bed", "Back") != null) { hasProp = "Bed"; } if (!string.IsNullOrEmpty(hasProp)) { var result = new ValMap(); result.map[_type] = new ValString("Property"); result.map[_name] = new ValString(hasProp); return(result); } // check buildings var buildings_layer = loc.map.GetLayer("Buildings"); var tmp = buildings_layer.PickTile(new xTile.Dimensions.Location(x * 64, y * 64), Game1.viewport.Size); if (tmp != null) { var result = new ValMap(); result.map[_type] = new ValString("Building"); result.map[_name] = result.map[_type]; return(result); } return(null); }
public int Add(ValMap sprite) { sprites.Add(sprite); counter++; return(counter - 1); }
public ValMap NewClass() { ValMap spriteDisplayClass = new ValMap(); spriteDisplayClass.assignOverride = (key, value) => { switch (key.ToString()) { case "scrollX": (spriteDisplayClass["ref"] as ValWrapper <SpriteDisplay>).UnWrapp().scrollX = value.FloatValue(); return(false); case "scrollY": (spriteDisplayClass["ref"] as ValWrapper <SpriteDisplay>).UnWrapp().scrollY = value.FloatValue(); return(false); } return(true); }; Intrinsic f = Intrinsic.Create(""); f.code = (context, partialResult) => { var self = context.GetVar("self") as ValMap; var spriteDisplay = (self["ref"] as ValWrapper <SpriteDisplay>).UnWrapp(); spriteDisplay.Clear(); return(Intrinsic.Result.Null); }; spriteDisplayClass["clear"] = f.GetFunc(); f = Intrinsic.Create(""); f.AddParam("sprite"); f.code = (context, partialResult) => { var spriteVal = context.GetVar("sprite") as ValMap; spriteVal.assignOverride = (key, value) => { switch (key.ToString()) { case "image": Sprite sprite = (spriteVal["ref"] as ValWrapper <Sprite>).UnWrapp(); sprite.texture = (value as ValWrapper <Texture>).UnWrapp().texture; sprite.origin.X = sprite.texture.Width / 2; sprite.origin.Y = sprite.texture.Height / 2; return(false); case "x": (spriteVal["ref"] as ValWrapper <Sprite>).UnWrapp().position.X = value.FloatValue(); return(false); case "y": (spriteVal["ref"] as ValWrapper <Sprite>).UnWrapp().position.Y = Sprite.ReceiveY(value.FloatValue()); return(false); case "rotation": (spriteVal["ref"] as ValWrapper <Sprite>).UnWrapp().rotation = value.FloatValue(); return(false); } return(false); }; if (spriteVal["x"] == null) { spriteVal["x"] = ValNumber.zero; } if (spriteVal["y"] == null) { spriteVal["y"] = ValNumber.zero; } if (spriteVal["rotation"] == null) { spriteVal["rotation"] = ValNumber.zero; } if (spriteVal["image"] == null) { spriteVal["image"] = ValNumber.zero; } spriteVal["ref"] = new ValWrapper <Sprite>(new Sprite()); //Sync monomicro_Sprite with Mono_Sprite Sprite.SpriteClassSync(spriteVal); var self = context.GetVar("self") as ValMap; var spriteDisplay = (self["ref"] as ValWrapper <SpriteDisplay>).UnWrapp(); spriteVal["display"] = new ValWrapper <SpriteDisplay>(spriteDisplay); spriteDisplay.Add(spriteVal); foreach (ValMap sp in spriteDisplay.sprites) { Debug.Print(sp.ToString()); } return(Intrinsic.Result.Null); }; spriteDisplayClass["push"] = f.GetFunc(); spriteDisplayClass["ref"] = new ValWrapper <SpriteDisplay>(this); spriteDisplayClass["scrollX"] = ValNumber.zero; spriteDisplayClass["scrollY"] = ValNumber.zero; return(spriteDisplayClass); }
static void AddIntrinsics() { if (intrinsicsAdded) { return; // already done! } intrinsicsAdded = true; Intrinsic f; // look // finds the closest enemy within a narrow angle of our current heading, // and returns a map with: distance, direction, heading, speed, energy, health. f = Intrinsic.Create("look"); f.code = (context, partialResult) => { ReindeerScript rs = context.interpreter.hostData as ReindeerScript; Vector2 here = rs.transform.position; Vector2 forward = rs.transform.right; Reindeer reindeer = rs.reindeer; ValMap result = null; float resultDist = 0; foreach (Reindeer deer in rs.game.deer) { if (deer == reindeer) { continue; } if (!deer.gameObject.activeSelf) { continue; } Vector2 dvec = (Vector2)deer.transform.position - here; float ang = Vector2.Angle(dvec, forward); if (ang < 5) { float dist = dvec.magnitude; if (result == null || dist < resultDist) { float direction = Mathf.Atan2(dvec.y, dvec.x) * Mathf.Rad2Deg; if (result == null) { result = new ValMap(); } resultDist = dist; // On second thought, not including direction, as this makes // aiming *too* precise. //result.SetElem(directionStr, new ValNumber(direction)); result.SetElem(distanceStr, new ValNumber(Mathf.Round(dist))); result.SetElem(headingStr, new ValNumber(deer.curAngle)); result.SetElem(speedStr, new ValNumber(deer.curSpeed)); result.SetElem(energyStr, new ValNumber(Mathf.Round(deer.energy))); result.SetElem(healthStr, new ValNumber(deer.health)); } } } return(new Intrinsic.Result(result)); }; // throw(energy=20) // fires a snowball in our current heading; returns 1 if success, 0 if failed. f = Intrinsic.Create("throw"); f.AddParam("energy", new ValNumber(20)); f.code = (context, partialResult) => { ReindeerScript rs = context.interpreter.hostData as ReindeerScript; Reindeer reindeer = rs.reindeer; float eCost = (float)context.GetVar("energy").DoubleValue(); if (reindeer.ThrowSnowball(eCost)) { return(new Intrinsic.Result(ValNumber.one)); } return(new Intrinsic.Result(ValNumber.zero)); }; // drop(energy=20, delay=5) // drops a meadow mine; returns 1 if success, 0 if failed f = Intrinsic.Create("drop"); f.AddParam("energy", new ValNumber(20)); f.AddParam("delay", new ValNumber(5)); f.code = (context, partialResult) => { ReindeerScript rs = context.interpreter.hostData as ReindeerScript; Reindeer reindeer = rs.reindeer; float eCost = (float)context.GetVar("energy").DoubleValue(); float delay = (float)context.GetVar("delay").DoubleValue(); if (reindeer.LayMine(eCost, delay)) { return(new Intrinsic.Result(ValNumber.one)); } return(new Intrinsic.Result(ValNumber.zero)); }; }
void Prelude() { // Create Displays int display_counter = 0; SpriteDisplay new_display = new SpriteDisplay(spriteBatch); new_display.Cartesian = Cartesian; displays.Add(new_display); var new_display_val = new_display.NewClass(); displays[display_counter].DisplayRef = new_display_val as ValMap; display_counter++; new_display = new SpriteDisplay(spriteBatch); new_display.Cartesian = Cartesian; displays.Add(new_display); new_display_val = new_display.NewClass(); displays[display_counter].DisplayRef = new_display_val as ValMap; display_counter++; // std print functions interpreter.standardOutput = (string s) => Debug.Print(s); interpreter.implicitOutput = (string s) => Debug.Print(s); interpreter.errorOutput = (string s) => { Debug.Print(s); interpreter.Stop(); }; // globals interpreter.SetGlobalValue("dt", ValNumber.zero); interpreter.SetGlobalValue("width", new ValNumber(graphicsDeviceManager.PreferredBackBufferWidth)); interpreter.SetGlobalValue("height", new ValNumber(graphicsDeviceManager.PreferredBackBufferHeight)); // intrinsics Intrinsic f = Intrinsic.Create("display"); f.AddParam("n"); f.code = (context, partialResult) => { int n = (int)context.GetVar("n").FloatValue(); if (n >= 0 && n < displays.Count) { return(new Intrinsic.Result(displays[n].DisplayRef)); } else { Debug.Print("Invalid Display: " + n.ToString()); return(Intrinsic.Result.Null); } }; f = Intrinsic.Create("Sprite"); f.code = (context, partialResult) => { var new_sprite = Sprite.SpriteClass(); //new_sprite.assignOverride = Sprite.SpriteClass().assignOverride; //new_sprite["ref"] = new ValWrapper<Sprite>(new Sprite()); return(new Intrinsic.Result(new_sprite)); }; Intrinsic.shortNames[Sprite.SpriteClass()] = "Sprite"; f = Intrinsic.Create(""); f.AddParam("path"); f.code = (context, partialResult) => { string path = context.GetVar("path").ToString(); Texture texture = new Texture(graphicsDeviceManager, path); return(new Intrinsic.Result(new ValWrapper <Texture>(texture))); }; ValMap file = new ValMap(); file["loadImage"] = f.GetFunc(); interpreter.SetGlobalValue("file", file); }