The British Heart Foundation & Flora pro.activ – an unhealthy relationship

Table of Contents

OBSE v0020 Command Documentation
SetIsAutomaticDoor - sets or clears the "Automatic" flag for the door. GetActiveEffectCasters - returns an Array containing the casters of each of the calling actor's active effects, in the order in which they appear in his active effect list. GetRefVariable - returns the reference stored in a ref variable by name, either from the calling reference's script or the specified quest. If no 'value' parameter is specified, it is assumed to be the same value as the 'mask' parameter. By default, disabled nodes are ignored; pass 1 for the optional sixth argument to include them.

Mod Local Data Functions


IsDodging - returns 1 if the calling actor is dodging isDodging: IsStaggered - returns 1 if the calling actor is staggered isStaggered: IsMovingForward - returns 1 if the calling actor is attempting to move forward, even if his path is blocked. IsMovingLeft - returns 1 if the calling actor is attempting to strafe left isMovingLeft: IsMovingRight - returns 1 if the calling actor is attempting to strafe right isMovingRight: IsMovingBackward - returns 1 if the calling actor is attempting to move backwards isMovingBackwards: IsTurningLeft - returns 1 if the calling actor is turning left isTurningLeft: IsTurningRight - returns 1 if the calling actor is turning right isTurningRight: IsInAir - returns 1 if the calling actor is airborne, whether jumping or falling isInAir: IsJumping - returns 1 if the calling actor is beginning to jump playing the JumpStart anim group isJumping: IsOnGround - returns 1 if the calling actor is on the ground isOnGround: IsFlying - returns 1 if the calling actor is flying.

Only creatures can fly. IsPowerAttacking - returns 1 if the calling actor is executing a power attack isPowerAttacking: IsCasting - returns 1 if the calling actor is casting a spell isCasting: GetFallTimer - returns the length of time for which the actor has been falling fallTimer: IsAnimGroupPlaying - returns 1 if the specified animation group is currently being played by the calling actor playing: AnimPathIncludes - returns 1 if one of the calling actor's currently playing animation paths includes the specified substring includes: GetProcessLevel - returns the actor's current process level, or -1 if called on a non-actor.

Process level determines how frequently the game updates an actor's AI. In general, high process actors are in the same cell as the player, while more distant actors are kept at a lower process level.

GetEquippedItems - returns an array containing all items currently equipped by the calling actor items: GetSpells - returns an array containing all of the spells in an actor's spell list. GetActorAlpha - actor references can be made more or less opaque or transparent by changing their alpha property via SetActorAlpha. This function returns the calling actor's current alpha as a floating point number between 0.

GetAllies - for an actor in combat, returns an Array of other actors which the game considers allies of the calling actor at that particular moment. GetTargets - for an actor in combat, returns an Array of actors which the game considers potential targets of the calling actor at that particular moment. GetSelectedSpells - for an actor in combat, returns an Array containing zero to seven spells which the actor has selected from his full spell list including spells resolved from leveled spell lists for use.

The list contains a maximum of one spell from each of the following categories: GetCombatSpells - for an actor in combat, returns an Array of all the spells in the actor's spellbook, including spells resolved from leveled spells lists which are resolved into actual spells when the actor enters combat. The actor will use a subset of these spells during combat; use GetSelectedSpells to determine which of these spells have been selected for use. PlayIdle - attempts to make the calling actor play the specified idle animation.

Pass 1 for the forceIdle parameter to force the actor to play the idle regardless of any other animations currently playing. A set of information defining actor behavior. Commands which modify AI packages operate on the base package and may have no effect or unpredictable effects on actor references currently executing that package.

SetPackageTarget - sets the target of the specified package. Target can be of several types, leading to several syntaxes for this command. The first listed usage sets the target to a specific reference. The second sets it to a particular base object with a specified quantity; when the package executes the actor will look for references to that base object to use as the target s.

The third usage sets the target to a code representing the type s of objects to be used as targets, along with a quantity. This command does not change the targets of actor references currently executing the package unless they re-evaluate their package after the change has been made. GetPackageData - returns a stringmap containing info about a package. The returned stringmap contains the following keys: GetPackageScheduleData - returns a stringmap containing info about a package schedule.

GetPackageLocationData - returns a stringmap containing info about a package location. GetPackageTargetData - returns a stringmap containing info about a package target. It accepts a stringmap consisting of one or more stringmaps with keys "Location", "Target", or "Schedule", each following the formats listed above. If any data is omitted, the existing package data will be retained.

SetPackageTargetData - sets the target of a package. Accepts a stringmap of the same format as that returned by GetPackageTargetData. Omitted fields retain their existing values. SetPackageLocationData - sets the location of a package based on the passed stringmap of the same format as that returned by GetPackageLocationData. SetPackageScheduleData - sets the schedule of a package. Accepts a stringmap of the same format as that returned by GetPackageScheduleData.

Package Flag Commands - gets or sets the state of one of the flags on the specified package. Is Poison Flag bool - whether the alchemy item is considered a poison. A poison is an alchemy item with all hostile effects. An alchemy item with even a single non-hostile effect is not a poison. IsPoison - returns whether the alchemy item is a poison. MatchPotion - Oblivion keeps track of potions created by the player and reuses them if another potion is created with the same effects as one created previously.

This command takes a potion and returns a previously-created potion bearing the same effects, if one exists. Note that in some cases it may return the same potion that was passed as the argument.

Mainly useful during potion creation in the Alchemy menu, or when dynamically modifying potion effects via script. Type short - the type of alchemy apparatus Quality float - the level of the alchemy apparatus quality. The ApparatusQuality list shows the basic levels, but any value between 0 and 1.

GetApparatusType - returns the alchemy apparatus type of the calling reference or passed objectID apparatusType: SetApparatusType - sets the alchemy type of the calling reference or passed objectID nothing reference. GetQuality - returns the quality level of the calling reference or passed objectID quality: SetQuality - sets the quality level of the calling reference or passed objectID nothing reference.

ModQuality - modifies the quality of the calling reference or passed objectID nothing reference. Breakable , Enchantable , Inventory , Named , Wearable. Armor Rating long - the value of protection provided by the armor Armor Type short - the type of the armor. GetArmorAR - returns the armor rating of the object armorRating: SetArmorAR - sets the armor rating of the object nothing reference.

ModArmorAR - modifies the armor rating of the object up or down nothing reference. GetArmorType - returns 0 if light armor and 1 if heavy armor armorType: SetArmorType - sets whether the armor is heavy or light nothing reference. GetBirthsignSpells - returns an Array containing the spells associated with the specified birthsign spells: Inventory , Description , Enchantable , Named , Simple. Can Be Taken bool whether the book can be taken IsScroll bool whether the book is a scroll SkillTaught bool whether the book teaches a skill or not.

GetBookIsScroll - returns whether the book is a scroll or not isScroll: GetBookSkillTaught - returns the skill taught by the book. If no skill is taught, returns SetBookCantBeTaken - sets whether the book can be taken nothing reference. SetBookIsScroll - sets whether the book is a scroll nothing reference. SetBookSkillTaught - sets the skill the book teaches. The the skillTaught value is not one of the skills, sets the value to GetBookText - returns the text of a book as a string.

The result must be assigned to a string variable. GetBookLength - returns the number of characters in a book's text. There are two types of cells: Exterior cells exist as parts of worldspaces and often inherit the name of their parent worldspace. Interior cells are isolated from other parts of the world and have their own names. When the player visits and then exits an interior cell, the game records the number of total hours elapsed in the game at the moment the player exits; this value is the cell's "detach time.

Music Type short - the music type for the cell. GetCellMusicType - returns the music type of the player's current cell. SetCellWaterHeight - changes the water height of the specified cell. If used to alter the water height in a loaded cell, the water shader will reflect the new height and actors will switch between swimming and walking animations appropriately. However, floating physics and the water surface will not be updated until the cell is reloaded.

This command has no effect in exteriors or in cells which have no water. GetCellDetachTime - returns the cell's detach time, described above. GetCellResetHours - returns the number of hours which must pass in the game before the cell is reset. SetCellResetHours - sets the number of hours which mustpass before the cell is reset. This value must be less than the game setting iHoursToRespawnCell.

Using this function to modify the reset hours for the current cell, or for exterior cells, has no effect. GetCellBehavesAsExterior - returns true if the "behaves as exterior" cell is checked for the specified interior cell. IsCellPublic - returns 1 if the cell is marked as 'public'.

SetCellIsPublic - sets the 'public' flag for the cell. SetCellHasWater - sets the flag indicating whether or not the interior cell has water. Only affects interior cells, and changes are not visible until the cell is reloaded. Has no effect if called while the player is inside the specified cell. SetCellBehavesAsExterior - sets the 'behaves like exterior' flag for the interior cell.

GetCellClimate - returns the climate for the specified cell. SetCellClimate - sets the climate for the specified cell. GetCellLighting - returns a StringMap describing the lighting properties for the interior cell. SetCellLighting - alters one or more of an interior cell's lighting fields, taking a StringMap of the same format as that returned by GetCellLighting. Include only the elements you wish to change; if a key is not found its value will not be modified.

GetTerrainHeight - returns the height of the terrain mesh at the specified x and y coordinates within the current exterior worldspace. X and Y are worldspace coordinates e. If the coordinates are outside of any loaded cells, returns 0. Note that this command does not check for collision with surfaces other than terrain. IsOblivionInterior - returns 1 if the "Oblivion interior" flag has been checked for the specified interior cell. IsOblivionWorld - returns 1 if the "Oblivion World" flag has been checked for the specified world space.

CanFastTravelFromWorld - returns 1 if the player is allowed to fast-travel from the specified world space. GetCellWaterType - returns the Water used by the interior cell. Returns zero if the cell has no water, or if the cell uses the default water type. SetCellWaterType - sets the Water used by the interior cell. Changes will not be visible until the cell is reloaded. GetCellNorthRotation - returns the rotation on the Z axis of the north marker within the specified interior cell, if one is present.

The game uses the north marker's Z rotation to determine what direction is considered "north". Rotation returned is in degrees and is 0. Climate settings define weather, sun, and moon settings for a worldspace. Additional information about these settings can be found at the Construction Set Wiki. Sunrise Begin, Sunrise End, Sunset Begin, Sunset End short - these values are the number of 10 minute increments since midnight the given event occurs MoonPhaseLength short - the number of days in a moon's phase HasMasser, HasSecunda bool - which moons the climate will show Volatility short - the volatility of the climate, or how often the weather is likely to change.

GetClimateSunriseBegin - returns the time sunrise begins specified as a number of 10 minute units since midnight sunriseBegin: GetClimateSunriseEnd - returns the time sunrise ends specified as a number of 10 minute units since midnight sunriseEnd: GetClimateSunsetBegin - returns the time sunset begins specified as a number of 10 minute units since midnight sunsetBegin: GetClimateSunsetEnd - returns the time sunset ends specified as a number of 10 minute units since midnight sunsetEnd: GetClimateMoonPhaseLength - returns the number of days in the phase of the moons.

The total moon cycle length is 8 x PhaseLength according to the CS. SetClimateSunriseBegin - sets the time sunrise begins as a number of 10 minute units since midnight nothing SetClimateSunriseBegin time: GetClimateVolatility - returns the volatility of the climate volatility: Clothing is any wearable object that does not provide armor protection. Includes amulets and rings. Enchantable , Inventory , Named , Wearable. Actor , Attacking only attack damage , Inventory , Magic Target.

Creature Type short - the type of creature Combat Skill short - the value for all combat skills for the creature Magic Skill short - the value for all magic skills for the creature Stealth Skill short - the value for all stealth skills for the creature Reach short - the attack reach of the creature Soul Level short - the soul level of the creature Base Scale float - the base scale of the creature. IsCreature - returns whether the reference or passed id is a creature isCreature: GetCreatureCombatSkill - returns the combat skill for the creature combatSkill: GetCreatureMagicSkill - returns the magic skill for the creature magicSkill: GetCreatureStealthSkill - returns the stealth skill for the creature stealthSkill: GetCreatureReach - returns the reach of the creature reach: GetCreatureSoulLevel - returns the soul level of the creature soulLevel: GetCreatureBaseScale - retuns the base scale of the creature scale: GetCreatureWalks - returns 1 if the Walks flag is set on the creature walks: GetCreatureSwims - returns 1 if the Swims flag is set on the creature swims: GetCreatureFlies - returns 1 if the Flies flag is set on the creature flies: IsCreatureBiped - returns 1 if the Biped flag is set on the creature biped: GetRider - returns the NPC currently riding the calling horse.

GetCreatureSoundBase - returns the creature from which the specified creature's sounds are derived, if any. SetCreatureSoundBase - "sets the creature from which the creature inherits its sounds.

The inheriting creature must not itself be a sound base mustn't define its own sounds , and the creature specified as the sound base must be a sound base defining its own sounds or null. HasModel - returns 1 if the creature's model list includes the specified.

The file must appear in the creature's meshes folder. String must include the ". GetCreatureSound - returns the creature's sound associated with the specified action sound: ToggleCreatureModel - toggles a model within a creature's model list on or off. The model path must be relative to the creature's model folder and include the ". When called on a reference which is currently being rendered, the reference must be disabled and then enabled before the change is visible.

GetCreatureModelPaths - returns an Array containing the set of model paths in the creature's model list. Only those models which are toggled on are included.

SetCreatureSkill - sets the value of one of the creature's skills. Pass "stealth", "magic", or "combat" as the skill name. The skill value must be between 0 and GetCombatStyle - returns the combat style assigned to the calling reference. Note that many actors are assigned no combat style in the editor i.

Most of these functions get or set the values of properties defined in the Combat Style window for each combat style and follow the same syntax conventions. IsLoadDoor - returns 1 if the calling reference is a load door isLoadDoor: GetLinkedDoor - returns the door to which the calling load door is linked linkedDoor: GetTeleportCell - returns the cell to which the calling load door teleports cell: IsOblivionGate -returns true if the door is flagged as an Oblivion gate in the editor.

IsHiddenDoor - returns 1 if the "hidden" flag is set for the door. IsAutomaticDoor - returns 1 if the "Automatic" flag is set for the door. SetIsHiddenDoor - sets or clears the "hidden" flag for the door.

SetIsAutomaticDoor - sets or clears the "Automatic" flag for the door. SetDoorTeleport - sets the reference, coordinates, and rotation to which the calling door teleports. Only the reference argument is required; the values for the others will be taken from the specified reference's coordinates and rotation if omitted. The bTemporary argument specifies that the change should not be saved in the savegame; by default, or if the argument is zero, the change will be saved. GetDoorTeleportX - returns the x coordinate to which the calling door teleports.

GetDoorTeleportY - returns the y coordinate to which the calling door teleports. GetDoorTeleportZ - returns the z coordinate to which the calling door teleports. GetDoorTeleportRot - returns the rotation to which the calling door teleports. This is the angle the player will be facing after activatingthe load door.

GetTeleportCellName - when called on a teleporting door reference, returns the name of the cell or worldspace to which the door teleports cellName: Enchantment Type short - the type of object to which an enchantment may be applied Charge long - the charge of the enchantment. Of unknown and dubious use - the number sometimes does not correspond to the value listed in the CS. The CS seems to list cost and charge both from the Cost value on the enchantment item.

Cost long - the cost in magicka charge consumed by each use of the enchantment. GetEnchantmentType - returns the type of the enchantment enchantType: GetEnchantmentCharge - returns the charge of the enchantment.

Of unknown and dubious use. SetEnchantmentCharge - sets the charge of the enchantment. ModEnchantmentCharge - modifies the charge of the enchantment. GetEnchantmentCost - returns the magicka charge cost for using the enchantment cost: IsFactionEvil - returns 1 if the faction is marked as evil isEvil: IsFactionHidden - returns 1 if the faction is not shown on the player's faction sheet isHidden: SetFactionEvil - changes the Evil flag on the faction.

Changes are saved in the savegame nothing SetFactionEvil faction: SetFactionHidden - changes the Hidden flag on the faction. Changes are saved in the savegame nothing SetFactionHidden faction: GetNumRanks - returns the number of ranks in the faction. GetNthFactionRankName - returns the title of the nth rank in a faction.

Optionally returns the female rank name. Optionally sets the female rank name. IsHarvested - returns 1 if the calling reference's ingredient has been harvested isHarvested: SetHarvested - mark or unmark the calling reference as having been harvested. Changes are saved in the savegame.

GetIngredient - returns the ingredient contained in a plant. SetIngredient - sets the ingredient contained in a plant. Omit the ingredient parameter or pass an empty ref variable to set it to "no ingredient.

Return value ranges from 0 to A list of creatures, NPCs, items, or spells. Changes made to lists using OBSE functions are not saved in the savegame, but persist for the duration of the game session after they are made. To make effectively "permanent" changes to a leveled list, include code similar to the following in a quest script:. AddToLeveledList - adds an object to a leveled creature, spell, or item list. Count defaults to 1 if unspecified.

RemoveFromLeveledList - removes all occurences of an object from a leveled list and returns the number of occurences removed. CalcLeveledItem - returns one item from a leveled item list, selected randomly for a character of the specified level. Oblivion selects a level range from which to choose using the game setting iLevItemLevelDifferenceMax.

The item chosen is within the range [minLevel This function checks the "Chance None" property of the leveled list, so it may return nothing based on that chance; pass 0 for the third parameter to override this behavior. In the case of leveled lists containing nested leveled lists, the function recurses through each list until it finds a non-leveled item.

CalcLevItems - returns an Array of StringMaps representing items selected randomly from a leveled item list. This command uses the game code to select items, which means the items returned are the same as those the game would select for an actor of the specified level. Does not work with leveled spells or creatures. Each entry in the returned Array is a StringMap with the key-value pairs: The optional "count" parameter is 1 by default.

GetCalcEachInCount - returns 1 if the "calculate for each item in count" flag is checked. GetChanceNone - returns the chance from 0 to that a leveled list returns no item. GetNumLevItems - returns the number of elements in a leveled list. GetLevItemByLevel - returns the first element of the specified level in the leveled list.

ClearLeveledList - removes all elements from a leveled list. RemoveNthLevItem - removes the nth item from a leveled list. GetLevItemIndexByLevel - returns the index of the first item of the specified level within a leveled list, or -1 if no item exists for that level.

GetLevItemIndexByForm - returns the index of the first occurrence of the specified form in a leveled list, or -1 if the form is not found. SetChanceNone - sets the chance that a leveled list generates no item.

Objects which emit light. They may or may not have a visible model associated with them and may or may not be carriable. Equippable , Inventory , Named , Simple , Audible.

Radius short - the radius illuminated by the light. IsLightCarriable - returns 1 if the light may be placed in an inventory. GetLightRadius - returns the radius of the light. SetLightRadius - sets the radius of the light.

Changes are not saved in the savegame. GetLightRGB - returns the red, green, and blue components of the light's color as an Array of 3 elements of values 0 through The first element corresponds to the red value, the second to green, and the third to blue. SetLightRGB - sets the red, green, and blue components of the light's color, accepting the components as an Array of 3 elements of values 0 through GetLightDuration - returns the duration of the light as defined in the editor.

SetLightDuration - sets the duration of the light. GetTimeLeft - returns the amount of time left before the calling light reference expires.

GetEquippedTorchTimeLeft - returns the amount of time before the torch equipped by the calling actor expires. SetTimeLeft - sets the amount of time before the calling light reference expires. Code chars or long - the magic effect code. As a return value from OBSE functions it is a long with the same numerical value.

Base Cost float - the base cost multiplier for the effect School short - the spell skill controlling the effect Projectile Speed float - the projectile speed of the magic effect Enchant Factor float - the constant effect enchantment factor which helps determine the maximum magnitude of the effect when enchanting Barter Factor float - the constant effect barter factor which helps determine the increase in value when enchanting Is Hostile flag bool - determines if the effect is hostile.

Only hostile effects may be in a poison. GetMagicEffectCode - returns the magic effect code of the effect. GetMagicEffectCharsC - returns the 4-character code for a magic effect chars: MagicEffectFromCode - given an effect code, returns the effect setting matching that code. MagicEffectFromChars - given a string representing a four-letter effect code e. GetMagicEffectSchool - returns the controlling school of the magic effect magicSchool: GetMagicEffectEnchantFactor - returns the constant effect enchantment factor of the magic effect enchantFactor: GetMagicEffectBarterFactor - returns the constant effect barter factor of the magic effect enchantFactor: IsMagicEffectHostile - returns whether the magic effect is hostile isHostile: IsMagicEffectDetrimental - returns whether the magic effect harms the receipient isDetrimental: MagicEffectUsesWeapon - returns whether the magic effect summons a weapon usesWeapon: MagicEffectUsesArmor - returns whether the magic effect summons armor usesArmor: MagicEffectUsesCreature - returns whether the magic effect summons a creature usesCreature: MagicEffectUsesSkill - returns whether the magic effect affects a skill usesSkill: MagicEffectUsesAttribute - returns whether the magic effect affects an attribute usesAttribute: GetMagicEffectOtherActorValue - returns the actor value skill, attribute or other affected by the magic effect actorValue: A 'C' version is also provided.

AddMagicEffectCounter C - adds a counter-effect to the magic effect. The 'C' version accepts magic effect codes for both arguments. GetMagicEffectCounters C - returns an Array containing the effect codes of all counter-effects for the specified magic effect. SetMagicEffectCounters C - accepts an Array of effect codes and assigns those effects as counter-effects for the specified magic effect, overriding any existing counter-effects. The user must guarantee that the passed array contains valid effect codes and nothing else.

The function returns 1 if the new counter-effects were successfully applied, 0 otherwise. These functions can be used to retrieve or modify the properties of magic effect settings as defined in the Magic Effects window of the editor. Because they all follow similar syntax conventions and are largely self-explanatory, most are not documented individually.

Versions of the commands ending in 'C' take a numeric magic effect code rather than a Magic Effect form as the argument to indicate the effect. All of these functions have abbreviated alternate names in which "MagicEffect" is replaced by "ME", i. Get versions of these commands return a form i. A map marker is a reference to a static object of the type "mapmarker" defined as a default object in the editor. Map marker references have additional information such as a id, type of location, etc.

IsMapMarkerVisible - returns 1 if the map marker can be seen on the player's map visible: SetMapMarkerVisible - sets whether the map marker can be seen on the player's map nothing reference. CanTravelToMapMarker - returns 1 if the player can travel to the map marker by clicking on it in the map menu canTravel: SetCanTravelToMapMarker - sets whether the player can travel to the map marker by clicking it in the map menu nothing reference.

GetMapMarkerType - returns the type of icon used to represent the location on the map. SetMapMarkerType - sets the type of icon used to represent the location on the map. GetMapMarkers - returns an Array containing all map marker references.

The filter argument can be used to filter out markers based on their visibility and accessibility: The default filter value is 1. Pass a markerType parameter to include only markers of the specified type; omit it or pass zero to include all types. Actor , Class , Container , Magic Target. GetEquippedObject - returns the base object of the item equipped in the specified slot objectID: GetEquipmentSlotMask - Returns the base object of the first equipped object to match the specified equipment slot mask.

If no 'value' parameter is specified, it is assumed to be the same value as the 'mask' parameter. See the " equipment slot bit assignments " list for more info. SetMerchantContainer - replaces the specified mechant's container and returns the old container. If the specified NPC does not have a merchant container, or if the passed reference is not a container the function does nothing and will return 0.

GetHorse - returns the horse currently ridden by the calling NPC. Note that this function returns a reference while the NPC is in the process of walking toward a horse with the intention of mounting it.

GetTravelHorse - returns a reference to the travel horse used by the calling reference. IsFemale - returns 1 if the NPC is female. SetTravelHorse - Sets the travel horse used by the calling reference to the horse reference specified.

Changes alter the base actor and are not saved in the savegame unless called on the player. Changes will not be visible until the actor is reloaded; calling disable followed by enable a frame later will force the NPC to reload, updating the hair. Changes do appear to be saved for the player, but may not be visible until the game is reloaded. CopyEyes - Copies the eyes used by one npc onto another, with the same caveats as CopyHair. GetRace - returns the race of an NPC. GetHair - returns the NPC's hairstyle hair: GetEyes - returns the NPC's eyes eyes: The code is obtained by ORing adding service flags servicesMask: A pathgrid is a set of nodes connected by edges which is used by actors to navigate the world.

Path nodes are not references, so commands cannot be called on them directly. Instead, OBSE provides an integer NodeID type uniquely describing a node; this ID can be passed to pathgrid commands to retrieve or modify the properties of a pathgrid.

Note that a NodeID is only valid for as long as the player remains in the same cell; for practical purposes they should be considered valid only for one frame. Path nodes can be disabled, in which case actors will ignore them while pathfinding. GetPathNodesInRadius - returns an Array of all path nodes located within the circular area described by the center point x, y and the radius.

By default, disabled nodes are ignored; pass 1 for the optional fourth argument to include them. GetPathNodesInRect - returns an Array of all path nodes located within the rectangular area described by the center point x, y and the extents along the x and y axes i. The chemical difference between fats solid at room temperature and fats liquid at room temperature is that the solid fats have hydrogen atoms in the right place providing a more solid and stable structure.

This is why butter is one of the safest fats to cook with. So the spread manufacturers need to add hydrogen atoms to their liquid oils in some way. We used to hear about hydrogenated fats and then we had partially hydrogenated fats, but whether or not the attempt is to fully or partially hydrogenate liquid oils, the process is the same.

In the process of hydrogenation, the oils are heated and pressurised and hydrogen gas is added, along with a catalyst, like nickel, to produce a chemical reaction.

The idea is that the hydrogen atoms end up in the gaps where they would be in a more saturated fat. Some end up on the wrong side of the structure and you end up not with a saturated fat, but with a completely new fat completely alien to the body. Do I think that putting alien chemicals into the human body can cause heart disease, cancer and all sorts of harm?

I think that I would be naive not to think this. The substance at the end of this process is grey, smelly and lumpy, so it is bleached, deodorised and emulsifiers are added to smooth things over. Finally, the stuff needs some colour to make it look edible, so, of course, the preferred colour is butter colour. Canada retained the strongest legislative position on not allowing butter colour to be used. As recently as July Quebec became the last Canadian province to repeal its law that margarine should be colourless.

The processed spread is much cheaper, despite all the industrial operations needed. Real butter needs to come from a real animal and the best butter is hand churned. I checked an on line grocery store at the time of writing The Obesity Epidemic: How can we stop it? The butter was sold in gram packets. The spreads were sold in gram, or one kilogram, tubs. The health claim should be twofold: The name and the marketing campaign go hand in hand.

It is the plant sterols mentioned above that can impact human cholesterol. These can be obtained in tablet form, so no one needs to consume spreads, even if they are misinformed enough to risk consuming plant sterol.

Think of plant sterols as plant cholesterol — just as we humans have human cholesterol. There are several types of plant cholesterol; together they are named plant sterols. A typical Western diet contains approximately mg plant sterols, but little is taken up in the gut. Human and plant cholesterol compete for uptake in the gut. So, if too much plant sterol is consumed, human cholesterol falls. If we were supposed to be replacing human cholesterol with plant cholesterol I figure that there would be a natural process for this.

So yes, human cholesterol, which is what our blood test measures, will fall if we consume plant sterols but a this is not natural b we have no evidence that replacing our cholesterol with plant cholesterol will lower heart disease and c we have no evidence that replacing our cholesterol with plant cholesterol is safe.

As Dr Uffe Ravnskov, founder of the International Network of Cholesterol Skeptics and author of several books about fat and cholesterol, says: What happens is that our own cholesterol is exchanged with a foreign type of cholesterol, not only in the blood but also in our cells and cell membranes.

Is it really a good idea? I think so, and science is in support of my view. Dr Ravnskov has led the way in trying to investigate what happens if we unnaturally ingest large quantities of plant sterols.

Ravnskov uncovered their conflicts of interests as follows: Here is for instance Dr. In addition Unilever Research and Development provided the donation of margarines used in the study. Ravnskov gives this as a particular example: In this group statin treatment resulted in a further increase of plant sterols and the number of heart attacks was twice as high compared with the patients with the lowest plant sterol levels.

For women to make a healthy baby, they need a lot of cholesterol. The blog showing that high cholesterol is associated with low heart deaths and low overall mortality has details about the functions performed by cholesterol and why it is so utterly life vital to humans.

When you understand the vital role that cholesterol plays in every single cell of the human body, not least the reproductive system, you can start to understand why cholesterol is so vital to all humans, and to women having or intending to have children especially. You may also wonder why on earth such a critical substance for human health has been demonised so comprehensively — the next paragraph will give you a clue.

Lipitor is the most lucrative of all statins. The patient leaflet can be accessed here. So, even the drug companies know that cholesterol should not be lowered in pregnant women, breastfeeding women or women who could conceive. What about cholesterol lowering products, as opposed to cholesterol lowering drugs? Should cholesterol lowering spreads come with a health warning for pregnant women? Women of childbearing age? Does the BHF know? Nature makes a natural product for using in any and all circumstances when Unilever would no doubt prefer people to use one of their processed products instead.

Shame on both of them. Malcolm Kendrick has found that there is a way of solidifying liquid vegetable oils without hydrogenation. The process is called Interesterification and Wiki tells us how it is done: Polyunsaturated fatty acids PUFAs decrease the melting point of fats significantly.

A triglyceride containing three saturated fatty acids is generally solid at room temperature and not very desirable for many applications. Rearranging these tryglycerides with oils containing unsaturated fatty acids lowers the melting point and creates fats with properties better suited for target food products. In addition, blending interesterified oils with liquid oils allows the reduction in saturated fatty acids in many trans fatty acid free food products.

The interesterified fats can be separated through controlled crystallization, also called fractionation. I had a heart attack in and then a stent, no heart damage so very lucky. Even the patient leaflet cautions against anyone over 70 taking them, so make sure you re-evaluate at some time. Your walking is awesome — one of the best things you can be doing and not smoking of course.

Sounds like you and wifey are in for good times together: Hi Hussain This is my view: This may be of interest — http: They replace cholesterol to be more precise and the evidence for the impact of this is not good http: Olive oil is OK to cook with. Having said that — we stir fry veg in olive oil because we prefer the taste.

We cook fish in butter — more stable. The exercise addition is a good one — walking better for joints than jogging — but doing something regularly is great.

If his cholesterol was high and I mean high — not what docs call high — it would be a marker that there was damage that cholesterol was trying to repair. Hello,luckily,I always used the simple logic that butter,pork fat,goose fat a duck fat are not only tastier but natural and I found the taste of margarine strange. I am so happy that we have some brave people who also have common sense and tell us the truth about food,the manufacturing processes,additives,the danger of farmaceutical drugs,vaccines etc.

The damage which food and farmaceutical industry performs on people is huge and unprecedental in the whole history of human mankind. The margarine vs butter battle is one of my fields of research and your article is very helpful and clarifying.

I would like to know more about the process of producing margerine, and I would be really interested in talk to someone that could potentially show me this process. Would you be able to point me in the direction of someone that would be able to help me in my research? I apreciate very much any possible help.

Hi Juliana — I would start by looking for videos on youtube — not those provided by Unilever and the marg industry. Although those may show you the process — just turn the sound off to miss the hype and PR. You could approach Unilever or other marg makers but they are likely to want to know your end in mind before inviting you in.

Good luck Best wishes — Zoe. I am completely and utterly confused about CVD. I am a 65 yr old male. In January this year I had 3 stents placed in my coronary arteries. I was prescribed an 80mg dose of statin which I stopped after a month because of fairly serious side effects.

Further details can be downloaded here. Some of these companies recovered and came out of administration; some were bought by other businesses; some were sold as going concerns but changed their name; for some, the name was bought and this is still used, but under different ownership; and others ceased to exist.

The presence of any business in this historical listing must not be taken to imply that it no longer exists, its name is not used or that such business, if still trading, is impaired in anyway. In February widespread concern was expressed about how recent business failures had been handled.

There is no imputation of illegality made, it is just odd. Who's Gone Bust in Retail? Tweet Tell a friend about this page.